WPML está bien cuando los idiomas viven en el mismo WordPress. Cuando cada idioma es otra instalación, no. agencia.com y agencia.it son dos MySQL, a veces otro child theme. Instalar WPML en el inglés no le dice nada al italiano: otro hosting, otro wp_posts.
Polylang, TranslatePress y Weglot caen en lo mismo. Weglot además mete otro vendor y traducción automática. Con cuatro sitios ya partidos, el mapa tiene que vivir fuera.
El diseño que sí encaja
Necesitas tres piezas, y ninguna es “un plugin premium de SEO”:
- Un mapa de equivalencias URL ↔ URL, versionado, el mismo archivo en las cuatro instalaciones (o servido desde un sitio interno). JSON o PHP. Una fila por producto. Guion si no hay hermana.
- Un emisor que, dada la URL actual, imprime el bloque recíproco completo: todos los idiomas existentes + autorreferencia +
x-default. - Un gancho
wp_headcon prioridad conocida, que no pelee con Yoast. Si Yoast también emite hreflang (suele, si le das idiomas que no tienes), apaga el de Yoast. Dos bloques distintos es peor que cero.
add_action('wp_head', 'emit_hreflang_map', 1);
function emit_hreflang_map() {
$current = home_url(add_query_arg([], $GLOBALS['wp']->request));
$block = hreflang_block_for($current);
if (!$block) {
return;
}
echo $block;
}
El detalle de home_url y permalinks con o sin slash final importa: el mapa tiene que usar exactamente la URL canónica. Si el mapa dice /tour/x/ y WordPress sirve /tour/x, Google ve dos mundos. Elige barra final, 301 la otra, y el mapa sigue esa ley.
Por qué el mapa no puede vivir en la cabeza de nadie
En un catálogo de tours, las equivalencias no son traducción literal del slug. Machu Picchu Full Day vs Machu Picchu 1 día vs Machu Picchu 1 giorno vs pacote Machu Picchu full day. Cruzar sitemaps, no títulos. Los títulos mienten; los slugs, menos.
Gaps: si el lujo solo existe en inglés, el emisor no inventa un hreflang="pt-BR" a la home brasileña. Eso le dice a Google que el paquete caro es la portada en portugués. Es una mentira de producto. El brasileño que aterriza en la home no compra el hotel de lujo.
El mapa es también el backlog de marketing: cada guion es una ficha que ops ya opera y el mercado no puede comprar.
Dónde se rompe en Goodlayers / Tourmaster
Temas de constructor y plugins de tours generan URLs en un CPT (tour, pacote). El emisor tiene que reconocer el CPT y el slug, no solo páginas. Si filtrás is_page() y te olvidas de is_singular('tour'), el hreflang vive en el blog y muere en el dinero.
Yoast a veces emite hreflang de “idioma del sitio” apuntando a sí mismo. Eso no es una red. Un único hreflang="en" autorreferente no agrupa nada. Quítalo o el informe de GSC se vuelve ruido.
Sitemaps: puedes además emitir en XML. No es obligatorio si el HTML es completo. Si haces las dos, que el mapa sea la misma fuente. HTML dice A, sitemap dice B: otra señal pisada.
Cómo lo pruebas sin Search Console el día 0
curl -s -A "Mozilla/5.0" "https://www.agencia.com/tour/machu-picchu-full-day/" \
| grep -oE 'hreflang="[^"]+" href="[^"]+"'
Pega la URL hermana que salió. Ábrela. El bloque tiene que listar las mismas N URLs, incluida la original. Si un idioma no lista al otro, no hay reciprocidad. Un script de 40 líneas ahorra una tarde de clics: no es para un informe bonito, es para no desplegar un mapa cojo.
Apaga el hreflang de Yoast en las cuatro
Un emisor. Si no, debugueas fantasmas.
Despliega el mismo archivo de mapa
Git, o un include copiado. La deriva de “en el italiano no actualizaron el PHP” es el fallo del mes 2.
Piloto de 10 grupos
Homes + tours que existen en todos los idiomas. Reciprocidad 100% o no sigues.
Gancho en CPT de tours
Verifica una ficha, no solo la home. La home miente de lo fácil que es.
Qué le dices al equipo de sistemas
No: “instalen WPML”. Sí: “el child theme ya tiene un functions.php; esto es un include más, idéntico en las cuatro, y un array. No toca el constructor. No toca Tourmaster. Si el permalink cambia, se cambia la fila.”
Eso es implementable un martes. WPML en cuatro sitios es un proyecto de vendor, licencias, y un modelo de datos que no coincide con la realidad. El SEO técnico que también escribe PHP no discute plugins. Trae el snippet y el mapa. El resto es disciplina de deploy.