Lynx SEO
lynxcms/seo escribe las etiquetas de título, descripción, canónico, robots, Open Graph, X (Twitter) y hreflang, y sirve /robots.txt.
Renderizado
<head>
<meta charset="utf-8">
<x-lynx-seo :page="$page" />
</head>
Reemplaza <title> y @hreflang. Para una lista filtrada, sobrescriba por respuesta: <x-lynx-seo :page="$page" robots="noindex, follow" :canonical="$page->url" /> (claves title, description, canonical, robots; el mismo arreglo funciona para @seo($page, [...]) y lynx()->seo($page, [...])). @seo($page) es lo mismo; lynx()->seo($page) devuelve un objeto SeoData para un encabezado personalizado.
Campos
Active SEO por plantilla; las páginas obtienen entonces seo_title, seo_description, seo_image, seo_noindex y seo_canonical:
lynx()->run(\LynxCms\Seo\Actions\EnableSeo::class, ['template' => 'article']);
Los campos vacíos recurren al título de la página en el patrón de título del sitio, al primero de lynx-seo.description_fields con texto, a la primera imagen de lynx-seo.image_fields, y luego a los valores predeterminados en la página de configuración (lynx()->settings('seo-settings')).
Fuera de producción, cada página dice noindex y robots.txt lo deshabilita todo (lynx-seo.block_non_production).
Datos estructurados
Cada página obtiene un gráfico JSON-LD (WebSite, Organization, WebPage, BreadcrumbList). Asigne una plantilla a un tipo de schema.org en la página de configuración SEO (matriz seo_schemas, tipo de elemento mapping: seo_schema_template, seo_schema_type, seo_schema_map), o en la pestaña de Datos estructurados del administrador. Las líneas del mapeo se leen como propiedad: fuente, donde una fuente es un campo, @title, @url, @published, @modified, una constante como =EUR, o @organization (el propietario del sitio, para author, publisher, provider u organizer):
name: @title
startDate: starts
location: venue
offers.priceCurrency: =EUR
Agregue otros nodos con app(\LynxCms\Seo\JsonLd\JsonLd::class)->extend(fn ($page, $graph) => $graph->add([...])).
Verificación
La herramienta de lectura seo_inspect proporciona las etiquetas finales de una página en un idioma. La gestión de SEO requiere el permiso seo.manage.