Laravel Head es un nuevo paquete first-party del equipo open-source de Laravel, presentado por Taylor Otwell en su keynote del primer día de la Laracon US 2026. Ofrece una API fluida para todo lo que va en el <head> del documento: títulos, meta descriptions, URL canónicas, etiquetas Open Graph, directivas robots, datos estructurados JSON-LD y resource hints, resueltos por petición para aplicaciones Blade, Livewire e Inertia.
Los metadatos se resuelven en cinco capas, de menor a mayor prioridad: valores por defecto de página, metadatos de grupo de rutas, metadatos de ruta, metadatos en tiempo de ejecución y metadatos de error. Las capas superiores sustituyen a las inferiores campo a campo, de modo que un título en runtime reemplaza el de la ruta sin tocar su descripción. Los valores por defecto del sitio se registran en un service provider con Head::defaults(); un sufijo de título definido ahí se hereda en las capas superiores, así que Head::title('About') renderiza «About - Laravel», salvo que se pase exact: true. canonical() sin argumentos usa la URL de la petición actual normalizada a https (desactivable con forceHttps: false). Las directivas robots aceptan cadenas, casos del enum RobotsRule o listas mixtas, con los atajos searchableByRobots() y hiddenFromRobots().
Para metadatos conocidos de antemano, withHead() los adjunta directamente a rutas, grupos, resources y singletons — p. ej. Route::view('/contact', 'contact')->withHead(title: 'Contact Us', description: 'Get in touch.'). Internamente escribe arrays planos mediante la API nativa de metadatos de rutas de Laravel, por lo que el caché de rutas sigue funcionando. Los argumentos con nombre se limitan a las propiedades integradas para que el análisis estático detecte erratas; los datos de builders personalizados van en un array extensions. Los metadatos en runtime se definen con la fachada en los controladores, incluso condicionalmente: Head::when($post->isDraft(), fn ($head) => $head->hiddenFromRobots()). En campos de valor único gana la última llamada; los repetibles como ogImage() fusionan por clave.
El título y la descripción rellenan automáticamente og:title y og:description ausentes. Registrar un tipo de tarjeta Twitter en los valores por defecto deriva las etiquetas de X de los mismos valores; twitter() y twitterImage() permiten variantes por página. Los datos estructurados usan una fachada Schema independiente con builders anidables para article, blogPosting, product, offer, brand, breadcrumbs, faq, organization, person, webPage y webSite. Breadcrumbs y FAQs aceptan arrays en bloque; los métodos de fábrica desconocidos generan un esquema genérico, y se pueden registrar clases tipadas con el atributo #[SchemaType]. Un JSON-LD inválido lanza una excepción fuera de producción y registra una advertencia en producción.
Blade y Livewire renderizan con la directiva @head en el layout; lo hace de forma síncrona, así que los metadatos deben definirse antes de renderizar el layout. Livewire no requiere configuración extra, ya que el resolver tiene ámbito de petición. Inertia recibe la integración más completa: el paquete comparte el head resuelto como un array de cadenas de elementos bajo una prop head; al activar la opción serverHead de Inertia (Inertia 3.5+), cada elemento se adopta mediante una clave data-inertia estable y se mantiene sincronizado entre visitas y navegación atrás/adelante. Como @head coloca las etiquetas en el HTML inicial, los crawlers y bots de vistas previas las leen sin JavaScript, sin necesidad de un componente <Head> en el cliente. Las etiquetas estáticas de sesión se registran con Head::inertiaGlobals(). Las aplicaciones Inertia existentes deben eliminar los callbacks de título y migrar el contenido de sus componentes <Head>.
Laravel Head requiere PHP 8.3 y Laravel 13.17 o superior, y se instala con composer require laravel/head. Quien necesite los metadatos como datos en lugar de marcado puede llamar a Head::toArray(). Documentación en laravel.com/docs/13.x/head y código fuente en github.com/laravel/head.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.