es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los rastreadores de motores de búsqueda son redirigidos a páginas en inglés (y, por lo tanto, evitan las páginas de otros idiomas) con un sitio web multilingüe.

Tengo la siguiente estructura de URL multilingüe:

example.com/article123 # inglés
example.com/fr/article123 # francés
example.com/de/article123 # alemán

Existe una redirección 302 automática al idioma relevante, según el idioma del navegador ($_SERVER [‘HTTP_ACCEPT_LANGUAGE’]). Esto es bueno para la experiencia del usuario, ya que la mayoría de los usuarios no tienen que hacer clic manualmente en un interruptor de idioma. Según mis estadísticas, funciona bien.

Problema: al usar la herramienta de auditoría de sitios web de Ahrefs (será lo mismo para los rastreadores de motores de búsqueda, GoogleBot, …), veo que sus rastreadores se redireccionan a 302 y, por lo tanto, nunca visitan el sitio web francés. De hecho, cuando el rastreador (probablemente establecido en inglés) visita example.com/fr/article123, se redirigirá a example.com/article123. Imagino que estos rastreadores no consideran las cookies, por lo que será lo mismo para todas las páginas.

¿Qué solución técnica debo usar para evitar que un sitio web multilingüe sea indexado incorrectamente por los bots de motores de búsqueda?

TL; DR: ¿Cómo podría activar una redirección según el idioma del navegador para un usuario normal y no redirigir bots (como GoogleBot, Facebook o Twitter Crawlers que son responsables de las tarjetas “Compartir …”)?

Esto es lo que uso:

function lang_redirect () {
if (isset ($_COOKIE[‘lang_redirect’])) // ya redirigido en las últimas 24 horas, no volver a hacerlo
return;
global $ lang, $ requesturi;
$ browserlang = getlang ($_SERVER [‘HTTP_ACCEPT_LANGUAGE’]); // fr, de, en …
$link = lang_translation_link ($ browserlang);
if (($ browserlang! = $ lang) && ($ link! = ”)) header (“Ubicación: “. $ link); // ¡redirigir ahora!
header (“Set-Cookie: lang_redirect = 1; Max-Age = 86400; Ruta = /; HttpOnly; SameSite = Lax”);
}

Nota: la redirección ocurre solo una vez (configurando cookies), porque un visitante con un navegador configurado en alemán podría querer visitar el sitio web en inglés y no ser redirigido cada vez al sitio web en alemán. Ejemplo:

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar que los bots de los motores de búsqueda rastreen de forma incorrecta un sitio web multilingüe y, al mismo tiempo, activar la redirección según el idioma del explorador para un usuario normal, se puede implementar la siguiente solución técnica:

    En primer lugar, agregar una condición de verificación de agente de usuario para asegurarse de que la redirección solo se produzca para usuarios normales y no bots. Esto se puede hacer verificando el contenido de la variable $_SERVER[‘HTTP_USER_AGENT’].

    if (isset($_COOKIE['lang_redirect']) || preg_match('/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'])) {
        return;
    }
    

    En segundo lugar, modificar el código actual de redirección de idiomas para no redirigir cuando se detecta que el agente de usuario es un bot o rastreador. Esto se podría hacer agregando una condición adicional que verifique la presencia de ciertas cadenas de agente de usuario.

    $botUAs = array('GoogleBot', 'TwitterBot', 'FacebookBot');
    if (!in_array($_SERVER['HTTP_USER_AGENT'], $botUAs)) {
        // Código de redirección de idiomas existente
    }
    

    Con estas modificaciones, el código de redirección de idiomas solo se ejecutará para usuarios normales y no para bots o rastreadores. Esto asegurará que los bots de los motores de búsqueda puedan rastrear todas las versiones de idioma del sitio web sin ser redirigidos al versión predeterminada.

Comments are closed.