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:
- Quita el sufijo
.translate.goog
para extraer el prefijo del dominio del nombre de host. - Corta el parámetro
_x_tr_enc
por el carácter,
(una coma) y guárdalo con el nombreencoding_list
. - Introduce el valor del parámetro
_x_tr_hp
delante del prefijo del dominio, si hay alguno. - Si
encoding_list
contiene1
y el resultado empieza por1-
, quita el prefijo1-
del resultado del paso 2. - Si
encoding_list
contiene0
y el resultado empieza por0-
, quita el prefijo0-
del resultado del paso 3. Si has quitado el prefijo, asigna el valortrue
ais_idn
. De lo contrario, asigna el valorfalse
ais_idn
. - Sustituye
/\b-\b/
(regex) por el carácter.
(punto). - Sustituye el carácter
--
(guion doble) por el carácter-
(guion corto). - Si
is_idn
tiene el valortrue
, añade el prefijo Punycodexn--
. - (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
- En la URL de origen de la página, sustituye el nombre de host por el nombre de host decodificado.
- 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=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)
|