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

Πολύγλωσσο περιεχόμενο

Οι Μεταφράσεις κάνουν το πακέτο να μιλά τη γλώσσα σας. Αυτή η σελίδα αφορά το άλλο μισό: να κατανοεί το πακέτο τη γλώσσα του περιεχομένου σας. Ένα όριο τίτλου 60 χαρακτήρων είναι λάθος για τα ιαπωνικά, μια περικοπή στα όρια λέξεων χαλάει τα ταϊλανδικά, τα İstanbul και istanbul είναι η ίδια λέξη στα τουρκικά, ένα hreflang it_IT είναι μη έγκυρο και ένας κορεατικός ιστότοπος ενδιαφέρεται για τον ανιχνευτή του Naver, όχι μόνο του Google. Τίποτα από αυτά δεν είναι μετάφραση — αφορά την ορθότητα και καθορίζεται στον πυρήνα ώστε όλες οι επιφάνειες να συμφωνούν.

Οι προεπιλογές και οι παρακάμψεις πολιτικής βρίσκονται στο config/seo.php. Κάποιες δυνατότητες απαιτούν εξαρτήσεις κατά την εκτέλεση, όπως κατάτμηση λέξεων ICU και εγκατεστημένες γραμματοσειρές· το μεταφρασμένο περιεχόμενο πρέπει να προέρχεται από την εφαρμογή σας.

Locale περιεχομένου και locale διεπαφής

Ο πυρήνας 3.17, το Filament 1.11 και το Pro 2.36 μεταφέρουν το επιλεγμένο locale περιεχομένου στα μεταδεδομένα, τα υπολογιζόμενα hooks, τις URL προεπισκόπησης, τις λέξεις-κλειδιά λίστας ελέγχου και τα αιτήματα AI. Ένα αγγλικό περιβάλλον διαχείρισης μπορεί να επεξεργάζεται ιταλικά και ιαπωνικά χωρίς να αλλάζουν οι ετικέτες του.

php
$italian = $post->seoData('it');
$japanese = $post->seoData('ja');

Αυτές οι αναγνώσεις επιλέγουν την εγγραφή μεταδεδομένων του συγκεκριμένου locale και εκτελούν hooks μοντέλου όπως getSEOTitle(), getSEODescription(), getUrlForSEO() και getSEOSchema() σε προσωρινό πεδίο εφαρμογής locale. Το μοντέλο του καλούντος και το locale της εφαρμογής διατηρούνται, ακόμη κι όταν ένα hook προκαλεί εξαίρεση. Τα μοντέλα που υλοποιούν τα setLocale() και getTranslatableAttributes() του Spatie λαμβάνουν επίσης απομονωμένο locale στιγμιοτύπου. Τα hooks σας εξακολουθούν να πρέπει να επιστρέφουν μεταφρασμένο περιεχόμενο· το Rankbeam δεν μεταφράζει αυτόματα συνηθισμένα γνωρίσματα της βάσης δεδομένων.

Το Pro δέχεται ρητό locale: στις μεθόδους AI που βασίζονται σε μοντέλα και στη μαζική συμπλήρωση. Χωρίς αυτό, η παρακαμφθείσα προεπιλογή seoData() ενός μοντέλου μετάφρασης καθορίζει το locale περιεχομένου του, με εναλλακτική το locale της εφαρμογής. Οι ενέργειες Filament λαμβάνουν το locale του δικού τους πεδίου, ακόμη και σε επεξεργαστή μίας γλώσσας και σε λειτουργία ακολούθησης. Σε προσαρμοσμένη εργασία ουράς, σειριοποιήστε το επιλεγμένο locale και περάστε το ρητά όταν εκτελεστεί η εργασία. Μη βασίζεστε στο τρέχον locale του worker.

Για προσαρμοσμένους σύγχρονους αναγνώστες περιεχομένου, το ModelLocale::run($model, $locale, $callback) περνά απομονωμένο μοντέλο στο callback και επαναφέρει το locale της εφαρμογής στο finally. Ολοκληρώστε όλες τις αναγνώσεις που εξαρτώνται από το locale μέσα στο callback· η επιστροφή ενός lazy iterator ή closure δεν επεκτείνει το πεδίο εφαρμογής.

Όρια τίτλων και περιγραφών ανά σύστημα γραφής

Το Rankbeam χρησιμοποιεί συντακτικά όρια 60/160 γραφημάτων για λατινικούς τίτλους/περιγραφές και 30/80 για CJK. Είναι παραμετροποιήσιμες προσεγγίσεις, όχι μετρήσεις pixels ή εγγυήσεις ότι μια μηχανή αναζήτησης θα εμφανίσει ολόκληρη την τιμή. Το Google δεν ορίζει σταθερό όριο χαρακτήρων για συνδέσμους τίτλου ή μετα-περιγραφές· το εμφανιζόμενο κείμενο μπορεί να περικοπεί ανάλογα με το πλάτος της συσκευής.

Το Rankbeam\Seo\I18n\LengthPolicy αποφασίζει το όριο για το κείμενο που εξετάζει:

php
use Rankbeam\Seo\I18n\LengthPolicy;

$policy = LengthPolicy::for($title, $locale);   // detects the dominant script
$policy->script;          // 'cjk'
$policy->titleMax;        // 30
$policy->descriptionMax;  // 80
$policy->length($title);  // user-perceived characters (graphemes)
$policy->titleTooLong($title);

Αυτό διαβάζουν οι προειδοποιήσεις επεξεργαστή (SEOWarningEvaluator), το δωρεάν seo:audit, η περικοπή υπολογιζόμενης περιγραφής, η σάρωση Pro και οι μετρητές Filament, ώστε να χρησιμοποιούν την ίδια πολιτική. Οι προειδοποιήσεις αξιολογούν επιλυμένες τιμές, μαζί με το επίθημα τίτλου, ενώ ένας επεξεργαστής μπορεί επίσης να εμφανίζει μη αποθηκευμένο κείμενο. Τα μήκη μετρούν συμπλέγματα γραφημάτων, όχι bytes ή σημεία κώδικα. Τα όρια συμπλεγμάτων ακολουθούν την εγκατεστημένη υλοποίηση Unicode· δεν είναι μετρητής συλλαβών ούτε μέτρηση pixels αποτελεσμάτων αναζήτησης.

Οι εγγραφές βρίσκονται στο seo.length_policy, με κλειδί την ομάδα συστήματος γραφής (latin, cyrillic, greek, cjk, thai, arabic, hebrew, devanagari), με default για κάθε ομάδα που δεν απαριθμείται. Μια εγγραφή μπορεί να ορίζει μόνο κάποια κλειδιά και να κληρονομεί τα υπόλοιπα:

php
'length_policy' => [
    'default' => ['title_min' => 30, 'title_max' => 60, 'description_min' => 70, 'description_max' => 160],
    'cjk'     => ['title_min' => 15, 'title_max' => 30, 'description_min' => 35, 'description_max' => 80],
    'thai'    => ['title_max' => 55],   // everything else from `default`
],

Μόνο το cjk διαφέρει από προεπιλογή. Μια αναβαθμισμένη εγκατάσταση με παλαιότερες δημοσιευμένες ρυθμίσεις λαμβάνει την ενσωματωμένη εγγραφή cjk χωρίς καμία αλλαγή.

Μικτοί τίτλοι

Η ανίχνευση είναι σταθμισμένη καταμέτρηση γραμμάτων: ένας γλύφος CJK μετρά διπλά, οπότε το "Laravel SEO の完全ガイド" επιλύεται ως CJK ενώ το "Laravel SEO for the 東京 developer" παραμένει λατινικό. Μια τιμή χωρίς καθόλου γράμματα (έτος, τιμή) παίρνει το σύστημα γραφής του locale της σελίδας.

Οι σταθερές SEOWarningEvaluator::TITLE_MAX_LENGTH / DESCRIPTION_MAX_LENGTH εξακολουθούν να υπάρχουν ως λατινικές προεπιλογές, για κώδικα που τις διαβάζει.

Περικοπή με ασφάλεια γραφημάτων και επίγνωση συστήματος γραφής

Μια υπολογιζόμενη περιγραφή (seo.computed.description_max_length, λατινικό όριο) κλιμακώνεται βάσει της πολιτικής — μια περιγραφή CJK παίρνει το μισό — και περικόπτεται από το Rankbeam\Seo\I18n\Truncator:

  • το κείμενο με κενά ανάμεσα στις λέξεις διατηρεί τον ιστορικό κανόνα: το τελευταίο όριο λέξης εντός του ορίου (αν βρίσκεται τουλάχιστον στο 60 % του ορίου), χωρίς αποσιωπητικά, με αφαίρεση της τελικής στίξης — ταυτόσημο byte προς byte με πριν για λατινικό κείμενο·
  • τα Han, Kana και ταϊλανδικά δεν έχουν κενά λέξεων, οπότε η περικοπή προτιμά το τελευταίο σημείο τέλους πρότασης ή μέρους πρότασης (。!?、,…) εντός του ορίου, έπειτα κενό αν υπάρχει στο κείμενο (κορεατικά), έπειτα άμεση περικοπή·
  • η αποκοπή γίνεται σε συμπλέγματα γραφημάτων, οπότε δεν μπορεί ποτέ να πέσει μέσα σε συνδυαστική ακολουθία — ένα ταϊλανδικό φωνηεντικό σημείο ή ένας τροποποιητής emoji δεν χωρίζεται ποτέ από τη βάση του.

Πεζά και κεφαλαία με επίγνωση locale

Το mb_strtolower() αγνοεί το locale. Το Rankbeam\Seo\I18n\CaseFolder δεν το αγνοεί:

php
use Rankbeam\Seo\I18n\CaseFolder;

CaseFolder::lower('İSTANBUL', 'tr');            // "istanbul" — dotted İ → i under Turkish rules
CaseFolder::equals('ΟΔΟΣ', 'οδος', 'el');       // true — final sigma folded
CaseFolder::equals('ΟΔΟΣ', 'οδός', 'el');       // false — the accent is preserved
CaseFolder::equals('Straße', 'STRASSE', 'de');  // true — ß folded to ss
CaseFolder::containsWord('Notizie dalla Città', 'città'); // true — Unicode word boundaries

Το lower() είναι η μορφή εμφάνισης· τα fold(), equals(), contains() και containsWord() προορίζονται για συγκρίσεις. Ο πυρήνας το χρησιμοποιεί για την παράλειψη του επιθήματος τίτλου όταν υπάρχει ήδη η επωνυμία (seo.title_suffix_skip_when_contains), ώστε μια τουρκική επωνυμία να αντιστοιχίζεται και στις δύο μορφές i και μια τονισμένη επωνυμία να αναγνωρίζεται σε πραγματικό όριο λέξης· οι έλεγχοι λέξεων-κλειδιών Pro βασίζονται στον ίδιο helper.

Η κανονικοποίηση πεζών/κεφαλαίων διατηρεί τους τόνους. Δεν εξισώνει κάθε τονισμένη και άτονη γραφή. Ένας stemmer συγκεκριμένης γλώσσας μπορεί να εφαρμόζει δικές του απλοποιήσεις· αυτό είναι ξεχωριστό από το CaseFolder και την αντιστοίχιση ταυτότητας.

hreflang

Το Google διαβάζει language[-Script][-REGION] — γλώσσα δύο γραμμάτων ISO 639-1, προαιρετικό σύστημα γραφής ISO 15924 και προαιρετική περιοχή ISO 3166-1 alpha-2 — μαζί με το x-default. Αριθμητικές περιοχές όπως το es-419 είναι έγκυρες στο BCP47 αλλά εκτός των αποδεκτών τιμών hreflang του Google. Οι εφαρμογές Laravel συχνά δίνουν αντί γι' αυτό το locale τους (it_IT, pt_br) και η κάτω παύλα δεν είναι έγκυρη εκεί. Τρεις πολιτικές στο seo.hreflang εφαρμόζονται στη λίστα getSEOAlternates() ενός μοντέλου πριν γίνει ετικέτες <link rel="alternate">, εγγραφές χάρτη <xhtml:link>, σύνδεσμοι llms.txt και είσοδος ελέγχου. Όλα χρησιμοποιούν την ίδια πολιτική· το llms.txt παραλείπει την ίδια τη σελίδα και το x-default από τους συνδέσμους «Επίσης σε»:

php
'hreflang' => [
    'normalize'    => true,   // it_IT → it-IT, zh_hans_cn → zh-Hans-CN
    'include_self' => false,  // append the page itself when the list omits it
    'x_default'    => null,   // e.g. 'en': duplicate that language's alternate as x-default
],
  • Το normalize (ενεργό από προεπιλογή) προσαρμόζει διαχωριστικά, πεζά/κεφαλαία και καταχωρισμένα ψευδώνυμα (iw_ILhe-IL). Διατηρεί επαναλαμβανόμενα διαχωριστικά (en__USen--US) ώστε ο έλεγχος να τα επισημαίνει. Απενεργοποιήστε το για διατήρηση των παρεχόμενων bytes.
  • Το include_self προσθέτει το locale και την κανονική URL της ίδιας της σελίδας όταν ούτε η URL ούτε ο κωδικός της υπάρχουν στη λίστα. Το Google απαιτεί κάθε γλωσσική έκδοση να απαριθμεί τον εαυτό της· ενεργοποιήστε το όταν το hook σας επιστρέφει μόνο τις άλλες γλώσσες.
  • Το x_default ονομάζει τη γλώσσα της οποίας η εναλλακτική διεύθυνση αντιγράφεται ως x-default όταν η λίστα δεν έχει τέτοια εγγραφή.

Μια κενή λίστα παραμένει κενή — μια σελίδα χωρίς μεταφράσεις δεν αποκτά ούτε αναφορά στον εαυτό της ούτε x-default.

Ο δωρεάν έλεγχος προσθέτει τρεις ελέγχους στη λίστα μετά την εφαρμογή πολιτικής:

ΚωδικόςΣοβαρότηταΣημασία
hreflang_invalid_codeπροειδοποίησηΚωδικός εκτός των αποδεκτών τιμών του Google (en-UK, jp, english, es-419, fil).
hreflang_duplicate_codeειδοποίησηΟ ίδιος κωδικός εμφανίζεται δύο φορές.
hreflang_missing_selfπροειδοποίησηΗ URL της ίδιας της σελίδας δεν βρίσκεται στη λίστα της.

Η αμοιβαιότητα (παραπέμπει πίσω η άλλη σελίδα;) χρειάζεται ανίχνευση· αυτό είναι δουλειά της σάρωσης Pro — το προαιρετικό check_hreflang_reciprocity ανακτά κάθε εναλλακτική μέσω του SsrfGuard και παράγει hreflang_not_reciprocal όταν η άλλη σελίδα δεν δηλώνει την URL αυτής με τον κωδικό γλώσσας της (Pro 2.38+, δείτε τα ζητήματα σάρωσης). Ο helper είναι δημόσιος αν τον χρειάζεστε:

php
use Rankbeam\Seo\I18n\Hreflang;

Hreflang::fromLocale(app()->getLocale()); // 'it_IT' → 'it-IT'
Hreflang::isValid('pt-BR');               // true
Hreflang::isValid('en-UK');               // false

Τρία συμβόλαια κωδικών γλώσσας

Ο πυρήνας 3.18+ ξεχωρίζει τη ρύθμιση εφαρμογής από την τιμή που εξυπηρετείται στο HTML:

ΕίσοδοςΚανονικοποίηση εφαρμογήςΓλώσσα HTMLGoogle hreflang
pt_BRpt-BRΜη έγκυρη όπως εξυπηρετείταιΜη έγκυρη όπως εξυπηρετείται
de-CH-1901ΔιατηρείταιΈγκυρη καταχωρισμένη παραλλαγήΜη υποστηριζόμενη παραλλαγή
es-419ΔιατηρείταιΈγκυρη αριθμητική περιοχήΜη υποστηριζόμενη αριθμητική περιοχή
zh-Hant-TWΔιατηρείταιΈγκυρηΈγκυρη
filΔιατηρείταιΈγκυρη καταχωρισμένη γλώσσαΕκτός του συμβολαίου δύο γραμμάτων
iw_ILhe-ILΗ κάτω παύλα είναι μη έγκυρη· το iw-IL παραμένει έγκυρο παρωχημένο tagΧρησιμοποιήστε το κανονικοποιημένο he-IL
en__USen--USΜη έγκυρηΜη έγκυρη
x-defaultΔιατηρείταιΑπορρίπτεται από την πολιτική γλώσσας περιεχομένου του RankbeamΈγκυρος δείκτης εναλλακτικής προεπιλογής
php
use Rankbeam\Seo\I18n\LanguageTag;

LanguageTag::isValidHtml('de-CH-1901');    // true
LanguageTag::isValidHtml('en_US');        // false: inspect the served value
LanguageTag::isValidHtml('');             // true: HTML defines this as unknown
LanguageTag::isValid('x-default');        // true: generic BCP47 private use
LanguageTag::isValidHtml('x-default');    // false: Rankbeam content-language policy
Hreflang::isValid('es-419');              // false: Google compatibility
Hreflang::isValid(Hreflang::fromLocale('pt_BR')); // true: application boundary

Μετάβαση από τον πυρήνα 3.17 και παλαιότερους: τα Hreflang::isValid() και parse() επικυρώνουν αυστηρά τους εξυπηρετούμενους κωδικούς. Αν ο καλών παρέχει locale Laravel, καλέστε πρώτα το fromLocale(). Αν εξετάζει γνώρισμα HTML lang, χρησιμοποιήστε το LanguageTag::isValidHtml() χωρίς αφαίρεση περιφερειακών κενών ή κανονικοποίηση. Τα παρωχημένα καταχωρισμένα tags παραμένουν έγκυρα για HTML· η κανονικοποίηση εφαρμόζει μόνο ρητά προτιμώμενα ψευδώνυμα IANA και δεν μαντεύει ότι το en-UK σημαίνει en-GB. Οι κακοσχηματισμένες εγγραφές δεν φιλτράρονται πριν μπορέσει να τις αναφέρει ο έλεγχος.

Ο validator περιλαμβάνει στοιχεία από το μητρώο IANA με ημερομηνία 2026-08-08, με hashes πηγών και αναπαραγώγιμο generator. Ελέγχει δομή RFC 5646, καταχωρισμένα subtags, προθέματα extlang και διπλές παραλλαγές/επεκτάσεις. Υποστηρίζει ιστορικά εξαιρούμενα tags και περιοχές ιδιωτικής χρήσης. Οι συστάσεις προθεμάτων παραλλαγής δεν είναι υποχρεωτικοί κανόνες εγκυρότητας· ελέγχονται τα namespaces επεκτάσεων και η δομή, ενώ η σημασιολογία επιλογών CLDR και η σημασία ιδιωτικής χρήσης παραμένουν εκτός API. Δεν απαιτείται ICU ή λήψη κατά την εκτέλεση. Δείτε το RFC 5646 και τον ορισμό γλώσσας HTML.

Το Pro 2.38+ αναφέρει απόν ή κενό lang ως άγνωστο/ελλείπον, ενώ κακοσχηματισμένα εξυπηρετούμενα bytes παράγουν html_lang_invalid. Οι έλεγχοι ασυμφωνίας συστήματος γραφής χρησιμοποιούν πραγματικό subtag συστήματος γραφής ή την καταχωρισμένη προεπιλογή IANA· δεδομένα ιδιωτικής χρήσης/επεκτάσεων και άγνωστες γλώσσες δεν συνεπάγονται λατινικό σύστημα γραφής. Οι μη υποστηριζόμενες ομάδες γραφής μένουν χωρίς κρίση. Αυτοί οι έλεγχοι δεν είναι πλήρης ανιχνευτής γλώσσας.

Η αμοιβαιότητα χρησιμοποιεί τους έγκυρους κωδικούς αναφοράς της πηγαίας σελίδας στον εαυτό της ή την έγκυρη γλώσσα HTML της που είναι συμβατή με Google όταν αυτοί οι κωδικοί απουσιάζουν. Μια URL επιστροφής κάτω από άλλο κωδικό γλώσσας δεν περνά. Όταν δεν μπορεί να προσδιοριστεί ο κωδικός πηγής, το αποτέλεσμα παραμένει hreflang_target_unverified. Οι διπλές URL προορισμού ανακτώνται μία φορά εντός των υπαρχόντων ορίων εναλλακτικών/σώματος· οι προστασίες SSRF, η άρνηση ανακατευθύνσεων και ο χειρισμός αποτυχιών ως μη επαληθευμένων παραμένουν σε ισχύ.

inLanguage στον γράφο schema

Ο κόμβος WebPage λαμβάνει το inLanguage από το επιλυμένο locale της σελίδας (it_ITit-IT) και το ArticleSchema::fromModel() το παίρνει από το αποθηκευμένο locale του seo_meta. Ο κόμβος WebSite παίρνει τις γλώσσες του από τις ρυθμίσεις:

php
'schema' => [
    'in_language' => true,                       // off = no inLanguage anywhere
    'website' => ['inLanguage' => ['it', 'en']], // one code or a list
],

Περιφερειακές μηχανές αναζήτησης

Ο κατάλογος ανιχνευτών πίσω από το seo:robots-txt περιλαμβάνει πλέον τους κλασικούς ανιχνευτές αναζήτησης ιστού που έχουν σημασία πέρα από Google/Bing — Yandex, Baidu, Naver (Yeti), Seznam, Sogou, 360, Cốc Cốc και DuckDuckGo — με σκοπό search_engine και άδεια πρόσβασης από προεπιλογή. Συμμετέχουν στην πολιτική και στις παρακάμψεις ανά bot, ώστε ένα κατάστημα που δεν εξυπηρετεί την Κίνα να μπορεί να αποκλείσει δύο ανιχνευτές από τη χρήση του εύρους ζώνης του:

php
'ai_crawlers' => [
    'policy'    => ['search_engine' => 'allow', /* … */],
    'overrides' => ['baiduspider' => 'disallow', 'sogou' => 'disallow'],
],

Τα SEO::aiCrawlers()->all() και match() παραμένουν μόνο για AI (το αρχείο bots AI του Pro και κάθε πλήθος «N ανιχνευτές AI» παραμένουν αμετάβλητα)· ζητήστε τις μηχανές με searchEngines(), all(true) ή match($ua, true). Δείτε τον Έλεγχο ανιχνευτών AI.

Baidu

Η υποστήριξη ανιχνευτή και ετικέτας επαλήθευσης δεν εγγυάται ανακάλυψη, ευρετηρίαση ή κατάταξη στο Baidu.

Επαλήθευση ιστοτόπου

Τα tokens ιδιοκτησίας αποδίδονται ως μία μετα-ετικέτα ανά ρυθμισμένη μηχανή σε κάθε σελίδα (το Google δέχεται την ετικέτα παντού· Yandex, Baidu και Naver κοιτούν την αρχική σελίδα, που καλύπτεται). Δεν παράγεται τίποτα για κλειδί που αφήνετε κενό:

php
'verification' => [
    'google'    => env('SEO_VERIFY_GOOGLE'),    // google-site-verification
    'bing'      => env('SEO_VERIFY_BING'),      // msvalidate.01
    'yandex'    => env('SEO_VERIFY_YANDEX'),    // yandex-verification
    'baidu'     => env('SEO_VERIFY_BAIDU'),     // baidu-site-verification
    'naver'     => env('SEO_VERIFY_NAVER'),     // naver-site-verification
    'seznam'    => env('SEO_VERIFY_SEZNAM'),    // seznam-wmt
    'pinterest' => env('SEO_VERIFY_PINTEREST'), // p:domain_verify
    'facebook'  => env('SEO_VERIFY_FACEBOOK'),  // facebook-domain-verification
],

Μια τιμή μπορεί να είναι λίστα tokens (το Google εκδίδει ένα ανά κάτοχο ιδιοκτησίας).

Εικόνες OG σε κάθε σύστημα γραφής

Η παρεχόμενη γραμματοσειρά κάρτας καλύπτει λατινικά, κυριλλικά και ελληνικά. Κάθε άλλο σύστημα γραφής εξαρτάται από γραμματοσειρά εγκατεστημένη στο μηχάνημα που εκτελεί το seo:og-images — δεν παρέχεται τίποτα άλλο, επειδή μια γραμματοσειρά CJK είναι 16 MB+. Τα πρότυπα περιλαμβάνουν πλέον στοίβα εναλλακτικών γραμματοσειρών ανά σύστημα γραφής (seo.og_image.font_stack, με την οικογένεια Noto CJK της γλώσσας σελίδας πρώτη, ώστε οι χαρακτήρες Han να έχουν τις σωστές εθνικές μορφές γλυφών) και η εντολή προειδοποιεί, μία φορά ανά σύστημα γραφής, όταν το μηχάνημα δεν έχει γραμματοσειρά για έναν τίτλο που πρόκειται να αποδώσει:

No installed font covers cjk text — its cards may render as boxes. Install one: apt-get install fonts-noto-cjk

Σε Debian/Ubuntu: apt-get install fonts-noto-cjk fonts-noto-core fonts-noto-color-emoji. Λεπτομέρειες στις Παραγόμενες εικόνες OG.

llms.txt σε πολλές γλώσσες

Με ενεργό το seo.llms_txt.alternates, μια σελίδα που υπάρχει σε άλλες γλώσσες ολοκληρώνει το στοιχείο λίστας της με Also in: [it](…), [de](…) — τις εναλλακτικές μετά την εφαρμογή πολιτικής, χωρίς το x-default και την ίδια τη σελίδα. Ανενεργό από προεπιλογή.

Unicode URL

Το Rankbeam δεν δημιουργεί ποτέ slugs ούτε ξαναγράφει τις URL σας, οπότε μια διαδρομή όπως /città/ ή /検索 διατηρείται αμετάβλητη σε κάθε παραγόμενο αρχείο. Οι κανονικές URL με host IDN (https://münchen.example/) ή διαδρομή Unicode ή κωδικοποιημένη με ποσοστά γίνονται δεκτές από τον έλεγχο (το Rankbeam\Seo\I18n\Url::isValid() αντικαθιστά το αποκλειστικά ASCII FILTER_VALIDATE_URL της PHP). Κρατήστε μία μορφή ανά URL — ακατέργαστο Unicode ή κωδικοποίηση ποσοστών, όχι και τα δύο — ώστε οι εγγραφές canonical, hreflang και χάρτη να συγκρίνονται ίσες byte προς byte.

Ποιες γλώσσες υποστηρίζονται και τι σημαίνει αυτό

Τα πακέτα περιλαμβάνουν κείμενα και δρομολόγηση ανάλυσης για τα δεκαεπτά locale παρακάτω. Ο πίνακας περιγράφει τεχνική κάλυψη, όχι συντακτική έγκριση φυσικού ομιλητή ή εγγυημένη απόδοση σε μηχάνημα χωρίς ρύθμιση. Η ανάλυση λέξεων ιαπωνικών/κινεζικών απαιτεί λειτουργικό ICU· οι επηρεαζόμενοι έλεγχοι λέξεων παραλείπονται όταν δεν είναι διαθέσιμο. Η μη λατινική απόδοση απαιτεί κατάλληλες γραμματοσειρές. Η δρομολόγηση επαληθεύεται από δοκιμές και στα δύο αποθετήρια: το tests/Feature/I18n/SupportedLanguagesTest.php στον πυρήνα κατοχυρώνει τη λίστα locale, τους κωδικούς hreflang και τα όρια, ενώ το tests/Feature/OnPage/LanguageSupportMatrixTest.php στο Pro κατοχυρώνει τις μηχανές ανάλυσης, ώστε μια γραμμή που παύει να ισχύει να αποτυγχάνει στο CI.

ΓλώσσαLocaleΤίτλος / περιγραφήΚαταμέτρηση λέξεωνΑντιστοίχιση λέξεων-κλειδιώνΑναγνωσιμότητα
Αγγλικάen60 / 160κενάSnowballFlesch Reading Ease
Ιταλικάit60 / 160κενάSnowballGulpease
Γερμανικάde60 / 160κενάSnowballWiener Sachtextformel
Γαλλικάfr60 / 160κενάSnowballKandel-Moles
Ισπανικάes60 / 160κενάSnowballFernández-Huerta
Πορτογαλικά (Βραζιλίας)pt_BR60 / 160κενάSnowballMartins
Ολλανδικάnl60 / 160κενάSnowballFlesch-Douma
Τουρκικάtr60 / 160κενάSnowballAteşman
Ρωσικάru60 / 160κενάSnowballOborneva
Πολωνικάpl60 / 160κενάSnowballPisarek
Ιαπωνικάja30 / 80λεξικό ICUακριβής, με κανονικοποίηση πεζών/κεφαλαίωνευρετική, χωρίς βαθμολογία
Κινεζικά (απλοποιημένα)zh_CN30 / 80λεξικό ICUακριβής, με κανονικοποίηση πεζών/κεφαλαίωνευρετική, χωρίς βαθμολογία
Κινεζικά (παραδοσιακά)zh_TW30 / 80λεξικό ICUακριβής, με κανονικοποίηση πεζών/κεφαλαίωνευρετική, χωρίς βαθμολογία
Κορεατικάko30 / 80κενάακριβής, με κανονικοποίηση πεζών/κεφαλαίωνευρετική, χωρίς βαθμολογία
Ελληνικάel60 / 160κενάSnowballLIX
Ουκρανικάuk60 / 160κενάακριβής, με κανονικοποίηση πεζών/κεφαλαίωνLIX
Τσεχικάcs60 / 160κενάSnowballLIX

Τρία σημεία που ο πίνακας δηλώνει σκόπιμα με ειλικρίνεια:

  • Το Snowball περιλαμβάνεται από το Pro 2.37. Δώδεκα γλώσσες χρησιμοποιούν τους δεσμευμένους στην έκδοση 3.1.1 αλγόριθμους ανεξάρτητα από προαιρετικά πακέτα. Τα ουκρανικά και το CJK χρησιμοποιούν αντιστοίχιση ταυτότητας· το πακέτο δεν επινοεί κανόνες καταλήξεων για αυτά. Η αντιστοίχιση ταυτότητας μπορεί να χάσει κλιτές μορφές, ενώ το stemming μπορεί να συγχέει διαφορετικές λέξεις. Δείτε τους ελέγχους μηχανών και τις σημειώσεις μετάβασης.
  • Τα «ευρετική, χωρίς βαθμολογία» και «LIX» δεν είναι το ίδιο. Τα ιαπωνικά, κινεζικά και κορεατικά χρησιμοποιούν μέθοδο χωρίς βαθμολόγηση σε αυτό το πακέτο: η λίστα ελέγχου αναφέρει επίπεδο από το μήκος προτάσεων και το ποσοστό kanji με βαθμολογία null και παραμένει συμβουλευτική ανεξάρτητα από τις ρυθμίσεις σας. Τα ελληνικά, ουκρανικά και τσεχικά χρησιμοποιούν LIX επειδή δεν έχει υλοποιηθεί εδώ ειδικός τύπος. Το LIX δεν χρειάζεται συλλαβές, αλλά τα κατώφλιά του δεν έχουν βαθμονομηθεί για κάθε γλώσσα. Όλες οι είσοδοι τύπων περιλαμβάνουν εκτιμήσεις· δείτε το συμβόλαιο στατιστικών.
  • Οι μεταφράσεις είναι πρώτες αποδόσεις, εκτός αν το TRANSLATING.md αναφέρει ότι ελέγχθηκαν από φυσικό ομιλητή. Τα ιταλικά έχουν ελεγχθεί· οι υπόλοιπες χρειάζονται ελεγκτή και ο έλεγχος μίας είναι ο πιο οικονομικός τρόπος να αναγνωριστεί η συνεισφορά σας για τη γλώσσα στο πακέτο.

Τα locale που δεν απαριθμούνται μπορούν να χρησιμοποιούν αγγλικά κείμενα, όρια συστήματος γραφής/προεπιλογής, αντιστοίχιση ταυτότητας λέξεων-κλειδιών και αναγνωσιμότητα LIX ή ευρετική. Αυτή η εναλλακτική δεν αποτελεί επικυρωμένη γλωσσική υποστήριξη. Το μπλοκ analysis της λίστας ελέγχου προσδιορίζει το σύστημα γραφής, τον segmenter, τον stemmer και τη μέθοδο αναγνωσιμότητας· εξετάστε τη διαθεσιμότητά του και τις παραλειφθείσες κρίσεις μαζί με τις ετικέτες.

Πρόσβαση στις μηχανές αναζήτησης που έχουν τοπική σημασία

Η διάθεση μιας γλώσσας δεν αφορά μόνο το κείμενο. Ο κατάλογος ανιχνευτών περιλαμβάνει Yandex, Baidu, Yeti του Naver, Seznam, Sogou, 360 και Cốc Cốc μαζί με Google και Bing, και το seo.verification αποδίδει τις ετικέτες επαλήθευσης ιστοτόπου τους — Naver για κορεατικό ιστότοπο, Seznam για τσεχικό, Yandex για ουκρανικό ή ρωσικό. Δείτε τις Περιφερειακές μηχανές αναζήτησης και την Επαλήθευση ιστοτόπου.

Τι προσθέτουν τα άλλα πακέτα

  • Το laravel-seo-filament διαβάζει την ίδια πολιτική μήκους για τους ζωντανούς μετρητές και την προεπισκόπηση SERP και (1.9) επεξεργάζεται μία εγγραφή seo_meta ανά γλώσσα — μία καρτέλα ανά locale με δικούς της μετρητές, προεπισκόπηση και ενδείξεις εναλλακτικής προέλευσης ή ακολουθώντας τον επιλογέα locale ενός πρόσθετου μεταφράσεων.
  • Το laravel-seo-pro τη διαβάζει για τους ελέγχους title_length / description_length της σάρωσης και τα prompts βοήθειας AI και (2.34) αναλύει τη σελίδα στη δική της γλώσσα: κατάτμηση λέξεων ICU για κινεζικά, ιαπωνικά και ταϊλανδικά, stemming Snowball, αντιστοίχιση λέξεων-κλειδιών με επίγνωση locale μέσω αυτού του CaseFolder, δημοσιευμένους τύπους αναγνωσιμότητας με εκτιμώμενες εισόδους για δέκα γλώσσες, δηλωμένες ευρετικές για CJK και LIX (ρητά δηλωμένο) για ελληνικά, ουκρανικά και τσεχικά, stop words για δεκαέξι γλώσσες, ελέγχους σάρωσης html lang και αμοιβαιότητας hreflang, prompts AI που ονομάζουν τη γλώσσα της σελίδας και αναφορά αποδιδόμενη με Chrome για συστήματα γραφής που δεν μπορεί να σχεδιάσει το dompdf. Δείτε τη λίστα ελέγχου σελίδας, τα ζητήματα σάρωσης, τη βοήθεια AI και τις αναφορές.

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