Cómo permitir que tu red de publicidad se integre con las funciones de la Búsqueda de Google relacionadas con la traducción
La Búsqueda de Google ofrece varias funciones de traducción que permiten que los usuarios accedan a contenido traducido. Si tienes una red de publicidad activa y tus anuncios no funcionan correctamente en las páginas web traducidas, tendrás que seguir los pasos de esta guía para asegurarte de que tus anuncios se rendericen o atribuyan correctamente.
Nuestro enfoque
Cuando los usuarios acceden al contenido traducido que proporciona Google Traductor desde los resultados de la búsqueda, Google recupera la página del publicador, reescribe la URL de origen y traduce la página web después de que el usuario hace clic en el resultado traducido.
Cómo convertir la URL de Google Traductor en la URL original
Si tienes una red de publicidad activa que depende de la URL de origen del publicador, deberás convertir la URL de Google Traductor para asegurarte de que tus anuncios se muestren correctamente. Sigue estos pasos para decodificar el nombre de host del publicador:
- Extrae el prefijo de dominio del nombre de host. Para ello, quita el sufijo
.translate.goog
. - Divide el parámetro
_x_tr_enc
por el carácter,
(coma) y guárdalo comoencoding_list
. - Si existe, antepón el valor del parámetro
_x_tr_hp
al prefijo de dominio. - Si
encoding_list
contiene1
y el resultado comienza con1-
, quita el prefijo1-
del resultado del paso 2. - Si
encoding_list
contiene0
y el resultado comienza con0-
, quita el prefijo0-
del resultado del paso 3. Si quitaste el prefijo, configurais_idn
comotrue
. De lo contrario, configurais_idn
comofalse
. - Reemplaza
/\b-\b/
(regex) con el carácter.
(punto). - Reemplaza el carácter
--
(guion doble) por-
(guion). - Si
is_idn
está configurado comotrue
, agrega el prefijo de punycodexn--
. - Opcional: Convierte a Unicode.
Ejemplo de código JavaScript para decodificar el nombre de host de una URL de Google Traductor
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; }
Cómo reconstruir la URL
- Usa la URL de la página original y reemplaza el nombre de host por el nombre de host decodificado.
- Quita todos los parámetros
_x_tr_*
.
Cómo probar el código
Puedes crear pruebas de unidades para el código usando la siguiente tabla. Según la proxyUrl
, el decodeHostname
debe coincidir con el valor esperado.
La siguiente tabla solo se puede usar para probar la decodificación del nombre de host. Deberás asegurarte de que la ruta de acceso, el fragmento y los parámetros originales de la URL se conserven tal como están.
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)
|