Laravel Head ist ein neues First-Party-Paket des Laravel-Open-Source-Teams, das Taylor Otwell in seiner Keynote am ersten Tag der Laracon US 2026 vorstellte. Es bietet eine fluente API für alles im <head> eines Dokuments: Titel, Meta-Descriptions, Canonical-URLs, Open-Graph-Tags, Robots-Direktiven, JSON-LD-Daten und Resource Hints — pro Request aufgelöst für Blade-, Livewire- und Inertia-Anwendungen.

Metadaten werden in fünf Schichten aufgelöst, von niedrigster zu höchster Priorität: Seiten-Defaults, Route-Group-Metadaten, Routen-Metadaten, Runtime-Metadaten und Fehler-Metadaten. Höhere Schichten ersetzen niedrigere feldweise, sodass ein Runtime-Titel den Routen-Titel ersetzt, ohne die Description anzufassen. Defaults werden in einem Service Provider über Head::defaults() registriert; ein dort gesetztes Title-Suffix gilt auch in höheren Schichten, sodass Head::title('About') „About - Laravel“ rendert — außer man übergibt exact: true. canonical() ohne Argument nutzt die aktuelle Request-URL, normalisiert auf https (abschaltbar mit forceHttps: false). Robots-Direktiven akzeptieren Strings, RobotsRule-Enum-Cases oder gemischte Listen; searchableByRobots() und hiddenFromRobots() sind Kurzformen.

Für bereits im Voraus bekannte Metadaten hängt withHead() diese direkt an Routen, Gruppen, Resources und Singletons an — z. B. Route::view('/contact', 'contact')->withHead(title: 'Contact Us', description: 'Get in touch.'). Intern schreibt es einfache Arrays über Laravels native Route-Metadata-API, sodass Route-Caching weiter funktioniert. Die benannten Argumente sind auf eingebaute Eigenschaften beschränkt, damit statische Analyse Tippfehler findet; Custom-Builder-Daten gehen über ein extensions-Array. Runtime-Metadaten setzt man per Facade im Controller, inklusive Bedingungen wie Head::when($post->isDraft(), fn ($head) => $head->hiddenFromRobots()). Einzelwert-Felder nimmt der letzte Aufruf; wiederholbare Felder wie ogImage() mergen über den Schlüssel.

Titel und Description füllen fehlende og:title- und og:description-Tags automatisch. Registriert man einen Twitter-Card-Typ in den Defaults, werden die X-Card-Tags aus denselben Werten abgeleitet; twitter() und twitterImage() erlauben seitenbezogene Abweichungen. Strukturierte Daten laufen über eine eigene Schema-Facade mit verschachtelbaren Buildern für article, blogPosting, product, offer, brand, breadcrumbs, faq, organization, person, webPage und webSite. Breadcrumbs und FAQs nehmen Arrays en gros; unbekannte Factory-Methoden erzeugen ein generisches Schema, eigene Klassen registriert man mit dem #[SchemaType]-Attribut. Ungültiges JSON-LD wirft außerhalb der Produktion eine Exception, in Produktion wird eine Warnung geloggt.

Blade und Livewire rendern mit der @head-Direktive im Layout; sie rendert synchron, Metadaten müssen also vor dem Layout definiert sein. Livewire braucht keine Zusatzkonfiguration, da der Resolver request-scoped ist. Inertia erhält die tiefste Integration: Das Paket teilt den aufgelösten Head als Array fertiger Element-Strings unter einer head-Prop; aktiviert man Inertias serverHead-Option (ab Inertia 3.5), übernimmt Inertia jedes Element über einen stabilen data-inertia-Key und hält es über Navigation und Back/Forward synchron. Da @head die Tags im initialen HTML ausgibt, lesen Crawler und Link-Preview-Bots sie ohne JavaScript; eine clientseitige <Head>-Komponente ist unnötig. Sitzungsstatische Tags registriert man mit Head::inertiaGlobals(). Bestehende Inertia-Apps sollten Title-Callbacks entfernen und <Head>-Inhalte migrieren.

Laravel Head erfordert PHP 8.3 und Laravel 13.17 oder neuer, Installation per composer require laravel/head. Wer Metadaten als Daten statt Markup braucht, ruft Head::toArray() auf. Dokumentation unter laravel.com/docs/13.x/head, Quellcode auf github.com/laravel/head.