Skip to main content
Implement the Check contract and register it:
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:
$report = SeoAnalyzer::analyzer()
    ->withCheck(new NoClickbaitTitle())
    ->analyze($context);
The analysis engine (src/Analysis and src/Support) has zero Laravel dependencies, so custom checks are trivially unit-testable and reusable outside Filament.

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:
'analysis' => [
    'disabled_checks' => ['outbound-links', 'passive-voice'],
],
See Configuration for the full list of analysis options.