Zum Inhalt springen

SEO-Bewertung: nachvollziehbar, versioniert und Teil von Pro

Der Pro-Scan gibt jeder Seite eine SEO-Bewertung von 0 bis 100, wie sie Umsteiger von Rank Math oder Yoast erwarten. Jeder Punktabzug lässt sich auf genau einen Scan-Befund zurückführen. Dieselbe Befundmenge erzeugt denselben Wert; die Berechnung ist vollständig nachvollziehbar.

score = 100 − Σ penalty(issue) for each scored issue   (floored at 0)

Eine Zahl mit klarer Zuständigkeit

Die numerische Bewertung gehört zu Pro und wird in seo_scan_results gespeichert, nicht in seo_meta des Cores. Die alte Spalte seo_score wurde in Core 3 entfernt. Das kostenlose seo:audit meldet je Seite pass, warn oder fail ohne Zahl. Die numerische Bewertung ist eine zusätzliche Pro-Funktion.

Die Bewertungsregel

Die Berechnung verwendet die veröffentlichte, versionierte Regel Rankbeam\Seo\Pro\Scanning\ScoreRubric: eine ausdrückliche Liste bewerteter Befundcodes und einen festen Abzug je Schweregrad.

SchweregradAbzugBedeutung
critical−40In dieser Bewertungsregel stark gewichteter Befund
warning−15Zeitnah zu untersuchender Befund
notice−5Ergänzender Verbesserungshinweis

Der Schweregrad jedes Codes stammt direkt aus der Befund-Registry. Die Bewertungsregel leitet ihn nicht erneut ab. Jedem Code ist genau ein Schweregrad zugeordnet, damit die Berechnung deterministisch bleibt.

Was in die Bewertung eingeht

Die folgenden deterministischen Prüfungen wurden für Rankbeams Produktbewertung ausgewählt. Dazu gehören Heuristiken, die redaktionelle Einordnung benötigen. Critical kostet 40 Punkte, warning 15 und notice 5. Der Wert ist keine Prognose der Suchperformance.

CodeSchweregradAbzug
missing_titlecritical−40
missing_descriptionwarning−15
missing_og_imagenotice−5
duplicate_titlewarning−15
duplicate_descriptionwarning−15
title_too_longwarning−15
title_too_shortnotice−5
description_too_longwarning−15
description_too_shortnotice−5
robots_conflict_indexingcritical−40
robots_conflict_followingwarning−15
noindex_warningwarning−15
invalid_canonicalcritical−40
cross_domain_canonicalwarning−15
shared_canonicalnotice−5
insecure_canonicalwarning−15
http_errorcritical−40
empty_responsecritical−40
missing_canonicalnotice−5
missing_h1notice−5
missing_image_altwarning−15
thin_contentnotice−5
mixed_contentwarning−15
canonical_target_brokencritical−40
canonical_target_redirectwarning−15
canonical_target_noindexwarning−15

Metadatencodes entstehen beim Modellscan, gerenderte und Netzwerkbefunde nur beim URL-Scan; siehe Ausführungsklassen. Die Bewertung eines Modellziels beschreibt deshalb Metadatenprüfungen, die eines URL-Ziels die gerenderte Seite. 100 Punkte beim Modellscan bedeutet keine erkannten bewerteten Metadatenfehler, nicht eine fehlerfreie gerenderte Seite. Prüfe dafür auch die URL.

Was bewusst nicht bewertet wird

Die folgenden Registry-Codes sind ausdrücklich ausgeschlossen. Ein Test stellt sicher, dass jeder Registry-Code entweder bewertet oder als Ausschluss aufgeführt ist:

CodeGrund für den Ausschluss
missing_focus_keywordHinweis. Gehört zum optionalen Workflow seo.keywords.enabled. Eine Seite darf nicht wegen Nichtnutzung von Fokus-Keywords schlechter bewertet werden; der Wert soll nicht von diesem Schalter abhängen.
noindex_pageInformation. noindex kann beabsichtigt sein und ist allein kein Metadatenfehler. Die Heuristik „noindex mit Selbst-Canonical“ wird stattdessen über noindex_warning bewertet.
multiple_h1Information. Mehrere H1-Elemente verursachen hier keinen Abzug; Google toleriert mehrere H1.
blocked_urlFehlender Nachweis. Der SsrfGuard hat den Abruf verweigert; die Seite wurde nicht geprüft.
canonical_target_blockedFehlender Nachweis. Das Canonical-Ziel ließ sich nicht prüfen.
hreflang_invalid_code, hreflang_missing_self_reference, hreflang_duplicate_code, hreflang_missing_x_defaultDerzeit Hinweise. Diese Pro-Codes erscheinen im Scan; das kostenlose Audit besitzt eigene Hreflang-Codes. Ihre Aufnahme in die Bewertung benötigt eine neue VERSION.
html_lang_missing, html_lang_invalid, html_lang_mismatchHinweise. Sprachprüfungen sind von dieser Bewertungsregel ausgenommen.
hreflang_not_reciprocalHinweis. Optionale Prüfung gegenseitiger Verweise, ohne Punktabzug.
hreflang_target_unverifiedFehlender Nachweis. Die Gegenseitigkeit konnte nicht geprüft werden.
aeo_missing_author, aeo_article_missing_dateHinweise. AEO-Prüfungen auf fehlende Autorenentität oder Veröffentlichungsdatum im Scan und kostenlosen Audit. Ein Punktabzug würde eine neue VERSION erfordern.

Keyword-Dichte, Power-Wörter und die übrige Onpage-Checkliste fließen überhaupt nicht in die Bewertung ein. Sie bilden eine eigene hinweisende Pass/Warn/Fail-Liste und sind keine Registry-Codes.

Versionierung: gespeicherte Bewertungen bleiben nachvollziehbar

Jeder gespeicherte Wert trägt die erzeugende ScoreRubric::VERSION in rubric_version. Daraus folgen zwei Regeln:

  • Ein neuer Befundcode bewirkt keinen Abzug, bis er ausdrücklich in die Bewertungsliste aufgenommen wird. Eine neue Prüfung verändert gespeicherte Werte daher nicht rückwirkend. Änderungen der Liste oder Gewichte erhöhen die Version der Bewertungsregel.
  • Der Wert wird gespeichert und beim Lesen nicht neu berechnet. Ein zuvor gespeichertes Ergebnis bleibt zusammen mit seiner erklärenden Regel erhalten, bis ein neuer Scan das aktuelle Ziel neu bewertet.

Speicherort

Jeder Scan legt pro Ziel einen Datensatz in seo_scan_results an oder aktualisiert ihn:

SpalteInhalt
scannable_type / scannable_idBewertetes Modell; null bei URL-Zielen
urlBewertete URL
scoreWert von 0 bis 100
rubric_versionVerwendete Bewertungsregel
penalty_totalSumme der Abzüge vor der Begrenzung auf mindestens 0
scored_issuesAnzahl der Befunde mit Einfluss auf den Wert
breakdownVollständige Aufschlüsselung als [{code, severity, penalty}, …]
keywords_enabledZustand von seo.keywords.enabled beim Scan, zur Nachvollziehbarkeit; ohne Einfluss auf den Wert
scan_run_idBewertender Lauf. Beim Bereinigen des Laufs auf null gesetzt; das Ergebnis bleibt als aktueller Stand erhalten und ist keine Laufhistorie.
scored_atZeitpunkt der Bewertung

Bewertung lesen

Ohne Oberfläche den letzten Wert eines Modells abrufen:

php
use Rankbeam\Seo\Pro\Facades\SeoPro;

$result = SeoPro::resultFor($post);

$result?->score;     // e.g. 85
$result?->grade();   // 'A'..'F'
$result?->breakdown; // [['code' => 'cross_domain_canonical', 'severity' => 'warning', 'penalty' => 15]]

php artisan seo-pro:scan-status zeigt die durchschnittliche Website-Bewertung in der Zusammenfassung. Im Filament-Dashboard erscheint sie als „Avg. SEO score“, nach Bewertungsstufe eingefärbt.

Bewertungsstufen

Die Buchstabennote dient der Darstellung und wird aus der Zahl abgeleitet; maßgeblich bleibt die Zahl:

WertStufe
90–100A
75–89B
50–74C
25–49D
0–24F

Die Heuristik hinter noindex_warning

noindex_warning wird ausgelöst, wenn eine Seite noindex mit einem Selbst-Canonical kombiniert, also einem Canonical auf ihre eigene URL. Rankbeam behandelt dies als prüfbedürftiges Veröffentlichungssignal. Ein Selbst-Canonical beweist jedoch keine Indexierungsabsicht; die Kombination kann gewollt sein. Ein Canonical auf eine andere Domain erfüllt diese Heuristik nicht. Der Befund enthält context.shipping_signal, etwa self_canonical, sowie die verglichenen Werte canonical und page_url.

Beide Scanner verwenden diese Prüfung. Der Modellscan PageScanner vergleicht den gespeicherten Canonical mit der Modell-URL. Der gerenderte URL-Scan UrlScanner stuft eine noindex-Seite mit Selbst-Canonical vom rein informativen noindex_page auf das bewertete noindex_warning hoch. Deshalb ist noindex_page selbst von der Bewertung ausgeschlossen; der Abzug hängt auf beiden Wegen an noindex_warning. Prüfe die tatsächliche Seitenabsicht, bevor du die Anweisung änderst.

Konfiguration

php
// config/seo-pro.php → 'scan'
'score' => [
    'enabled' => true, // turn the scoring pass + its persistence on/off
],

Bewertungsliste und Gewichte sind nicht konfigurierbar. Für eine bestimmte rubric_version muss die Berechnung auf jeder Installation gleich sein. Eine Änderung erfolgt deshalb an der Bewertungsregel im Code, nicht über eine Einstellung.

rankbeam/laravel-seo steht unter der MIT-Lizenz.