Przejdź do treści

Ocena SEO — przejrzysta, wersjonowana, należąca do Pro

Skanowanie Pro nadaje każdej stronie ocenę SEO 0–100 — jedną liczbę, której szuka osoba przechodząca z RankMath lub Yoast. W przeciwieństwie do oceny o niejawnych zasadach ta jest w pełni audytowalna: każdy odjęty punkt można przypisać do dokładnie jednego problemu skanowania, a ten sam zbiór problemów zawsze daje ten sam wynik.

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

Jedna liczba, jeden właściciel

Ocena liczbowa jest funkcją Pro. Znajduje się w rekordzie seo_scan_results Pro, nigdy w seo_meta rdzenia. Dawna kolumna seo_score została usunięta w Core 3. Bezpłatny seo:audit rdzenia podaje dla każdej strony pass / warn / fail, bez liczby. Ocena punktowa to dodatkowa wartość płatnego pakietu.

Zasady oceny

Ocena jest obliczana według opublikowanych, wersjonowanych zasadRankbeam\Seo\Pro\Scanning\ScoreRubric. Definiują ją dwie rzeczy: jawna lista uwzględnianych kodów problemów i stała kara dla każdego poziomu ważności.

WażnośćKaraZnaczenie
critical−40Problem o dużym wpływie według tych zasad.
warning−15Problem do sprawdzenia wkrótce.
notice−5Usprawnienie, które warto rozważyć.

Ważność każdego kodu jest odczytywana wprost z rejestru problemów, będącego jedynym źródłem prawdy. Zasady oceny nie wyznaczają jej ponownie. Każdy kod ma dokładnie jeden poziom ważności, aby wynik był deterministyczny.

Co uwzględnia ocena

Są to deterministyczne kontrole wybrane przez zasady produktu Rankbeam, w tym heurystyki wymagające interpretacji redakcyjnej. Problem krytyczny kosztuje 40 punktów, ostrzeżenie 15, a uwaga 5. Ocena nie prognozuje wyników w wyszukiwarce.

KodWażnośćKara
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

Ponieważ kody metadanych są wykrywane podczas skanowania modelu, a kody renderowania/sieci tylko podczas skanowania URL-a (zobacz klasy wykonania), ocena celu modelowego odzwierciedla kontrole metadanych, a celu URL — wyrenderowaną stronę. Wynik 100 przy skanowaniu modelu oznacza „brak defektów metadanych”, a nie „wyrenderowana strona jest idealna”. Do jej sprawdzenia przeskanuj URL.

Czego ocena celowo NIE uwzględnia

Poniższe kody rejestru są celowo wyłączone. Wyłączenia należą do kontraktu: test sprawdza, czy każdy kod rejestru jest punktowany lub wymieniony tutaj.

KodDlaczego jest wyłączony
missing_focus_keywordDoradczy. Dostępny po włączeniu opcjonalnego procesu seo.keywords.enabled. Strona nie może tracić punktów za niestosowanie głównych słów kluczowych, a wynik nie może zależeć od opcji konfiguracji.
noindex_pageInformacyjny. noindex jest świadomym stanem, a nie defektem jakości metadanych. Heurystykę „noindex z adresem kanonicznym wskazującym na siebie” punktuje zamiast tego noindex_warning.
multiple_h1Informacyjny. Google dopuszcza wiele nagłówków H1, więc nie ma za nie kary.
blocked_urlBrak dowodów. SsrfGuard odmówił pobrania, więc strona nie została sprawdzona. To nie jest defekt strony.
canonical_target_blockedBrak dowodów. Nie udało się zweryfikować kanonicznego adresu docelowego. To nie jest defekt strony.
hreflang_invalid_code, hreflang_missing_self_reference, hreflang_duplicate_code, hreflang_missing_x_defaultDoradcze (na razie). Te kody hreflang Pro pojawiają się w skanowaniu; bezpłatny audyt ma własne kody hreflang, ale nie zmieniają jeszcze oceny. Ich dodanie wymagałoby podniesienia VERSION.
html_lang_missing, html_lang_invalid, html_lang_mismatchDoradcze. Kontrole języka są wyłączone z tych zasad oceny.
hreflang_not_reciprocalDoradczy. Opcjonalna kontrola wzajemnych odwołań nie jest punktowana.
hreflang_target_unverifiedBrak dowodów. Nie udało się sprawdzić wzajemnych odwołań.
aeo_missing_author, aeo_article_missing_dateDoradcze. Sygnały gotowości do odpowiedzi (AEO): wskazują w skanowaniu i bezpłatnym audycie artykuł bez encji autora lub daty publikacji, ale nie zmieniają oceny. Wymagałoby to podniesienia VERSION.

Gęstość słowa kluczowego, słowa wzmacniające przekaz i pozostałe elementy listy kontrolnej treści strony w ogóle nie wpływają na ocenę. To kontrole doradcze na osobnej liście pass/warn/fail, a nie kody rejestru.

Wersjonowanie — historyczne oceny nigdy nie zmieniają się po cichu

Każda zapisana ocena jest oznaczona wersją ScoreRubric::VERSION, która ją wygenerowała (rubric_version). Wynikają z tego dwie rzeczy:

  • Nowy kod problemu nie zmienia oceny, dopóki nie zostanie celowo dodany do listy uwzględnianych kodów. Wprowadzenie nowej kontroli nigdy nie zmienia więc wstecz zapisanej oceny. Zmiana listy lub wag jest zmianą zasad oceny i podnosi ich wersję.
  • Ocena jest zapisywana, a nie obliczana ponownie przy odczycie. Dziś widzisz tę samą liczbę co w zeszłym tygodniu oraz zasady, które ją wyjaśniają.

Gdzie jest przechowywana

Każde skanowanie tworzy lub aktualizuje jeden wiersz na cel w seo_scan_results:

KolumnaZawartość
scannable_type / scannable_idOceniany model (null dla celów URL).
urlOceniany URL.
scoreLiczba 0–100.
rubric_versionZasady, które wygenerowały ocenę.
penalty_totalSurowa suma kar przed ograniczeniem wyniku do minimum 0.
scored_issuesLiczba problemów, które wpłynęły na wynik.
breakdown[{code, severity, penalty}, …] — pełny zapis obliczenia.
keywords_enabledStan seo.keywords.enabled w chwili skanowania (zapisany dla przejrzystości; ocena od niego nie zależy).
scan_run_idPrzebieg, który obliczył ocenę (po usunięciu przebiegu ustawiany na null; ocena nie jest usuwana, bo przedstawia bieżący stan, nie historię przebiegów).
scored_atCzas obliczenia oceny.

Odczytywanie oceny

Bez panelu — ostatnia ocena modelu:

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 wypisuje średnią ocenę witryny w podsumowaniu. Panel Filament pokazuje ją jako główną statystykę „Śr. wynik SEO”, z kolorem zależnym od oceny literowej.

Przedziały ocen

Prezentacyjna ocena literowa wyprowadzona z liczby. To liczba stanowi kontrakt:

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

Sygnał do sprawdzenia przed publikacją (noindex_warning)

noindex_warning pojawia się, gdy strona łączy noindex z adresem kanonicznym wskazującym na siebie, czyli na własny URL. Rankbeam traktuje to jako sygnał do sprawdzenia przed publikacją. Taki adres kanoniczny nie dowodzi, że indeksowanie jest zamierzone: połączenie może być celowe. Adres kanoniczny w innej domenie nie uruchamia tej heurystyki. Problem zawiera context.shipping_signal (np. self_canonical) oraz porównywane canonical i page_url.

Kontrolę wykonują oba skanery. Skanowanie modelu (PageScanner) porównuje zapisany adres kanoniczny z URL-em modelu. Skanowanie wyrenderowanego URL-a (UrlScanner) podnosi problem strony noindex z adresem kanonicznym wskazującym na siebie z informacyjnego noindex_page do punktowanego noindex_warning. Dlatego samo noindex_page jest wyłączone: potencjalny konflikt jest obsługiwany przez noindex_warning na obu ścieżkach. Sprawdź faktyczne przeznaczenie strony, zanim zmienisz jej dyrektywę indeksowania.

Konfiguracja

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

Lista uwzględnianych kodów i wagi nie są konfigurowalne. Ocena musi być deterministyczna dla danego rubric_version w każdej instalacji, więc zmiana sposobu obliczania jest zmianą zasad w kodzie, a nie ustawieniem.

rankbeam/laravel-seo jest udostępniany na licencji MIT.