Leer lo que el sitio declara
Revisé el JSON-LD real de la home, no el configurado en el plugin. Convivían dos grafos: el de Rank Math y un BreadcrumbList a medida que situaba la home dentro de la sección de producto.
Cinco señales contradictorias —schema, hreflang, enlaces a staging, buscador y llms.txt— que hacían que Google entendiera mal la arquitectura del sitio. Diagnóstico y corrección desde el código, sin añadir un solo plugin.
Sitio corporativo con varios idiomas, un plugin de traducción, Rank Math como plugin de SEO y Elementor como page builder. Todo aparentemente en orden: sitemaps limpios, sin errores graves en Search Console y buen rendimiento.
El detonante fue algo que cualquiera nota: al buscar la marca, Google mostraba como resultado principal una página de producto en lugar de la home. Tomé ese síntoma como punto de partida para auditar todas las señales que el sitio le enviaba a Google sobre su propia estructura.
Lo que parecía obvio y no era. Descartar bien ahorra días de trabajo en la dirección equivocada.
Search Console no mostraba acciones manuales y el resto de páginas mantenía posiciones.
La home tenía un canonical autorreferenciado correcto. El problema no estaba ahí.
Los textos eran distintos y la página de producto no competía por la marca en su contenido.
Revisé el JSON-LD real de la home, no el configurado en el plugin. Convivían dos grafos: el de Rank Math y un BreadcrumbList a medida que situaba la home dentro de la sección de producto.
La home queda como raíz con un único ListItem, y anulé el grafo paralelo del plugin solo en la portada, sin tocar el resto del sitio.
En lugar de parchear plantillas, corregí el x-default con el filtro que expone el propio plugin de traducción. Un cambio, todo el sitio.
El dry-run del search-replace encontró 555 coincidencias; 554 estaban en logs de seguridad y de correo, que son históricos y no se tocan. Solo una fila de contenido tenía los 4 enlaces rotos, dentro del JSON escapado de Elementor.
Sustituí la búsqueda nativa por un mu-plugin con puntuación de relevancia, más tipos de contenido y exclusión de todo lo marcado como noindex (11 entradas en ese momento).
Reemplacé el archivo virtual autogenerado por uno estático: resumen del producto, jerarquía de páginas y unos 55 enlaces priorizados en lugar de un volcado de URLs.
Fragmentos simplificados y sin datos del cliente, para que se vea el enfoque técnico real.
add_filter( 'rank_math/json_ld', function ( $data, $jsonld ) {
if ( is_front_page() ) {
return array(); // la home emite un único BreadcrumbList propio
}
return $data;
}, 99, 2 );# 1. Medir sin tocar nada
wp search-replace 'staging.example' 'www.example' --all-tables --dry-run --report-changed-only
# 2. Ejecutar solo donde vive el contenido
wp search-replace 'staging.example' 'www.example' wp_posts wp_postmeta --precise
wp elementor flush_css && wp cache flushLos logs de seguridad y de correo son registros de auditoría. Reescribirlos falsea el historial y no aporta nada.
El requisito era concreto (relevancia + exclusión de noindex) y un plugin genérico añadía tablas, índices y mantenimiento.
El archivo generado listaba URLs sin jerarquía. Uno curado a mano comunica mejor qué es el producto y qué páginas importan.
| Indicador | Antes | Después | Contexto |
|---|---|---|---|
| Breadcrumb de la home | Inicio → Producto | Solo Inicio | reindexación solicitada |
| Hreflang x-default | Inconsistente | Todo el sitio | un filtro, no parches |
| Enlaces a staging | 4 en 1 página | 0 | sin tocar 554 filas de logs |
| Noindex en el buscador | 11 visibles | 0 | regla general |
| llms.txt | Volcado automático | ~55 enlaces curados | archivo estático |
Cuando Google «elige» una página rara, casi siempre se lo está diciendo el propio sitio. Antes de tocar contenido, reviso qué declaran el schema, el canonical y el hreflang tal y como se renderizan.
Sí. El marcado estructurado no posiciona por sí solo, pero Google lo usa para entender la jerarquía. Un breadcrumb que coloca la home dentro de otra sección es una señal contradictoria.
Porque también reescribe logs, sesiones y datos serializados que no son contenido. Medir primero y acotar después es más seguro y más limpio.
No sustituye al SEO, pero un archivo curado ayuda a los asistentes de IA a entender qué es el producto. Un volcado automático de URLs aporta muy poco.
Si ya tienes un WordPress en producción, reviso el contexto y te digo con honestidad si lo que necesitas es desarrollo, SEO técnico, rendimiento o automatización.
Empezar un proyecto