Habilitar funciones de traducción de la Búsqueda de Google en tu red publicitaria

La Búsqueda de Google ofrece varias funciones de traducción que permiten a los usuarios acceder a contenido traducido. Si gestionas una red publicitaria y tus anuncios no funcionan correctamente en páginas web traducidas, debes seguir los pasos indicados en esta guía para comprobar que tus anuncios se renderizan o se atribuyen correctamente.

Nuestro enfoque

Cuando los usuarios hacen clic en un resultado de búsqueda proporcionado por el Traductor de Google para acceder a él, Google obtiene la página de su editor, reescribe su URL de origen y traduce el contenido de su página web.

Sustituir la URL de origen con la URL del Traductor de Google

Si la red publicitaria que tienes se basa en la URL de origen del editor, debes sustituirla con la URL del Traductor de Google para que tus anuncios sigan mostrándose correctamente. Sigue estos pasos para decodificar el nombre de host del editor:

  1. Quita el sufijo .translate.goog para extraer el prefijo del dominio del nombre de host.
  2. Corta el parámetro _x_tr_enc por el carácter , (una coma) y guárdalo con el nombre encoding_list.
  3. Introduce el valor del parámetro _x_tr_hp delante del prefijo del dominio, si hay alguno.
  4. Si encoding_list contiene 1 y el resultado empieza por 1-, quita el prefijo 1- del resultado del paso 2.
  5. Si encoding_list contiene 0 y el resultado empieza por 0-, quita el prefijo 0- del resultado del paso 3. Si has quitado el prefijo, asigna el valor true a is_idn. De lo contrario, asigna el valor false a is_idn.
  6. Sustituye /\b-\b/ (regex) por el carácter . (punto).
  7. Sustituye el carácter -- (guion doble) por el carácter - (guion corto).
  8. Si is_idn tiene el valor true, añade el prefijo Punycode xn--.
  9. (Opcional) Convierte el nombre de host a Unicode.

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

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;
}

Reconstruir la URL

  1. En la URL de origen de la página, sustituye el nombre de host por el nombre de host decodificado.
  2. Quita todos los parámetros _x_tr_*.

Probar tu código

Con la siguiente tabla puedes hacer pruebas unitarias de tu código. Para ello, cambia el proxyUrl por el valor correspondiente de decodeHostname.

La siguiente tabla solo se puede usar para probar la decodificación del nombre de host. Recuerda no modificar la ruta, el fragmento ni los parámetros originales de la URL.

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=1 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)