Umożliwianie współpracy sieci reklamowej z funkcjami wyszukiwarki Google związanymi z tłumaczeniem

Wyszukiwarka Google ma kilka funkcji związanych z tłumaczeniem, które umożliwiają użytkownikom dostęp do przetłumaczonych treści. Jeśli zarządzasz siecią reklamową i Twoje reklamy nie działają prawidłowo na przetłumaczonych stronach, wykonaj czynności opisane w tym przewodniku, aby reklamy poprawnie się renderowały lub były odpowiednio przypisywane.

Nasze metody

Gdy użytkownik kliknie wynik wyszukiwania przetłumaczony przez Tłumacza Google, Google pobiera stronę wydawcy, zmienia jej źródłowy adres URL i tłumaczy stronę.

Konwertowanie adresu URL Tłumacza Google na oryginalny adres URL

Jeśli zarządzasz siecią reklamową, która wymaga źródłowego adresu URL wydawcy, musisz przekonwertować adres URL Tłumacza Google, żeby Twoje reklamy działały prawidłowo. Aby zdekodować nazwę hosta wydawcy:

  1. Wyodrębnij prefiks domeny z nazwy hosta, usuwając sufiks .translate.goog.
  2. Podziel parametr _x_tr_enc w miejscu, w którym znajduje się znak , (przecinek), i zapisz go jako encoding_list.
  3. Na początku prefiksu domeny dołącz wartość parametru _x_tr_hp (jeśli istnieje).
  4. Jeśli encoding_list zawiera 1, a uzyskana do tej pory nazwa zaczyna się od 1-, usuń prefiks 1- z nazwy uzyskanej w kroku 2.
  5. Jeśli encoding_list zawiera 0, a uzyskana do tej pory nazwa zaczyna się od 0-, usuń prefiks 0- z nazwy uzyskanej w kroku 3. Jeśli prefiks został usunięty, ustaw is_idn na true. W przeciwnym razie ustaw is_idn na false.
  6. Zastąp /\b-\b/ (wyrażenie regularne) kropką (.).
  7. Zastąp podwójny łącznik (--) znakiem -.
  8. Jeśli is_idn ma wartość true, dodaj prefiks xn-- w punycode.
  9. Opcjonalnie: przekonwertuj nazwę na Unicode.

Przykładowy kod JavaScript do dekodowania nazwy hosta z adresu URL Tłumacza 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;
}

Odtwarzanie adresu URL

  1. Zastąp nazwę hosta w oryginalnym adresie URL strony zdekodowaną nazwą hosta.
  2. Usuń wszystkie parametry _x_tr_*.

Testowanie kodu

Za pomocą tabeli poniżej możesz tworzyć testy jednostkowe kodu. decodeHostname musi odpowiadać oczekiwanej wartości dla podanego parametru proxyUrl.

Tabela umożliwia tylko testowanie dekodowania nazwy hosta. Musisz upewnić się, że ścieżka, fragment i oryginalne parametry adresu URL zostaną zachowane.

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)