Werbenetzwerk für Übersetzungsfunktionen in der Google Suche aktivieren

Die Google Suche bietet mehrere Übersetzungsfunktionen, mit denen Nutzer auf übersetzte Inhalte zugreifen können. Wenn du ein Werbenetzwerk betreibst und deine Werbeanzeigen auf übersetzten Webseiten nicht richtig funktionieren, solltest du der Anleitung in diesem Leitfaden folgen, damit deine Werbeanzeigen richtig gerendert oder zugeordnet werden.

Unser Ansatz

Wenn Nutzer in den Suchergebnissen auf Inhalte zugreifen, die von Google Übersetzer übersetzt wurden, ruft Google, die Seite vom Publisher ab, schreibt die Quell-URL um und übersetzt die Webseite, nachdem der Nutzer auf das übersetzte Ergebnis geklickt hat.

Google Übersetzer-URL in Original-URL konvertieren

Wenn du ein Werbenetzwerk betreibst, das auf der Quell-URL des Publishers basiert, musst du die Google Übersetzer-URL konvertieren, um sicherzustellen, dass deine Werbeanzeigen richtig funktionieren. So decodierst du den Hostnamen des Publishers:

  1. Extrahiere das Domainpräfix aus dem Hostnamen, indem du das Suffix .translate.goog entfernst.
  2. Teile den Parameter _x_tr_enc durch das Zeichen , (Komma) auf und speichere ihn als encoding_list.
  3. Stelle dem Wert des Parameters _x_tr_hp das Domainpräfix voran, falls vorhanden.
  4. Wenn encoding_list 1 enthält und die Ausgabe mit 1- beginnt, entferne das Präfix 1- von der Ausgabe von Schritt 2.
  5. Wenn encoding_list 0 enthält und die Ausgabe mit 0- beginnt, entferne das Präfix 0- von der Ausgabe von Schritt 3. Wenn du das Präfix entfernt hast, setze is_idn auf true. Andernfalls setzt du is_idn auf false.
  6. Ersetze /\b-\b/ (Regex) durch das Zeichen . (Punkt).
  7. Ersetze das Zeichen -- (doppelter Bindestrich) durch das Zeichen - (Bindestrich).
  8. Wenn is_idn auf true gesetzt ist, füge das Punycode-Präfix xn-- hinzu.
  9. Optional: Konvertiere den Hostnamen in Unicode.

JavaScript-Beispielcode zum Decodieren des Hostnamens aus einer Google Übersetzer-URL

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

URL rekonstruieren

  1. Ersetze den Hostnamen mithilfe der ursprünglichen Seiten-URL durch den decodierten Hostnamen.
  2. Entferne alle _x_tr_*-Parameter.

Code testen

Du kannst anhand der folgenden Tabelle Unittests für deinen Code erstellen. Bei proxyUrl muss decodeHostname mit dem erwarteten Wert übereinstimmen.

Die folgende Tabelle kann nur zum Testen der Decodierung des Hostnamens verwendet werden. Du musst darauf achten, dass der Pfad, das Fragment und die ursprünglichen Parameter der URL unverändert beibehalten werden.

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)