Přejít na obsah

Markdown pro roboty ​

HTML stránky aplikace obaluje obsah navigací, skripty a značkami layoutu. Někteří AI roboti a odpovědní systémy přijímají čistší reprezentaci, pokud je dostupná. Tato funkce proto může klientům, kteří o ni požádají při vyjednávání obsahu, poskytnout reprezentaci stránky v Markdownu, zatímco běžní návštěvníci dál dostávají vaše HTML beze změny. Jde o volitelnou možnost kompatibility, nikoli příslib, jak konkrétní klient výsledek zpracuje nebo použije.

Funkce doplňuje řízení přístupu AI robotů: to nastavuje pravidla přístupu, zatímco tato funkce rozhoduje, jaký obsah během požadavku poskytnout.

Jde o bezplatnou funkci balíčku Core a je ve výchozím nastavení vypnutá.

Jak funguje ​

Po zapnutí se zaregistruje middleware pro vyjednávání obsahu. Po vytvoření běžné odpovědi ji nahradí Markdownem jen při splnění obou podmínek:

  1. Požadavek žádá o Markdown: výslovnou hlavičkou Accept: text/markdown, parametrem dotazu ?format=md nebo po volitelném zapnutí identifikací známého AI robota podle user-agentu.
  2. Pro trasu se podaří získat zdroj Markdownu.

Jinak odpověď projde beze změny. Běžný prohlížeč tedy funkce neovlivní a nahrazuje se jen úspěšná odpověď HTML, nikdy JSON, přesměrování ani soubor ke stažení.

php
# config/seo.php
'markdown_for_bots' => [ 'enabled' => true ],
GET /blog/my-post            → text/html   (your normal page)
GET /blog/my-post?format=md  → text/markdown
GET /blog/my-post  (Accept: text/markdown) → text/markdown

Odkud Markdown pochází ​

Níže uvedené zdroje mohou poskytnout Markdown pro nalezenou trasu. Middleware zkouší nejprve registrovaný zdroj trasy, potom modely navázané na trasu. U každého modelu má výslovná metoda toSeoMarkdown() přednost před vestavěnou náhradou. Pokud tato metoda vrátí null nebo prázdný výsledek, náhradní zdroj se pro daný model nepoužije.

1. Vlastní Markdown modelu ​

Pokud žádný registrovaný zdroj trasy nevrátí obsah, řídí výstup model navázaný na trasu, který implementuje toSeoMarkdown(). Implementujte kontrakt ProvidesSeoMarkdown nebo jednoduše přidejte tuto metodu:

php
use Rankbeam\Seo\Contracts\ProvidesSeoMarkdown;

class Post extends Model implements ProvidesSeoMarkdown
{
    use HasSEO;

    public function toSeoMarkdown(): ?string
    {
        return $this->body_markdown; // your already-clean markdown
    }
}

2. Registrovaný zdroj trasy ​

Pro trasy bez modelu nebo pro přepsání výstupu modelu zaregistrujte zdroj podle názvu trasy:

php
use Rankbeam\Seo\Facades\SEO;

SEO::markdown()->register('pages.about', "# About us\n\nWe build things.");
SEO::markdown()->register('posts.show', fn ($request) => $request->route('post')->body_markdown);

3. Vestavěný náhradní zdroj ​

Pokud model HasSEO navázaný na trasu nemá toSeoMarkdown(), middleware sestaví základní dokument z vyhodnoceného titulku jako H1, popisu a getContentForSEO() modelu:

markdown
# Post title

The meta description.

…the model's content…

Obsah se poskytuje beze změny

Náhradní zdroj vypíše getContentForSEO() doslova. Pokud je obsah v HTML místo Markdownu, implementujte toSeoMarkdown() a převod řiďte sami. Náhradní zdroj úplně vypnete pomocí seo.markdown_for_bots.build_from_content = false.

Konfigurace ​

php
// config/seo.php
'markdown_for_bots' => [
    'enabled'            => false,    // off by default; the middleware isn't registered until true
    'auto_register_middleware' => true,
    'serve_to_known_bots' => false,   // also serve to known AI crawlers by user-agent
    'query_param'        => 'format', // the ?format=md trigger
    'query_value'        => 'md',
    'build_from_content' => true,     // build from getContentForSEO() when no toSeoMarkdown()
],

Ponechte serve_to_known_bots vypnuté, pokud chcete vyjednávat pouze podle výslovného signálu Accept / ?format. Zapněte je, pokud chcete Markdown poskytovat také robotům GPTBot, ClaudeBot, PerplexityBot a ostatním identifikovaným pomocí katalogu AI robotů, i když o něj nepožádají.

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