Μετάβαση στο περιεχόμενο

Η λίστα ελέγχων σελίδας — με λέξη-κλειδί και επιτυχία/προειδοποίηση/αποτυχία

Η λίστα ελέγχων σελίδας είναι ο ζωντανός κύκλος συντακτικής βελτίωσης που περιμένει ένας χρήστης RankMath ή Yoast: επιλέγετε λέξη-κλειδί εστίασης και λαμβάνετε χρωματικά κωδικοποιημένη λίστα ελέγχων «είναι αυτή η σελίδα βελτιστοποιημένη γι’ αυτή;» — λέξη-κλειδί στον τίτλο, στην URL, στην αρχική παράγραφο και στη meta description, μαζί με μήκος, εικόνες, εσωτερικούς συνδέσμους και αναγνωσιμότητα.

Εκτελείται μέσα στο αίτημα (χωρίς ουρά ή δίκτυο), από το μοντέλο, τον resolver και το κείμενο της ίδιας της σελίδας, και σκόπιμα δεν είναι αριθμός.

Λίστα ελέγχων ≠ βαθμολογία

Η λίστα έχει μόνο επιτυχία / προειδοποίηση / αποτυχία και είναι εντελώς ανεξάρτητη από τη βαθμολογία SEO Pro. Δεν μοιράζεται κωδικούς με τα κριτήρια βαθμολόγησης και δεν μπορεί ποτέ να τη μεταβάλει — οι συντακτικές υποδείξεις παραμένουν χωριστές από τα αριθμητικά κριτήρια. Ειδικά η πυκνότητα λέξεων-κλειδιών και η αναγνωσιμότητα είναι συμβουλευτικές (δείτε παρακάτω).

Τι ελέγχει

ΈλεγχοςΟμάδαΤι αναζητά
keyword_in_titlekeywordΗ λέξη-κλειδί εστίασης εμφανίζεται στον τίτλο SEO.
keyword_in_descriptionkeywordΗ λέξη-κλειδί εστίασης εμφανίζεται στη meta description.
keyword_in_urlkeywordΗ λέξη-κλειδί εστίασης εμφανίζεται στο slug της URL.
keyword_in_first_paragraphkeywordΗ λέξη-κλειδί εστίασης εμφανίζεται στην αρχική παράγραφο.
keyword_densitykeywordΣυμβουλευτικός. Η πυκνότητα διαβάζεται φυσικά (χωρίς στόχο — δείτε παρακάτω).
title_lengthmetaΟ τίτλος βρίσκεται στο ίδιο εύρος με τον επεξεργαστή και τη σάρωση — 30–60 για λατινικό κείμενο, περίπου 15–30 για CJK, από την πολιτική μήκους του core (Pro 2.33).
description_lengthmetaΗ περιγραφή βρίσκεται στο ίδιο εύρος — 70–160 για λατινικό κείμενο, περίπου 35–80 για CJK.
content_lengthcontentΑρκετό κύριο κείμενο (ρυθμιζόμενα εύρη πλήθους λέξεων).
readabilitycontentΣυμβουλευτικός. Εκτιμώμενο επίπεδο αναγνωσιμότητας με τον επιλεγμένο τύπο (δέκα γλώσσες), εναλλακτικό LIX ή δηλωμένη ευρετική χωρίς βαθμολογία για Ιαπωνικά, Κινεζικά και Κορεατικά.
has_imagemediaΤο περιεχόμενο περιλαμβάνει τουλάχιστον μία εικόνα.
internal_linkslinksΤο περιεχόμενο συνδέεται με σχετικές εσωτερικές σελίδες.

Οι έλεγχοι λέξεων-κλειδιών παραλείπονται (ούτε επιτυγχάνουν ούτε αποτυγχάνουν) όταν δεν έχει οριστεί λέξη-κλειδί εστίασης — η λίστα σας ζητά να προσθέσετε μία. Προσθέστε τη με το πεδίο λέξης-κλειδιού εστίασης ή το saveSEO(['focus_keywords' => …]).

Αντιστοίχιση λέξεων-κλειδιών

Η λέξη-κλειδί και το κείμενο συγκρίνονται μετά από ενοποίηση πεζών/κεφαλαίων και αποκοπή καταλήξεων, οπότε το «espresso grinder» εξακολουθεί να ταιριάζει με το «espresso grinders» και — με τη γλώσσα ανάλυσης — το τουρκικό «İstanbul» ταιριάζει με το «istanbul», το ελληνικό «ΟΔΟΣ» με το «οδος» και το γερμανικό «Straße» με το «STRASSE» (το CaseFolder του core). Δώστε τη γλώσσα στην οποία θα γίνει η ανάλυση: SeoPro::checklistFor($post, 'it') ή --locale=it.

Από το Pro 2.36.1, λέξεις-κλειδιά, συνώνυμα και κείμενο πεδίων χρησιμοποιούν τον ίδιο tokenizer πριν από την αποκοπή καταλήξεων. Οι αντιστοιχίσεις απαιτούν διαδοχικά ολόκληρα token: το cat δεν ταιριάζει με το education, και οι ιαπωνικές φράσεις χρησιμοποιούν τα ίδια όρια λέξεων ICU με το κυρίως κείμενο. Απόστροφοι και παύλες χωρίζουν τα token, οπότε το meta-tag ταιριάζει με το meta tag και οι ίσιες/τυπογραφικές απόστροφοι συμπεριφέρονται όμοια. Τα συνδυαστικά σημεία παραμένουν συνδεδεμένα με τα γράμματά τους. Η ενοποίηση πεζών/κεφαλαίων διατηρεί τους τόνους· ο stemmer μιας γλώσσας μπορεί να εφαρμόζει επιπλέον μειώσεις.

Η καταμέτρηση εμφανίσεων επιλέγει τη μεγαλύτερη αντιστοιχιζόμενη λέξη-κλειδί/συνώνυμο σε κάθε θέση και μετρά αυτό το διάστημα μία φορά. Διπλότυπα συνώνυμα και επικαλυπτόμενες μικρότερες εναλλακτικές δεν αυξάνουν τεχνητά την πυκνότητα. Για παράδειγμα, η λέξη-κλειδί seo με συνώνυμο seo tools έχει δύο εμφανίσεις στο seo tools seo. Το ICU παραμένει απαραίτητο για λεξικογραφικά όρια λέξεων σε γραφές χωρίς κενά· η εναλλακτική regex δεν μπορεί να δώσει αυτά τα όρια.

Από το Pro 2.37, η αποκοπή καταλήξεων χρησιμοποιεί ενσωματωμένο υποσύνολο Snowball 3.1.1. Δεν χρειάζεται επιπλέον πακέτο Composer και δεν κατεβάζει τίποτε κατά την εκτέλεση. Η PHP 8.2 εξακολουθεί να υποστηρίζεται.

ΜηχανήΠότεΓλώσσες
snowballΠροεπιλογή· οι υπάρχουσες ρυθμίσεις auto επιλέγουν την ίδια ενσωματωμένη μηχανήen, it, de, fr, es, pt, nl, ru, tr, el, pl, cs
builtinΡητό seo-pro.checklist.analysis.stemmer = builtinΜόνο Αγγλικά, με τον παλιότερο ελαφρύ κλιτικό stemmer· οι άλλες γλώσσες χρησιμοποιούν αντιστοίχιση ταυτότητας
identityΜη υποστηριζόμενη γλώσσα ή ρητή λειτουργία noneΟυκρανικά, Ιαπωνικά, Κινεζικά, Κορεατικά, Ταϊλανδικά και άλλες γλώσσες εκτός του ενσωματωμένου υποσυνόλου

Και οι δύο πλευρές μιας σύγκρισης χρησιμοποιούν την ίδια μηχανή. Η αποκοπή καταλήξεων είναι αλγόριθμος μείωσης επιθημάτων, όχι λεξικό συνωνύμων ή εγγύηση γλωσσικής ισοδυναμίας. Για παράδειγμα, ο ελληνικός αλγόριθμος μπορεί να αντιστοιχίσει τονισμένες και άτονες μορφές που η αντιστοίχιση ταυτότητας κρατά χωριστές. Τα όρια ολόκληρων token εξακολουθούν να εμποδίζουν το cat να ταιριάζει με το education.

Αναβάθμιση από Pro 2.36

Οι υπάρχουσες ρυθμίσεις auto χρησιμοποιούν πλέον σταθερά τους ενσωματωμένους αλγορίθμους, είτε είναι εγκατεστημένο το wamania/php-stemmer είτε όχι. Επανελέγξτε τις συντακτικές προτάσεις μετά την αναβάθμιση: οι ενημερωμένοι αλγόριθμοι μπορεί να αλλάξουν τις αντιστοιχίσεις, και τα Τουρκικά, Ελληνικά, Πολωνικά και Τσεχικά έχουν πλέον αποκοπή καταλήξεων. Οι πρόσθετοι αλγόριθμοι του προαιρετικού περιβλήματος για Καταλανικά, Δανικά, Φινλανδικά, Νορβηγικά, Ρουμανικά και Σουηδικά βρίσκονται εκτός αυτού του υποσυνόλου και πλέον χρησιμοποιούν αντιστοίχιση ταυτότητας.

Ορίστε SEO_PRO_CHECKLIST_STEMMER=builtin για την προηγούμενη εναλλακτική μόνο για Αγγλικά ή none για αντιστοίχιση ταυτότητας με ενοποίηση πεζών/κεφαλαίων σε κάθε γλώσσα. Αναδημιουργήστε την cache ρυθμίσεων μετά την αλλαγή. Αυτές οι επιλογές δεν αναπαράγουν τους παλιούς πολύγλωσσους αλγορίθμους του προαιρετικού περιβλήματος· για να κρατήσετε ακριβώς εκείνα τα αποτελέσματα χρειάζεται να διατηρήσετε την προηγούμενη έκδοση Pro. Δεν ξαναγράφονται αποθηκευμένα μεταδεδομένα SEO.

Ο ενσωματωμένος προσαρμογέας περνά 600.395 σταθερά επίσημα ζεύγη λεξιλογίου/εξόδου σε PHP 8.2, 8.3 και 8.4. Αυτό τεκμηριώνει συμμόρφωση αλγορίθμου, όχι συντακτική έγκριση από φυσικό ομιλητή. Τα hash πηγών, η προσαρμογή μόνο σύνταξης για PHP 8.2 και οι άδειες upstream περιλαμβάνονται στο πακέτο. Δείτε το THIRD-PARTY-NOTICES.md στη διανομή πηγαίου κώδικα.

Κατάτμηση λέξεων

Πλήθος λέξεων, πυκνότητα λέξεων-κλειδιών και στατιστικά αναγνωσιμότητας χρειάζονται λέξεις. Για γραφές με κενά, ένα regex χρησιμοποιεί σταθερά όρια token γραμμάτων/ψηφίων. Τα Κινεζικά, Ιαπωνικά και Ταϊλανδικά χρειάζονται λεξικογραφική κατάτμηση, οπότε ένα regex μπορεί να δει μια παράγραφο ως μία «λέξη». Όταν είναι φορτωμένο το ext-intl, ο tokenizer παραδίδει αυτά τα τμήματα στον βασισμένο σε λεξικό break iterator του ICU (IntlBreakIterator::createWordInstance), ο οποίος χωρίζει το 東京タワーは東京のランドマークです σε λέξεις. Αν το ICU λείπει, είναι ανενεργό ή δεν μπορεί να αρχικοποιηθεί, το Pro παραλείπει τους επηρεαζόμενους ελέγχους μήκους περιεχομένου, αναγνωσιμότητας και λέξεων-κλειδιών, με μήνυμα εγκατάστασης/ρύθμισης. Δεν μετατρέπει μια αναξιόπιστη καταμέτρηση σε αποτυχία. Άσχετοι έλεγχοι, όπως μήκος τίτλου και αντιστοίχιση γραφών με κενά, εξακολουθούν να εκτελούνται. Το seo-pro.checklist.analysis.segmenter = regex επιβάλλει την ίδια κατάσταση μη διαθεσιμότητας για κείμενο που χρειάζεται λεξικογραφική κατάτμηση.

Το τμήμα analysis περιλαμβάνει word_count_status (available ή unavailable) και segmentation_reason (null, missing_intl, disabled ή initialization_failed). Ο tokenizer χαμηλού επιπέδου διατηρεί εναλλακτικά token για συμβατότητα· εξετάστε αυτή την κατάσταση πριν τα ερμηνεύσετε ως λέξεις.

Η σάρωση αποδομένης σελίδας εκπέμπει μη βαθμολογούμενη ειδοποίηση word_segmentation_unavailable αντί για απόφαση ελλιπούς περιεχομένου. Ένα προηγουμένως επιβεβαιωμένο εύρημα ελλιπούς περιεχομένου παραμένει ανοιχτό μέχρι να μπορεί να ελεγχθεί ξανά. Αυτή η ελλιπής σάρωση δεν ανανεώνει τη βαθμολογία σελίδας: η υπάρχουσα βαθμολογία διατηρεί το αρχικό scored_at της, και η πρώτη σάρωση δεν έχει βαθμολογία μέχρι να λειτουργήσει η κατάτμηση. Εγκαταστήστε το ext-intl της PHP, ενεργοποιήστε τον segmenter auto και σαρώστε ξανά για να συνεχιστούν αυτοί οι έλεγχοι.

Ποιες μηχανές ανέλυσαν τη σελίδα

Κάθε λίστα ελέγχων έχει τμήμα analysis — την κυρίαρχη γραφή του κειμένου, τον tokenizer (intl / regex), τον stemmer (snowball / builtin / identity) και τη μέθοδο αναγνωσιμότητας (formula / heuristic / lix) — στο toArray() / --json, ως γραμμή υποσέλιδου στο modal Filament και ως τελευταία γραμμή του seo-pro:checklist:

Analysis: locale ja · script cjk · tokenizer intl (ICU dictionary) · stemmer identity · readability heuristic

Το υποσέλιδο προσδιορίζει τη μηχανή που χρησιμοποιήθηκε πραγματικά, περιλαμβάνοντας κατάτμηση regex όταν απουσιάζει το ext-intl και αντιστοίχιση ταυτότητας όταν είναι ανενεργή η αποκοπή καταλήξεων.

Η πυκνότητα λέξεων-κλειδιών είναι συμβουλευτική

Η λίστα δεν ορίζει ιδανική πυκνότητα λέξεων-κλειδιών για κατάταξη. Αυτός ο έλεγχος είναι συμβουλευτικός: εμφανίζει το πλήθος για ενημέρωση, δεν αποτυγχάνει ποτέ και δεν καθορίζει ποτέ τη συνολική κατάσταση της σελίδας. Εξετάστε αν η επανάληψη διαβάζεται φυσικά, αντί να στοχεύετε σε ποσοστό.

Η αναγνωσιμότητα είναι συμβουλευτική

Η λίστα εκτιμά την αναγνωσιμότητα με τη μέθοδο που επιλέγεται για τη γλώσσα ανάλυσης. Οι τύποι και οι εναλλακτικές που υλοποιούνται τώρα είναι:

ΓλώσσαΤύποςΠηγή
Αγγλικά (en)Flesch Reading EaseFlesch 1948
Ιταλικά (it)Gulpease IndexLucisano & Piemontese 1988
Ισπανικά (es)Fernández-HuertaFernández Huerta 1959
Γαλλικά (fr)Kandel-MolesKandel & Moles 1958
Γερμανικά (de)erste Wiener SachtextformelBamberger & Vanecek 1984
Πορτογαλικά (pt, pt_BR)Flesch προσαρμοσμένος στα Πορτογαλικά ΒραζιλίαςMartins et al. 1996
Ολλανδικά (nl)Flesch-DoumaDouma 1960
Ρωσικά (ru)Προσαρμογή Flesch της ObornevaОборнева 2006
Τουρκικά (tr)AteşmanAteşman 1997
Πολωνικά (pl)Pisarek (κανονικοποιημένος δείκτης ετών εκπαίδευσης)Pisarek 1969
Ιαπωνικά, Κινεζικά, Κορεατικά (ja, zh, ko)Ευρετική, χωρίς βαθμολογία — δείτε παρακάτω
Ελληνικά, Ουκρανικά, Τσεχικά (el, uk, cs)LIX — εναλλακτική επειδή δεν υλοποιείται ειδικός τύπος εδώ· δεν έχει βαθμονομηθεί για αυτές τις γλώσσεςBjörnsson 1968
Οτιδήποτε άλλοLIX (Läsbarhetsindex) — μη βαθμονομημένη εναλλακτικήBjörnsson 1968

Η εμφανιζόμενη βαθμολογία 0–100 (υψηλότερη = ευκολότερο) είναι σύμβαση του πακέτου. Τα αποτελέσματα της οικογένειας Flesch και του Gulpease περιορίζονται στα όρια· η βαθμίδα Wiener και οι δείκτες Pisarek και LIX αντιστοιχίζονται σε αυτή την κλίμακα. Ίσες βαθμολογίες σε διαφορετικές γλώσσες δεν σημαίνουν ίση δυσκολία ανάγνωσης. Οι τύποι συντελεστών προέρχονται από δημοσιευμένες εργασίες· οι εκτιμήσεις token, προτάσεων και συλλαβών του Rankbeam δεν έχουν επικυρωθεί ως ολοκληρωμένο εργαλείο μέτρησης. Δεν προβλέπουν κατανόηση ή κατάταξη αναζήτησης.

Από το Pro 2.37.1, οι τουρκικές και ρωσικές συλλαβές μετρούν χωριστά τα γειτονικά φωνήεντα (saat: 2· поэт: 2). Οι άλλοι εκτιμητές συλλαβών εξακολουθούν να έχουν περιορισμούς: οι ομάδες φωνηέντων χάνουν ορισμένες χασμωδίες και σιωπηλά φωνήεντα. Τα Αγγλικά έχουν μικρό πίνακα εξαιρέσεων· δεν είναι λεξικό προφοράς. Για παράδειγμα, το ισπανικό país και το γαλλικό monde μπορεί να καταμετρηθούν λάθος. Ελέγξτε χειροκίνητα άγνωστες λέξεις και κύρια ονόματα.

Στατιστικά κειμένου και όρια API

Οι ετικέτες HTML block και τα στοιχεία br χωρίζουν το κείμενο· η ενσωματωμένη έμφαση παραμένει συνδεδεμένη με τη λέξη της. Οι αλλαγές γραμμής στον πηγαίο κώδικα συνηθισμένου HTML συμπτύσσονται σε κενά, ενώ το απλό κείμενο και το pre διατηρούν τα όρια γραμμών. Τα περιεχόμενα script, style και noscript εξαιρούνται. Η εξαγωγή δεν αξιολογεί την ορατότητα CSS ούτε την αποδομένη σελίδα. Οι οντότητες αποκωδικοποιούνται μία φορά. Για τα στατιστικά τύπων, ακολουθίες γραμμάτων/αριθμών είναι λέξεις· η στίξη μόνη της δεν είναι. Παύλες και απόστροφοι χωρίζουν λέξεις. Τα ψηφία μετρούν ως token αλλά δεν έχουν εκτιμώμενες συλλαβές. Τα γράμματα μετρώνται από το αρχικό κείμενο, χωρίς η αποκοπή καταλήξεων ή η γερμανική ενοποίηση πεζών/κεφαλαίων ßss να αλλάζει το μήκος τους.

Οι εκτιμήσεις προτάσεων χωρίζουν στα τερματικά . ! ? 。 ! ? και στα όρια block/γραμμής, περιλαμβάνουν τελικό τμήμα χωρίς τερματική στίξη και προστατεύουν δεκαδικούς και μικρή λίστα συνηθισμένων συντομογραφιών (Dr., Prof., e.g. και παρόμοιες αγγλικές μορφές). Επομένως, επικεφαλίδες και στοιχεία λίστας μπορεί να μετρούν ως προτάσεις. Άλλες συντομογραφίες, παραθέματα, αριθμοί, μεικτές γραφές και κείμενο με λίγη στίξη χρειάζονται ιδιαίτερη προσοχή. Η επιλεγμένη γλώσσα καθορίζει τη μέθοδο· δεν εντοπίζει αν κάθε πρόταση είναι σε αυτή τη γλώσσα.

Το toArray() του άμεσου υπολογιστή προσθέτει τμήμα assessment:

json
{
  "status": "computed",
  "method": "formula",
  "formula": "flesch_reading_ease",
  "inputs_estimated": true,
  "score_scale": "normalized_0_100",
  "grade_level_estimated": true
}

Το method διακρίνει formula, lix, heuristic και unavailable (unspecified για χειροκίνητα κατασκευασμένα αποτελέσματα χωρίς μεταδεδομένα τύπου). Κενή είσοδος ή είσοδος μόνο με στίξη είναι insufficient και το isValid() είναι false· το παλαιό score: 0 της είναι τιμή σήμανσης μη διαθεσιμότητας, όχι βαθμολογία δυσκολίας. Οι υπάρχουσες ετικέτες σχολικών βαθμίδων για Αγγλικά/Ιταλικά είναι κατά προσέγγιση· οι άλλες γλώσσες και τα αποτελέσματα ευρετικής/LIX δεν λαμβάνουν πλέον αυτές τις ετικέτες. Το calculateFleschKincaid() διατηρεί το δημόσιο όνομα της μεθόδου για συμβατότητα, αλλά υπολογίζει Flesch Reading Ease, όχι βαθμίδα Flesch-Kincaid.

Οι δοκιμές τύπων δεσμεύουν ανεξάρτητα καταμετρημένες εισόδους και την αναμενόμενη αριθμητική και για τους δέκα κατονομασμένους τύπους και το LIX. Επαληθεύουν τη συμπεριφορά υπολογισμού, όχι συντακτική ποιότητα φυσικού ομιλητή. Η αναγνωσιμότητα παραμένει ανεξάρτητη από τη βαθμολογία SEO Pro.

Ιαπωνικά, Κινεζικά και Κορεατικά: δηλωμένη ευρετική, ποτέ αριθμός

Το Rankbeam υλοποιεί μη βαθμολογούμενη μέθοδο για αυτές τις γλώσσες. Ο υπολογιστής επιστρέφει επίπεδο από εμπειρικούς κανόνες του πακέτου — μέσο μήκος πρότασης σε χαρακτήρες (ja ≤ 40/60/80, zh ≤ 30/45/60) ή λέξεις (ko ≤ 12/18/25) και, για Ιαπωνικά, ποσοστό kanji (πάνω από περίπου 45 % ανεβάζει κατά ένα επίπεδο τις ζώνες δυσκολίας του πακέτου) — με σήμανση heuristic: true και βαθμολογία null. Το μήνυμα της λίστας αναφέρει την ευρετική, και ο έλεγχος παραμένει συμβουλευτικός για αυτές τις γλώσσες ανεξάρτητα από το readability.advisory: ένας εμπειρικός κανόνας ενημερώνει, δεν καθορίζει ποτέ τη συνολική κατάσταση της λίστας. Τα πλήθη λέξεων της λίστας για ja/zh απαιτούν λειτουργική κατάτμηση ICU· αυτοί οι έλεγχοι παραλείπονται όταν δεν είναι διαθέσιμη.

Όπως η πυκνότητα λέξεων-κλειδιών, η αναγνωσιμότητα είναι συμβουλευτική από προεπιλογή: ενημερώνει τον συντάκτη αλλά δεν καθορίζει τη συνολική κατάσταση σελίδας — ο ίδιος διαχωρισμός που κάνει το Yoast μεταξύ αναλύσεων αναγνωσιμότητας και SEO. Παραλείπεται κάτω από ελάχιστο πλήθος λέξεων (οι σελίδες με ελλιπές περιεχόμενο είναι δουλειά του content_length, όχι της αναγνωσιμότητας). Κάντε τον έλεγχο καθοριστικό αν θέλετε μια δυσανάγνωστη σελίδα να αποτυγχάνει:

php
// config/seo-pro.php → 'checklist'
'readability' => [
    'min_words' => 50,     // below this → skipped (too little copy to judge)
    'advisory'  => true,   // false → a 'difficult' page fails the checklist
],

Ανάγνωση της λίστας ελέγχων

Headless

Το Pro 2.36 διαβάζει επιλυμένα μεταδεδομένα, getContentForSEO() και λέξεις-κλειδιά εστίασης στη ζητούμενη γλώσσα περιεχομένου, ενώ οι ετικέτες της λίστας παραμένουν στη γλώσσα χειριστή. Χωρίς ρητή γλώσσα, τηρείται η προεπιλογή seoData() του μοντέλου μετάφρασης. Η ενέργεια Filament ακολουθεί την καρτέλα γλώσσας του πεδίου της ή τον επιλογέα γλώσσας της σελίδας.

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

$checklist = SeoPro::checklistFor($post);          // or ($post, 'it') for a locale

$checklist->status();        // 'pass' | 'warn' | 'fail' (advisory + skips ignored)
$checklist->summary();       // ['passed' => 6, 'warnings' => 2, 'failures' => 1, 'skipped' => 0]
$checklist->failures();      // CheckResult[]
$checklist->recommendations(); // failures first, then warnings
$checklist->toArray();       // JSON-ready payload (no score key)

Κάθε CheckResult περιέχει id, group, label, status, message, προαιρετικό recommendation και σημαία advisory.

Εντολή

bash
php artisan seo-pro:checklist "App\Models\Post" 42
php artisan seo-pro:checklist "App\Models\Post" 42 --json     # machine-readable
php artisan seo-pro:checklist "App\Models\Post" 42 --strict   # non-zero exit on any failure (CI)
php artisan seo-pro:checklist "App\Models\Post" 42 --locale=it

Στον επεξεργαστή (Filament, προαιρετικά)

Με εγκατεστημένο το rankbeam/laravel-seo-filament, εμφανίζεται ενέργεια Λίστα ελέγχου on-page στο πεδίο λέξης-κλειδιού εστίασης. Το κλικ ανοίγει modal με τους ίδιους ελέγχους επιτυχίας/προειδοποίησης/αποτυχίας για το αποθηκευμένο περιεχόμενο της εγγραφής. Το πακέτο Filament δεν εξαρτάται ποτέ από το Pro — η ενέργεια συνδέεται μέσω του ίδιου μονόδρομου hook επέκτασης που χρησιμοποιούν οι προτάσεις AI, οπότε οι headless εγκαταστάσεις δεν επηρεάζονται.

Ρυθμίσεις

php
// config/seo-pro.php → 'checklist'
'checklist' => [
    'enabled' => true,             // shows the Filament action; headless API always works

    'content' => [
        'min_words' => 200,        // below this → fail (too thin)
        'good_words' => 600,       // below this → warn; at/above → pass
    ],

    'internal_links' => [
        'min' => 2,                // internal links needed to pass
    ],

    'readability' => [
        'min_words' => 50,         // below this → skipped
        'advisory' => true,        // false → a hard-to-read page fails the checklist
    ],

    // The check registry. Each entry implements
    // Rankbeam\Seo\Pro\OnPage\Rules\Check and is resolved from the container
    // (custom checks get the Stemmer/StopWords toolkit injected). Remove a
    // line to drop a check, reorder to reorder, or append your own.
    'rules' => [
        \Rankbeam\Seo\Pro\OnPage\Rules\Keyword\KeywordInTitleCheck::class,
        // …
    ],
],

Σύνταξη προσαρμοσμένου ελέγχου

php
use Rankbeam\Seo\Pro\OnPage\ChecklistContext;
use Rankbeam\Seo\Pro\OnPage\CheckResult;
use Rankbeam\Seo\Pro\OnPage\Rules\AbstractCheck;

class KeywordInSubheadingCheck extends AbstractCheck
{
    public function id(): string { return 'keyword_in_subheading'; }
    public function group(): string { return 'keyword'; }
    public function label(): string { return 'Focus keyword in a subheading'; }

    public function run(ChecklistContext $context): CheckResult
    {
        $keyword = $context->primaryKeyword();

        if ($keyword === null) {
            return $this->skipNoKeyword();
        }

        return str_contains($context->htmlContent, '<h2')
            ? $this->pass('Found a subheading.')
            : $this->warn('No subheading found.', 'Add an H2 that includes the keyword.');
    }
}

Καταχωρίστε τον προσθέτοντας την κλάση του στο seo-pro.checklist.rules. Ένας έλεγχος δεν πρέπει να επαναχρησιμοποιεί αναγνωριστικό κωδικού προβλήματος σάρωσης — η λίστα είναι ξεχωριστό namespace χωρίς βαθμολόγηση.

Πώς διαβάζεται το περιεχόμενο

Το SeoPro::checklistFor($model) αναλύει:

  • Τίτλο / περιγραφή — τις επιλυμένες (τελικές) τιμές, τις ίδιες που μετρούν οι μετρητές του επεξεργαστή και η σάρωση, ώστε η λίστα να μην τις αντικρούει ποτέ.
  • Περιεχόμενο$model->getContentForSEO() (ο accessor HasSEO του core· προεπιλογές content / body / text). Παρακάμψτε τον στο μοντέλο σας για να δείχνει στο πραγματικό κύριο κείμενο.
  • URL$model->getUrlForSEO().
  • Λέξεις-κλειδιά εστίασης — το αποθηκευμένο seo_meta.focus_keywords.

Είναι καθαρή ανάλυση: δεν ανακτάται καμία σελίδα και δεν γράφεται τίποτε.

Το rankbeam/laravel-seo διανέμεται με άδεια MIT.