Přejít na obsah

Pořadí přednosti resolveru

Každou výslednou SEO hodnotu — titulek, popis, kanonickou adresu, robots i obrázky — vytváří SEOResolver sloučením šesti vrstev. Vyšší vrstvy mají přednost a null nikdy nepřepisuje hodnotu nižší vrstvy, takže stránka vykresluje smysluplný výsledek.

Šest vrstev

Od nejnižší, vždy přítomné, po nejvyšší, která má vždy přednost:

#VrstvaZdrojTypické použití
1Konfigurace webuconfig/seo.php (site_name, title_suffix, default_og_image, default_robots, …)Výchozí hodnoty celé značky
2Globální výchozí hodnoty z DBŘádky seo_defaults bez typu modeluÚpravy výchozích hodnot celého webu bez nasazení
3Výchozí hodnoty typu modeluŘádky seo_defaults pro konkrétní třídu modelu„Všechny produkty dostanou tento obrázek OG“
4Výchozí hodnoty routyŘádky seo_defaults pro název routyStatické stránky (home, contact) bez modelu
5Vypočtené hodnotyOdvozené z vlastních atributů modeluNáhradní titulek z title, popis z excerpt/body, …
6Explicitní hodnotyŘádek seo_meta modelu (saveSEO())Ručně nastavené hodnoty redaktorů
php
use Rankbeam\Seo\Facades\SEO;

$seo = SEO::resolve($post);          // model page: layers 1-3 + 5-6
$seo = SEO::forRoute('contact');     // route page: layers 1-2 + 4

Výsledkem je neměnný hodnotový objekt SEOData používaný všemi renderery: Blade, pole i Inertia.

Vypočtené náhradní hodnoty (vrstva 5)

Pokud explicitní hodnota neexistuje, resolver ji odvodí z modelu:

  • Titulek — atribut title/name modelu.
  • Popis — první atribut v seo.computed.description_fields, který obsahuje smysluplný text. Výchozí pořadí: excerpt, summary, description, intro, lead, teaser, content, body, text, article. HTML se odstraní, entity dekódují a text se zkrátí na hranici slova (seo.computed.description_max_length, výchozí hodnota 160, bez výpustky).
  • Robots — metoda getSEORobots() modelu nebo atribut is_indexable. Viz ovládání robots a indexovatelnosti.
  • Hodnoty odvozené z URL — kanonická adresa a og:url z getUrlForSEO().

Ovládání robots a indexovatelnosti

noindex pro jednotlivé modely je vestavěné, bez dalšího balíčku a zbytečného přidávání sloupců. Trait HasSEO metodu robots nedeklaruje, protože je volitelná, takže ji lze snadno přehlédnout. Resolver ale už respektuje tři zdroje, v pořadí od nejvyšší priority:

PrioritaZdrojPříklad
1Explicitní seo_meta.robots$page->saveSEO(['robots' => 'noindex,follow'])
2Metoda getSEORobots(): ?string na modeluVrátí 'noindex, nofollow', případně null pro přechod na další zdroj
3Atribut is_indexable (sloupec nebo accessor)Nepravdivá hodnota ⇒ noindex, nofollow; pravdivá ⇒ index, follow
php
class Page extends Model
{
    use HasSEO;

    // Option A: let the resolver derive robots from a boolean flag.
    //   Schema::table('pages', fn ($t) => $t->boolean('is_indexable')->default(true));

    // Option B: compute it from your own state.
    public function getSEORobots(): ?string
    {
        return $this->status === 'draft' ? 'noindex, nofollow' : null;
    }
}

// Option C: set it explicitly per page (wins over A and B).
$page->saveSEO(['robots' => 'noindex, follow']);

Co se skutečně vykreslí

Vyhodnocený pokyn před vložením do <head> prochází pravidly výstupu. Značka <meta name="robots"> se vypíše jen tehdy, když se pokyn liší od default_robots (výchozí index,follow). Platí tedy:

  • Indexovatelná stránka vyhodnocená jako index, follow nevypíše žádnou značku robots. Její nepřítomnost robot vyhodnocuje právě jako index,follow.
  • Neindexovatelná stránka vypíše <meta name="robots" content="noindex, nofollow">.
  • Odlišný pokyn (noindex, max-snippet:-1, unavailable_after, …) se vypíše beze změny, včetně zadaných mezer.

Pro vždy vykreslenou značku nastavte seo.robots.emit_default = true. Podrobnosti najdete v pravidlech vykreslování robots.

Pravidla uplatňovaná po vyhodnocení

Použijí se bez ohledu na vrstvu, ze které hodnota pochází:

  • Přípona titulkutitle_suffix se přidá, pokud jí vyhodnocený titulek už nekončí. Pokud šablona výchozí hodnoty routy obsahuje značku, zakončete ji příponou, aby nevzniklo „Brand — X | Brand“.
  • Odstranění parametrů kanonické URL — z odvozených kanonických adres, tedy URL modelu nebo aktuální URL, se odstraní řetězec dotazu. Výjimkou jsou klíče z canonical.query_whitelist, například page pro stránkované archivy, které zůstávají. Explicitně nastavené kanonické adresy se zachovávají beze změny.
  • Absolutní sociální obrázkyog:image a twitter:image se vždy vypisují jako absolutní URL, jak vyžaduje specifikace Open Graph, i když je uložená hodnota relativní cestou.

Zjištění vítězné vrstvy

Balíček Filament zobrazuje zdroj u jednotlivých polí: Ručně / Náhrada z obsahu / Výchozí pro typ modelu / Globální výchozí / Konfigurace webu / Odvozeno z URL. V kódu SEOWarningEvaluator poskytuje stejné rozlišení mezi ruční a náhradní hodnotou pro vlastní ukazatele v administraci.

rankbeam/laravel-seo je distribuován pod licencí MIT.