Laravel Head est un nouveau package first-party de l'équipe open-source Laravel, présenté par Taylor Otwell lors de sa keynote du premier jour de la Laracon US 2026. Il fournit une API fluide pour tout le contenu du <head> : titres, meta descriptions, URL canoniques, balises Open Graph, directives robots, données structurées JSON-LD et resource hints, résolus par requête pour les applications Blade, Livewire et Inertia.
Les métadonnées se résolvent en cinq couches, de la priorité la plus basse à la plus haute : valeurs par défaut de la page, métadonnées de groupe de routes, métadonnées de route, métadonnées d'exécution et métadonnées d'erreur. Les couches supérieures remplacent les inférieures champ par champ : un titre défini à l'exécution remplace le titre de route sans toucher sa description. Les valeurs par défaut du site se déclarent dans un service provider via Head::defaults() ; un suffixe de titre y est hérité par les couches supérieures, donc Head::title('About') affiche « About - Laravel », sauf avec exact: true. canonical() sans argument utilise l'URL de la requête normalisée en https (désactivable avec forceHttps: false). Les directives robots acceptent des chaînes brutes, des cas de l'enum RobotsRule ou des listes mixtes, avec les raccourcis searchableByRobots() et hiddenFromRobots().
Pour les métadonnées connues à l'avance, withHead() les attache directement aux routes, groupes, resources et singletons — par ex. Route::view('/contact', 'contact')->withHead(title: 'Contact Us', description: 'Get in touch.'). En interne, cela écrit de simples tableaux via l'API native de métadonnées de routes de Laravel, donc le cache de routes reste compatible. Les arguments nommés sont limités aux propriétés intégrées pour que l'analyse statique détecte les fautes de frappe ; les données des builders personnalisés passent par un tableau extensions. Les métadonnées d'exécution se définissent via la façade dans les contrôleurs, y compris conditionnellement : Head::when($post->isDraft(), fn ($head) => $head->hiddenFromRobots()). Pour les champs à valeur unique, le dernier appel gagne ; les champs répétables comme ogImage() fusionnent par clé.
Le titre et la description remplissent automatiquement og:title et og:description manquants. Déclarer un type de carte Twitter dans les valeurs par défaut dérive les balises X des mêmes valeurs ; twitter() et twitterImage() permettent des variantes par page. Les données structurées passent par une façade Schema séparée avec des builders imbriquables pour article, blogPosting, product, offer, brand, breadcrumbs, faq, organization, person, webPage et webSite. Breadcrumbs et FAQs acceptent des tableaux en bloc ; les méthodes de fabrique inconnues produisent un schéma générique, et des classes typées peuvent être enregistrées avec l'attribut #[SchemaType]. Un JSON-LD invalide lève une exception hors production et journalise un avertissement en production.
Blade et Livewire utilisent la directive @head dans le layout ; elle rend de façon synchrone, les métadonnées doivent donc être définies avant le rendu du layout. Livewire ne demande aucune configuration, le resolver étant scopé par requête. Inertia bénéficie de l'intégration la plus poussée : le package partage le head résolu comme tableau de chaînes d'éléments sous une prop head ; en activant l'option serverHead d'Inertia (Inertia 3.5+), chaque élément est adopté via une clé data-inertia stable et synchronisé entre navigations et retours arrière/avant. Comme @head place les balises dans le HTML initial, les crawlers et bots d'aperçu les lisent sans JavaScript, sans composant <Head> côté client. Les balises statiques de session se déclarent avec Head::inertiaGlobals(). Les applications Inertia existantes doivent retirer leurs callbacks de titre et migrer le contenu de leurs composants <Head>.
Laravel Head requiert PHP 8.3 et Laravel 13.17 ou supérieur, installé via composer require laravel/head. Pour obtenir les métadonnées sous forme de données plutôt que de balisage, on appelle Head::toArray(). Documentation sur laravel.com/docs/13.x/head, sources sur github.com/laravel/head.
Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.