Hola, estoy implementando las etiquetas Hreflang en uno de los clones de mi woocommerce retroboxes.de con el plugin Hreflang Manager Pro, he conseguido añadirlas pero no detecta la etiqueta X-Default. No conozco demasiado el plugin ni he encontrado mucha información de el. Me podéis ayudar a solucionar este problema usando este plugin (ya que hay pocos plugins de este tipo y este es el unico que me permite etiquetar hreflang en los productos) o añadiendo manualmente la etiqueta X-Default.
El producto que estoy etiquetando por el momento es este...
he empezado por retroboxes.de ya que es la de menos venta.
y la captura de la página de edición del producto, por si lo estoy haciendo mal.
Tengo cada idioma en dominios diferentes retroboxes.de, retroboxes.fr, retroboxes.uk y retroboxes.es donde la X-Default debe ser retroboxes.uk
Muchas gracias, Nadinne.
Contenido solo visible a usuarios registrados
Hola, Nadinne
Para que Google detecte la etiqueta "X-Default" (que es una etiqueta hreflang) tienes que añadir su declaración en todas las páginas del sitio y se me ocurre que como usas Rank Math deberías aprovechar el campo "Avanzado > URL canónica" que permite añadir la que será la URL principal cuando hay contenido duplicado.
Esta información la tienes especificada en el punto https://rankmath.com/blog/hreflang-tags/#canonical del tutorial que te recomendamos en otro hilo del Foro.
Aunque lo propio sería que añadieses la etiqueta (sin espacio después de < ni antes de > )
< link rel="alternate" href="https://tudominio.com/pagina-principal" hreflang="x-default" / >
Si tu editor Page Builder SiteOrigin te permite añadir código en < head > es un buen lugar para añadirlo, aunque para estos casos mejor usar plugins como WP Code, Code Snippet o similares, pero con la cantidad de plugins que tienes instalados, no me atrevo a recomendarte instalar más cosas.
Si añades la etiqueta en la página de producto (single-product) luego verifica con "Screaming Frog SEO Spider" si te indica la falta de X-Default en productos de la tienda.
Como te he comentado anteriormente, la mayor dificultad de la implementación de "hreflang" y su correspondiente etiqueta "X-Default" estriba en que no usas plugins multiidiomas, sino sitios separados con dominios diferentes, que no suele ser lo habitual.
Nosotros no tenemos acceso a plugins de pago (comerciales), por lo que te insto a que explores todas las opciones de tu Rank Math Pro y de Hreflang Manager Pro, ya que en las versiones gratuitas no permite gestionar este tipo de etiquetas.
Esta primera solución me parece genial ¿marco también redirigir? ¿la url que debería poner entiendo que debe ser la de uk EN? Porque X-Default es para los países que no tengo en su idioma ¿verdad?
y la segunda solución que me has dado, ¿habría que insertarla en cada head de cada producto?
Perdona por tanta pregunta, pero creo que ya estamos terminando.
Gracias.
Hola Nadinne.
No, no tienes que seleccionar la opción de redirigir, solo tendrás que seleccionarlo si quisieras que sa página redirigiera a la URL principal con lo que solo posicionaría la URL Principal
¿la url que debería poner entiendo que debe ser la de uk EN?
Supongamos que la URL principal que quieres que mejor posición es la del idioma español, entonces en los otros idiomas como canónica tienes que añadir la URL del idioma español.
Esto le indica a Google que la URL principal es la del idioma Español.
Puedes utilizar un Snippet como te comente antes y te evitas de ir producto por producto, este sería para la versión en Aleman:
add_action('wp_head', 'add_dynamic_hreflang_tags');
function add_dynamic_hreflang_tags() {
if (is_product()) {
// Obtén la URL actual del producto
$current_url_path = $_SERVER['REQUEST_URI']; // Solo la parte después del dominio
// Define los dominios para cada idioma
$hreflang_tags = [
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
];
// Genera las etiquetas hreflang
foreach ($hreflang_tags as $lang => $url) {
echo '<link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($url) . '" />' . "\n";
}
}
}
Para la web en español invertimos el orden de hreflang
add_action('wp_head', 'add_dynamic_hreflang_tags');
function add_dynamic_hreflang_tags() {
if (is_product()) {
// Obtén la URL actual del producto
$current_url_path = $_SERVER['REQUEST_URI'];
// Define los dominios para cada idioma
$hreflang_tags = [
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
];
// Genera las etiquetas hreflang
foreach ($hreflang_tags as $lang => $url) {
echo '<link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($url) . '" />' . "\n";
}
}
}
Este código genera etiquetas hreflang para cada producto automáticamente en función del idioma y dominio
Un saludo
Esta solución es estupenda, ¿este snippet lo añado al function.php del tema hijo?
¿Y a este código le faltaría las lineas para FR y UK? algo así...
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
'fr' => 'https://retroboxes.fr' . $current_url_path, // Versión en frances
'en' => 'https://retroboxes.uk' . $current_url_path, // Versión en ingles
Respóndeme estas dudas y cerramos el tema, que estaréis hasta el gorro de esta pesada.
Gracias.
Hola Nadinne.
¿este snippet lo añado al function.php del tema hijo?
Exato
¿Y a este código le faltaría las lineas para FR y UK?
Si tienes que añadir todos los idiomas que faltan por ejemplo para la instalación en Español:
add_action('wp_head', 'add_dynamic_hreflang_tags_es');
function add_dynamic_hreflang_tags_es() {
if (is_product()) {
// Obtén la URL actual del producto
$current_url_path = $_SERVER['REQUEST_URI'];
// Define los dominios para cada idioma
$hreflang_tags = [
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
'fr' => 'https://retroboxes.fr' . $current_url_path, // Versión en francés
'en' => 'https://retroboxes.uk' . $current_url_path, // Versión en inglés
];
// Genera las etiquetas hreflang
foreach ($hreflang_tags as $lang => $url) {
echo '' . "\n";
}
}
}
Para el Alemán:
add_action('wp_head', 'add_dynamic_hreflang_tags_de');
function add_dynamic_hreflang_tags_de() {
if (is_product()) {
// Obtén la URL actual del producto
$current_url_path = $_SERVER['REQUEST_URI'];
// Define los dominios para cada idioma
$hreflang_tags = [
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
'fr' => 'https://retroboxes.fr' . $current_url_path, // Versión en francés
'en' => 'https://retroboxes.uk' . $current_url_path, // Versión en inglés
];
// Genera las etiquetas hreflang
foreach ($hreflang_tags as $lang => $url) {
echo '' . "\n";
}
}
}
Para el Francés:
add_action('wp_head', 'add_dynamic_hreflang_tags_fr');
function add_dynamic_hreflang_tags_fr() {
if (is_product()) {
// Obtén la URL actual del producto
$current_url_path = $_SERVER['REQUEST_URI'];
// Define los dominios para cada idioma
$hreflang_tags = [
'fr' => 'https://retroboxes.fr' . $current_url_path, // Versión en francés
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
'en' => 'https://retroboxes.uk' . $current_url_path, // Versión en inglés
];
// Genera las etiquetas hreflang
foreach ($hreflang_tags as $lang => $url) {
echo '' . "\n";
}
}
}
Para el Inglés:
add_action('wp_head', 'add_dynamic_hreflang_tags_en');
function add_dynamic_hreflang_tags_en() {
if (is_product()) {
// Obtén la URL actual del producto
$current_url_path = $_SERVER['REQUEST_URI'];
// Define los dominios para cada idioma
$hreflang_tags = [
'en' => 'https://retroboxes.uk' . $current_url_path, // Versión en inglés
'es' => 'https://retroboxes.es' . $current_url_path, // Versión en español
'de' => 'https://retroboxes.de' . $current_url_path, // Versión en alemán
'fr' => 'https://retroboxes.fr' . $current_url_path, // Versión en francés
];
// Genera las etiquetas hreflang
foreach ($hreflang_tags as $lang => $url) {
echo '' . "\n";
}
}
}
Un Saludo
Jod..., esta respuesta es un 10. Por cierto no has dejado esta línea fuera del código a propósito ¿verdad?
Con este método ya no necesito el plugin Hreflang Manager ¿es así?
Hola Nadinne.
No, disculpa, eres mas rapida que yo, ya lo cambie.
un Saludo
Con este método ya no necesito el plugin Hreflang Manager ¿es así? ¿lo puedo desinstalar?
Hola Nadinne.
En principio no lo necesitas pero bueno antes de eliminarlo lo pruebas, no pasa nada si sigues teniendo el plugin.
Un Saludo
ultima pregunta ¿El código que me has dado incluye las X-Default?
Parece que no ha funcionado el snippet, he instalado Screaming Frog y no me funciona, me da error 503 (error servidor interno) y he vuelto a hacer la prueba en hreflangchecker.com
y en localizely.com/hreflang-checker
sin embargo en el producto etiquetado con Hreflang Manager https://retroboxes.de/produkte/playstation-2-slim-silver-konsolenbox-model-scph-70004-ss-eur-innenkartons/
las detecta pero sin X-Default
Parece que el plugin funciona mejor en este caso, ¿habría algún código para añadir la etiqueta X-Default producto por producto?
Hola, Nadinne
Como te comenté ayer, la etiqueta hreflang "X-Default" debe declararse para todo el sitio, con algún plugin de snippets (WP Code, Code Snippet, etc), ya que plugins como Hreflang Manager no la incluyen (no se entiende por qué) y Rank Math no la gestiona (aunque en su documentación la recomienda) 🙄
Yo te he metido en el lío de "X-Default" y a la altura de esta consulta te diría que te olvides un poco de ella, mientras Google no se queje, y centres tu esfuerzo en tener "hreflang" en tus productos para los diferentes idiomas, que entiendo ese es tu objetivo principal.
Me ha resultado muy básico el plugin "Hreflang Manager" (el Pro no lo podemos probar al ser de pago) y pensaba que gestionaría con más exactitud dichas etiquetas, pero veo que se limita a añadir la etiqueta genérica en cada página (también de productos), que tampoco está mal.
Si aún puedes, sigue con el plugin y configúralo para los idiomas de los sitios que tienes (uk, es, fr, de) y analiza con Screaming Frog SEO Spyder que aparecen dichas etiquetas y deja que Google repase tus páginas de nuevo, enviándole tu sitemap desde Search Console > Sitemap y en unos días vas verificando que no te marca contenido duplicado, que a fin de cuentas, entiendo que es lo más importante y el motivo que te ha llevado a añadir dicha etiqueta.
Si Screaming Frog SEO Spyder no te arroja resultados, pide por ticket que te comprueben si está bloqueado el uso de este crawler, para que pueda funcionarte bien y te devuelva resultados.
Nota: Si usas Hreflang Manager, no necesitarás los snippets, pero no los elimines, simplemente desactívalos con el plugin que los hayas insertado.
Tu caso no es muy habitual, como ya te indiqué ayer, pues tienes instalaciones separadas en dominios diferentes y eso hace que las soluciones habituales pensadas para multisitios bajo un mismo dominio no sirvan para ti.
Quedo pendiente de tus indicaciones para seguir ayudándote. 😊
Gracias por tu respuesta, seguiré tus pasos, quedo tranquila con los x-default y abriré ticket para ver que ocurre con el bloqueo de Screaming Frog SEO Spyder.
Muchas gracias por la ayuda de los 2.
Solucionado, gracias.
Nadinne.
De nada, gracias a ti. 😊
Cualquier consulta que tengas, no dudes en comunicarlo.
Cerramos el tema.
Un saludo