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.