Appliquer les fonctionnalités de traduction de la recherche Google à votre réseau publicitaire

La recherche Google propose plusieurs fonctionnalités de traduction qui permettent aux utilisateurs d'accéder au contenu traduit. Si vous gérez un réseau publicitaire et que vos annonces ne fonctionnent pas comme prévu sur les pages Web traduites, vous devrez suivre la procédure décrite dans ce guide pour vous assurer que vos annonces s'affichent ou sont attribuées correctement.

Notre approche

Lorsqu'un utilisateur accède à un contenu traduit fourni par Google Traduction à partir des résultats de recherche, Google extrait la page de l'éditeur, réécrit l'URL source et traduit la page Web lorsque l'utilisateur clique sur le résultat traduit.

Convertir l'URL Google Traduction en URL d'origine

Si vous gérez un réseau publicitaire qui dépend de l'URL source de l'éditeur, vous devrez convertir l'URL Google Traduction pour vous assurer que vos annonces fonctionnent correctement. Pour décoder le nom d'hôte de l'éditeur, procédez comme suit :

  1. Extrayez le préfixe du domaine du nom d'hôte en supprimant le suffixe .translate.goog.
  2. Divisez le paramètre _x_tr_enc à l'aide du caractère , (virgule), puis enregistrez-le sous le nom encoding_list.
  3. Ajoutez la valeur du paramètre _x_tr_hp avant le préfixe du domaine, le cas échéant.
  4. Si encoding_list contient 1 et que le résultat commence par 1-, supprimez le préfixe 1- du résultat de l'étape 2.
  5. Si encoding_list contient 0 et que le résultat commence par 0-, supprimez le préfixe 0- du résultat de l'étape 3. Si vous avez supprimé le préfixe, définissez is_idn sur true. Sinon, définissez is_idn sur false.
  6. Remplacez /\b-\b/ (expression régulière) par le caractère . (point).
  7. Remplacez le caractère -- (double trait d'union) par le caractère - (trait d'union).
  8. Si is_idn est défini sur true, ajoutez le préfixe punycode xn--.
  9. Facultatif : convertissez le contenu au format Unicode.

Exemple de code JavaScript permettant de décoder le nom d'hôte depuis une URL Google Traduction

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

Réécrire l'URL

  1. Remplacez le nom d'hôte par le nom d'hôte décodé dans l'URL de la page d'origine.
  2. Supprimez tous les paramètres _x_tr_*.

Tester votre code

Vous pouvez créer des tests unitaires pour votre code à l'aide du tableau suivant. Pour une valeur proxyUrl donnée, decodeHostname doit correspondre à la valeur attendue.

Le tableau suivant ne peut être utilisé que pour tester le décodage du nom d'hôte. Assurez-vous que le chemin d'accès, le fragment et les paramètres d'origine de l'URL sont conservés tels quels.

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)