> ## Documentation Index
> Fetch the complete documentation index at: https://docs.filarank.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Writing your own check

> Implement the Check contract and register it with the analyzer

Implement the `Check` contract and register it:

```php theme={null}
use Usamamuneerchaudhary\FilaRank\Analysis\Contracts\Check;
use Usamamuneerchaudhary\FilaRank\Analysis\{CheckResult, ContentContext, Status};

final class NoClickbaitTitle implements Check
{
    public function id(): string { return 'no-clickbait'; }
    public function group(): string { return 'seo'; }

    public function isApplicable(ContentContext $context): bool
    {
        return filled($context->title);
    }

    public function run(ContentContext $context): CheckResult
    {
        $clickbait = str_contains(mb_strtolower($context->title), 'you won\'t believe');

        return new CheckResult(
            $this->id(),
            $this->group(),
            $clickbait ? Status::Bad : Status::Good,
            $clickbait ? 'Avoid clickbait phrasing in titles.' : 'Title looks trustworthy.',
        );
    }
}
```

Then run the analyzer with your check added:

```php theme={null}
$report = SeoAnalyzer::analyzer()
    ->withCheck(new NoClickbaitTitle())
    ->analyze($context);
```

<Note>
  The analysis engine (`src/Analysis` and `src/Support`) has zero Laravel dependencies, so custom checks are trivially unit-testable and reusable outside Filament.
</Note>

## Disabling built-in checks

If you'd rather turn a check off instead of writing your own, disable it by id in `config/filarank.php`:

```php theme={null}
'analysis' => [
    'disabled_checks' => ['outbound-links', 'passive-voice'],
],
```

See [Configuration](/configuration) for the full list of analysis options.
