Η βαθμολογία SEO — διαφανής, με εκδόσεις, στο Pro
Η σάρωση Pro δίνει σε κάθε σελίδα βαθμολογία SEO 0-100 — τον έναν αριθμό που αναζητά όποιος μεταφέρεται από RankMath ή Yoast. Σε αντίθεση με έναν αδιαφανή βαθμό, αυτή είναι πλήρως ελέγξιμη: κάθε πόντος που αφαιρεί συνδέεται με ακριβώς ένα ζήτημα σάρωσης και το ίδιο σύνολο ζητημάτων παράγει πάντα τον ίδιο αριθμό.
score = 100 − Σ penalty(issue) for each scored issue (floored at 0)Ένας αριθμός, ένας υπεύθυνος
Η αριθμητική βαθμολογία είναι λειτουργία Pro. Βρίσκεται στην εγγραφή seo_scan_results του Pro, ποτέ ξανά στο seo_meta του πυρήνα (η παλιά στήλη seo_score αφαιρέθηκε στο Core 3). Το δωρεάν seo:audit του πυρήνα αναφέρει ανά σελίδα pass / warn / fail χωρίς αριθμό — η βαθμολογία είναι η επιπλέον δυνατότητα επί πληρωμή.
Η κλίμακα βαθμολόγησης
Η βαθμολογία υπολογίζεται από δημοσιευμένη κλίμακα με εκδόσεις — Rankbeam\Seo\Pro\Scanning\ScoreRubric. Την καθορίζουν δύο στοιχεία: ρητή λίστα επιτρεπόμενων κωδικών ζητημάτων που μετρούν και σταθερή ποινή ανά σοβαρότητα.
| Σοβαρότητα | Ποινή | Σημασία |
|---|---|---|
critical | −40 | Εύρημα μεγάλου αντίκτυπου σε αυτή την κλίμακα. |
warning | −15 | Εύρημα προς σύντομη διερεύνηση. |
notice | −5 | Επιθυμητή βελτίωση. |
Η σοβαρότητα κάθε κωδικού διαβάζεται απευθείας από το μητρώο ζητημάτων (τη μοναδική πηγή αλήθειας) — η κλίμακα δεν την υπολογίζει ξανά. Η σοβαρότητα είναι 1:1 ανά κωδικό ακριβώς για να παραμένει ντετερμινιστική η βαθμολογία.
Τι μετρά η βαθμολογία
Αυτοί είναι ντετερμινιστικοί έλεγχοι επιλεγμένοι από την κλίμακα του προϊόντος Rankbeam, μαζί με ευρετικές που χρειάζονται συντακτική ερμηνεία. Ένα κρίσιμο κοστίζει 40, μια προειδοποίηση 15, μια ειδοποίηση 5· η βαθμολογία δεν είναι πρόβλεψη απόδοσης στην αναζήτηση.
| Κωδικός | Σοβαρότητα | Ποινή |
|---|---|---|
missing_title | κρίσιμη | −40 |
missing_description | προειδοποίηση | −15 |
missing_og_image | ειδοποίηση | −5 |
duplicate_title | προειδοποίηση | −15 |
duplicate_description | προειδοποίηση | −15 |
title_too_long | προειδοποίηση | −15 |
title_too_short | ειδοποίηση | −5 |
description_too_long | προειδοποίηση | −15 |
description_too_short | ειδοποίηση | −5 |
robots_conflict_indexing | κρίσιμη | −40 |
robots_conflict_following | προειδοποίηση | −15 |
noindex_warning | προειδοποίηση | −15 |
invalid_canonical | κρίσιμη | −40 |
cross_domain_canonical | προειδοποίηση | −15 |
shared_canonical | ειδοποίηση | −5 |
insecure_canonical | προειδοποίηση | −15 |
http_error | κρίσιμη | −40 |
empty_response | κρίσιμη | −40 |
missing_canonical | ειδοποίηση | −5 |
missing_h1 | ειδοποίηση | −5 |
missing_image_alt | προειδοποίηση | −15 |
thin_content | ειδοποίηση | −5 |
mixed_content | προειδοποίηση | −15 |
canonical_target_broken | κρίσιμη | −40 |
canonical_target_redirect | προειδοποίηση | −15 |
canonical_target_noindex | προειδοποίηση | −15 |
Επειδή οι κωδικοί μεταδεδομένων εντοπίζονται σε σάρωση μοντέλου και οι κωδικοί απόδοσης/δικτύου μόνο σε σάρωση URL (δείτε τις κλάσεις εκτέλεσης), η βαθμολογία ενός στόχου μοντέλου αντικατοπτρίζει τους ελέγχους μεταδεδομένων και ενός στόχου URL την αποδιδόμενη σελίδα. Βαθμολογία 100 σε σάρωση μοντέλου σημαίνει «χωρίς ελαττώματα μεταδεδομένων», όχι «η αποδιδόμενη σελίδα είναι τέλεια» — σαρώστε τη URL γι' αυτό.
Τι σκόπιμα ΔΕΝ μετρά η βαθμολογία
Αυτοί οι κωδικοί μητρώου εξαιρούνται σκόπιμα. Οι εξαιρέσεις είναι μέρος του συμβολαίου (μια δοκιμή επιβεβαιώνει ότι κάθε κωδικός μητρώου είτε βαθμολογείται είτε αναφέρεται εδώ):
| Κωδικός | Γιατί εξαιρείται |
|---|---|
missing_focus_keyword | Συμβουλευτικός. Ενεργοποιείται μόνο μέσω της προαιρετικής ροής seo.keywords.enabled — μια σελίδα δεν πρέπει να βαθμολογείται χαμηλότερα επειδή δεν υιοθετεί λέξεις-κλειδιά εστίασης και η βαθμολογία δεν πρέπει να εξαρτάται από σημαία ρυθμίσεων. |
noindex_page | Πληροφοριακός. Το noindex είναι σκόπιμη κατάσταση, όχι ελάττωμα ποιότητας μεταδεδομένων. Η ευρετική «noindex με κανονική URL της ίδιας της σελίδας» βαθμολογείται μέσω του noindex_warning. |
multiple_h1 | Πληροφοριακός. Το Google δέχεται πολλά H1 — χωρίς ποινή για πολλαπλά H1. |
blocked_url | Απουσία στοιχείων. Το SsrfGuard αρνήθηκε την ανάκτηση, οπότε η σελίδα δεν ελέγχθηκε ποτέ — δεν είναι ελάττωμα της σελίδας. |
canonical_target_blocked | Απουσία στοιχείων. Ο κανονικός προορισμός δεν μπόρεσε να επαληθευτεί — δεν είναι ελάττωμα της σελίδας. |
hreflang_invalid_code, hreflang_missing_self_reference, hreflang_duplicate_code, hreflang_missing_x_default | Συμβουλευτικοί (προς το παρόν). Αυτοί οι κωδικοί hreflang του Pro εμφανίζονται στη σάρωση· ο δωρεάν έλεγχος έχει δικούς του κωδικούς hreflang, αλλά δεν επηρεάζει ακόμη τη βαθμολογία — η προσθήκη θα απαιτούσε αύξηση του VERSION. |
html_lang_missing, html_lang_invalid, html_lang_mismatch | Συμβουλευτικοί. Οι έλεγχοι γλώσσας μένουν εκτός αυτής της κλίμακας. |
hreflang_not_reciprocal | Συμβουλευτικός. Προαιρετικός έλεγχος αμοιβαιότητας, δεν βαθμολογείται. |
hreflang_target_unverified | Απουσία στοιχείων. Η αμοιβαιότητα δεν μπόρεσε να επαληθευτεί. |
aeo_missing_author, aeo_article_missing_date | Συμβουλευτικοί. Σήματα ετοιμότητας απαντήσεων (AEO) — επισημαίνουν άρθρο χωρίς οντότητα συντάκτη ή ημερομηνία δημοσίευσης στη σάρωση και στον δωρεάν έλεγχο, αλλά δεν επηρεάζουν τη βαθμολογία (θα απαιτούνταν αύξηση του VERSION). |
Η πυκνότητα λέξεων-κλειδιών, οι λέξεις έμφασης και τα υπόλοιπα της λίστας ελέγχου σελίδας δεν μπαίνουν ποτέ στη βαθμολογία — είναι συμβουλευτικοί έλεγχοι (ξεχωριστή λίστα pass/warn/fail), όχι κωδικοί μητρώου.
Εκδόσεις — οι ιστορικές βαθμολογίες δεν αλλάζουν ποτέ σιωπηλά
Κάθε αποθηκευμένη βαθμολογία σημειώνεται με το ScoreRubric::VERSION που την παρήγαγε (rubric_version). Δύο συνέπειες:
- Ένας νέος κωδικός ζητήματος δεν βαθμολογεί τίποτα μέχρι να προστεθεί σκόπιμα στη λίστα επιτρεπόμενων — οπότε η διάθεση νέου ελέγχου δεν μπορεί ποτέ να αλλάξει αναδρομικά μια αποθηκευμένη βαθμολογία. (Αλλαγή λίστας ή βάρους είναι η ίδια αλλαγή κλίμακας και αυξάνει την έκδοση.)
- Η βαθμολογία αποθηκεύεται, δεν υπολογίζεται ξανά κατά την ανάγνωση. Ο αριθμός που είδατε την περασμένη εβδομάδα είναι αυτός που βλέπετε σήμερα, μαζί με την κλίμακα που τον εξηγεί.
Πού αποθηκεύεται
Κάθε σάρωση εισάγει ή ενημερώνει μία εγγραφή ανά στόχο στο seo_scan_results:
| Στήλη | Τι περιέχει |
|---|---|
scannable_type / scannable_id | Το βαθμολογημένο μοντέλο (null για στόχους URL). |
url | Η βαθμολογημένη URL. |
score | Ο αριθμός 0-100. |
rubric_version | Η κλίμακα που τον παρήγαγε. |
penalty_total | Ακατέργαστο άθροισμα ποινών πριν από το κατώτατο όριο 0. |
scored_issues | Πόσα ζητήματα επηρέασαν τον αριθμό. |
breakdown | [{code, severity, penalty}, …] — η πλήρης διαδρομή υπολογισμού. |
keywords_enabled | Η κατάσταση seo.keywords.enabled κατά τη σάρωση (καταγράφεται για διαφάνεια· η βαθμολογία δεν εξαρτάται από αυτή). |
scan_run_id | Η εκτέλεση που τη βαθμολόγησε (γίνεται null, δεν διαγράφεται η βαθμολογία όταν καθαρίζεται η εκτέλεση — οι βαθμολογίες είναι τρέχουσα κατάσταση, όχι ιστορικό εκτελέσεων). |
scored_at | Πότε βαθμολογήθηκε. |
Ανάγνωση της βαθμολογίας
Χωρίς πάνελ — η πιο πρόσφατη βαθμολογία ενός μοντέλου:
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 εκτυπώνει τη μέση βαθμολογία ιστοτόπου στην περίληψή του. Ο πίνακας ελέγχου Filament τη δείχνει ως κύριο στατιστικό «Μέση βαθμολογία SEO», χρωματισμένο ανά βαθμό.
Ζώνες βαθμών
Βαθμός παρουσίασης με γράμμα που προκύπτει από τον αριθμό (ο αριθμός είναι το συμβόλαιο):
| Βαθμολογία | Βαθμός |
|---|---|
| 90-100 | A |
| 75-89 | B |
| 50-74 | C |
| 25-49 | D |
| 0-24 | F |
Το σήμα προς έλεγχο πριν από τη διάθεση (noindex_warning)
Το noindex_warning ενεργοποιείται όταν μια σελίδα συνδυάζει noindex με κανονική URL της ίδιας της σελίδας (κανονική που ονομάζει τη δική της URL). Το Rankbeam το αντιμετωπίζει ως σήμα προς έλεγχο πριν από τη διάθεση. Μια κανονική URL της ίδιας της σελίδας δεν αποδεικνύει πρόθεση ευρετηρίασης: ο συνδυασμός μπορεί να είναι σκόπιμος. Μια κανονική URL άλλου τομέα δεν ενεργοποιεί αυτή την ευρετική. Το ζήτημα περιέχει context.shipping_signal (για παράδειγμα self_canonical), μαζί με τα συγκρινόμενα canonical και page_url.
Και οι δύο σαρωτές εφαρμόζουν τον έλεγχο. Η σάρωση μοντέλου (PageScanner) συγκρίνει την αποθηκευμένη κανονική URL με τη URL μοντέλου. Η σάρωση αποδιδόμενης URL (UrlScanner) αναβαθμίζει μια σελίδα noindex με κανονική URL του εαυτού της από πληροφοριακό noindex_page σε βαθμολογούμενο noindex_warning. Γι' αυτό εξαιρείται το ίδιο το noindex_page: η πιθανή σύγκρουση αντιμετωπίζεται από το noindex_warning και στις δύο διαδρομές. Ελέγξτε την πραγματική πρόθεση της σελίδας πριν αλλάξετε την οδηγία ευρετηρίασής της.
Ρυθμίσεις
// config/seo-pro.php → 'scan'
'score' => [
'enabled' => true, // turn the scoring pass + its persistence on/off
],Η λίστα επιτρεπόμενων και τα βάρη δεν ρυθμίζονται: η βαθμολογία πρέπει να είναι ντετερμινιστική για δεδομένο rubric_version σε κάθε εγκατάσταση, οπότε η αλλαγή του τρόπου υπολογισμού είναι αλλαγή κλίμακας σε επίπεδο κώδικα, όχι ρύθμιση.