Permitir que sua rede de publicidade use recursos de tradução da Pesquisa Google

A Pesquisa Google oferece vários recursos de tradução que permitem aos usuários acessar o conteúdo traduzido. Caso você administre uma rede de publicidade e seus anúncios não estejam funcionando conforme o esperado em páginas da Web traduzidas, siga as etapas deste guia para garantir que eles sejam renderizados ou atribuídos corretamente.

Nossa abordagem

Depois que os usuários acessam o conteúdo traduzido fornecido pelo Google Tradutor clicando no resultado da pesquisa, o Google recupera a página do editor, reescreve o URL de origem e traduz a página da Web.

Converter o URL do Google Tradutor no URL original

Caso sua rede de publicidade dependa do URL de origem do editor, será preciso converter o URL do Google Tradutor para que seus anúncios funcionem corretamente. Siga estas etapas para decodificar o nome do host do editor:

  1. Extraia o prefixo de domínio do nome do host removendo o sufixo .translate.goog.
  2. Divida o parâmetro _x_tr_enc pelo caractere , (vírgula) e salve-o como encoding_list.
  3. Inclua o valor do parâmetro _x_tr_hp no prefixo do domínio (se houver).
  4. Se encoding_list contiver 1 e a saída começar com 1-, remova o prefixo 1- da saída da etapa 2.
  5. Se encoding_list contiver 0 e a saída começar com 0-, remova o prefixo 0- da saída da etapa 3. Se tiver removido o prefixo, defina is_idn como true. Caso contrário, defina is_idn como false.
  6. Substitua /\b-\b/ (regex) pelo caractere . (ponto).
  7. Substitua o caractere -- (hífen duplo) pelo caractere - (hífen).
  8. Se is_idn estiver definido como true, adicione o prefixo punycode xn--.
  9. Opcional: converta para Unicode.

Exemplo de código JavaScript para decodificar o nome do host de um URL do Google Tradutor

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 o URL

  1. No URL da página original, substitua o nome do host pela versão decodificada.
  2. Remova todos os parâmetros _x_tr_*.

Testar o código

É possível criar testes de unidade para seu código usando a tabela a seguir. Com um proxyUrl, o decodeHostname precisa ser igual ao valor esperado.

A tabela a seguir só pode ser usada para testar a decodificação do nome do host. O caminho, o fragmento e os parâmetros originais do URL precisam ficar como estão.

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)