Cómo permitir que tu red de publicidad se integre con las funciones de la Búsqueda de Google relacionadas con la traducción

La Búsqueda de Google ofrece varias funciones de traducción que permiten que los usuarios accedan a contenido traducido. Si tienes una red de publicidad activa y tus anuncios no funcionan correctamente en las páginas web traducidas, tendrás que seguir los pasos de esta guía para asegurarte de que tus anuncios se rendericen o atribuyan correctamente.

Nuestro enfoque

Cuando los usuarios acceden al contenido traducido que proporciona Google Traductor desde los resultados de la búsqueda, Google recupera la página del publicador, reescribe la URL de origen y traduce la página web después de que el usuario hace clic en el resultado traducido.

Cómo convertir la URL de Google Traductor en la URL original

Si tienes una red de publicidad activa que depende de la URL de origen del publicador, deberás convertir la URL de Google Traductor para asegurarte de que tus anuncios se muestren correctamente. Sigue estos pasos para decodificar el nombre de host del publicador:

  1. Extrae el prefijo de dominio del nombre de host. Para ello, quita el sufijo .translate.goog.
  2. Divide el parámetro _x_tr_enc por el carácter , (coma) y guárdalo como encoding_list.
  3. Si existe, antepón el valor del parámetro _x_tr_hp al prefijo de dominio.
  4. Si encoding_list contiene 1 y el resultado comienza con 1-, quita el prefijo 1- del resultado del paso 2.
  5. Si encoding_list contiene 0 y el resultado comienza con 0-, quita el prefijo 0- del resultado del paso 3. Si quitaste el prefijo, configura is_idn como true. De lo contrario, configura is_idn como false.
  6. Reemplaza /\b-\b/ (regex) con el carácter . (punto).
  7. Reemplaza el carácter -- (guion doble) por - (guion).
  8. Si is_idn está configurado como true, agrega el prefijo de punycode xn--.
  9. Opcional: Convierte a Unicode.

Ejemplo de código JavaScript para decodificar el nombre de host de una URL de Google Traductor

function decodeHostname(proxyUrl) {
  const parsedProxyUrl = new URL(proxyUrl);
  const fullHost = parsedProxyUrl.hostname;
  // 1. Extract the domain prefix from the hostname, by removing the
        ".translate.goog" suffix
  let domainPrefix = fullHost.substring(0, fullHost.indexOf('.'));

  // 2. Split _x_tr_enc parameter by "," (comma), save as encodingList
  const encodingList = parsedProxyUrl.searchParams.has('_x_tr_enc') ?
      parsedProxyUrl.searchParams.get('_x_tr_enc').split(',') :
      [];

  // 3. Prepend value of _x_tr_hp parameter to the domain prefix, if it exists
  if (parsedProxyUrl.searchParams.has('_x_tr_hp')) {
    domainPrefix = parsedProxyUrl.searchParams.get('_x_tr_hp') + domainPrefix;
  }

  // 4. Remove '1-' prefix from the output of step 2 if encodingList contains
  //    '1' and the output begins with '1-'.
  if (encodingList.includes('1') && domainPrefix.startsWith('1-')) {
    domainPrefix = domainPrefix.substring(2);
  }

  // 5. Remove '0-' prefix from the output of step 3 if encodingList contains
  //    '0' and the output begins with '0-'.
  //    Set isIdn to true if removed, false otherwise.
  let isIdn = false;
  if (encodingList.includes('0') && domainPrefix.startsWith('0-')) {
    isIdn = true;
    domainPrefix = domainPrefix.substring(2);
  }

  // 6. Replace /\b-\b/ (regex) with '.' (dot) character.
  // 7. Replace '--' (double hyphen) with '-' (hyphen).
  let decodedSegment =
      domainPrefix.replaceAll(/\b-\b/g, '.').replaceAll('--', '-');

  // 8. If isIdn equals true, add the punycode prefix 'xn--'.
  if (isIdn) {
    decodedSegment = 'xn--' + decodedSegment;
  }
  return decodedSegment;
}

Cómo reconstruir la URL

  1. Usa la URL de la página original y reemplaza el nombre de host por el nombre de host decodificado.
  2. Quita todos los parámetros _x_tr_*.

Cómo probar el código

Puedes crear pruebas de unidades para el código usando la siguiente tabla. Según la proxyUrl, el decodeHostname debe coincidir con el valor esperado.

La siguiente tabla solo se puede usar para probar la decodificación del nombre de host. Deberás asegurarte de que la ruta de acceso, el fragmento y los parámetros originales de la URL se conserven tal como están.

proxyUrl decodeHostname
https://example-com.translate.goog example.com
https://foo-example-com.translate.goog foo.example.com
https://foo--example-com.translate.goog foo-example.com
https://0-57hw060o-com.translate.goog/?_x_tr_enc=0 xn--57hw060o.com (⚡😊.com)
https://1-en--us-example-com/?_x_tr_enc=1 en-us.example.com
https://0-en----w45as309w-com.translate.goog/?_x_tr_enc=0 xn--en--w45as309w.com (en-⚡😊.com)
https://1-0-----16pw588q-com.translate.goog/?_x_tr_enc=0,1 xn----16pw588q.com (⚡-😊.com)
https://lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch-co-uk.translate.goog/?_x_tr_hp=l llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch.co.uk
https://lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch-co-uk.translate.goog/?_x_tr_hp=www-l www.llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch.co.uk
https://a--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-com.translate.goog/?_x_tr_hp=a--xn--xn--xn--xn--xn--------------------------a a-xn-xn-xn-xn-xn-------------aa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com
https://g5h3969ntadg44juhyah3c9aza87iiar4i410avdl8d3f1fuq3nz05dg5b-com.translate.goog/?_x_tr_enc=0&_x_tr_hp=0- xn--g5h3969ntadg44juhyah3c9aza87iiar4i410avdl8d3f1fuq3nz05dg5b.com (💖🌲😊💞🤷‍♂️💗🌹😍🌸🌺😂😩😉😒😘💕🐶🐱🐭🐹🐰🐻🦊🐇😺.com)