Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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 :
- Extrayez le préfixe du domaine du nom d'hôte en supprimant le suffixe
.translate.goog
.
- Divisez le paramètre
_x_tr_enc
à l'aide du caractère ,
(virgule), puis enregistrez-le sous le nom encoding_list
.
- Ajoutez la valeur du paramètre
_x_tr_hp
avant le préfixe du domaine, le cas échéant.
- 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.
- 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
.
- Remplacez
/\b-\b/
(expression régulière) par le caractère .
(point).
- Remplacez le caractère
--
(double trait d'union) par le caractère -
(trait d'union).
- Si
is_idn
est défini sur true
, ajoutez le préfixe punycode xn--
.
- 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
- Remplacez le nom d'hôte par le nom d'hôte décodé dans l'URL de la page d'origine.
- 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)
|
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/08/04 (UTC).
[null,null,["Dernière mise à jour le 2025/08/04 (UTC)."],[[["\u003cp\u003eAd networks need to adjust how they handle Google Translate URLs to ensure ads function correctly on translated pages.\u003c/p\u003e\n"],["\u003cp\u003eA process is outlined to decode Google Translate URLs back to the original publisher's URL, involving extracting and manipulating URL components.\u003c/p\u003e\n"],["\u003cp\u003eProvided JavaScript code offers a solution to decode the hostname from Google Translate URLs.\u003c/p\u003e\n"],["\u003cp\u003eReconstructing the full original URL involves replacing the decoded hostname and removing Google Translate-specific parameters.\u003c/p\u003e\n"],["\u003cp\u003eA table with sample URLs and expected decoded hostnames aids in testing the implementation.\u003c/p\u003e\n"]]],["Ad networks must decode Google Translate URLs to ensure ads function on translated pages. This involves extracting the domain prefix, splitting the `_x_tr_enc` parameter, prepending the `_x_tr_hp` parameter, conditionally removing prefixes based on `encoding_list`, replacing hyphens, and adding a punycode prefix if `is_idn` is true. Finally, reconstruct the original URL by replacing the hostname with the decoded one and removing `_x_tr_*` parameters. Sample JavaScript code and test cases are provided.\n"],null,["# Ad Networks & Translation Search Features | Google Search Central\n\nEnabling your ad network to work with translation-related Google Search features\n================================================================================\n\n\nGoogle Search offers several [translation-related features](/search/docs/appearance/translated-results)\nthat enable users to access translated content. If you run an ad network and your ads aren't\nworking properly on translated web pages, you'll need to follow the steps in this guide to\nmake sure your ads render or attribute correctly.\n\nOur approach\n------------\n\n\nWhen users access translated content provided by [Google\nTranslate](https://translate.google.com/about/) from within search results, Google retrieves the page from the publisher, rewrites\nthe source URL, and translates the web page after the user clicks the translated result.\n\nConvert the Google Translate URL to the original URL\n----------------------------------------------------\n\n\nIf you run an ad network that relies on the publisher's source URL, you'll need to convert the\nGoogle Translate URL to make sure your ads are working properly. Follow these steps to decode the publisher's hostname:\n\n1. Extract the domain prefix from the hostname, by removing the `.translate.goog` suffix.\n2. Split the `_x_tr_enc` parameter by the `,` (comma) character and save it as `encoding_list`.\n3. Prepend the value of the `_x_tr_hp` parameter to the domain prefix, if it exists.\n4. If `encoding_list` contains `1` and the output begins with `1-`, remove the `1-` prefix from the output of step 2.\n5. If `encoding_list` contains `0` and the output begins with `0-`, remove the `0-` prefix from the output of step 3. If you removed the prefix, set `is_idn` to `true`. Otherwise, set `is_idn` to `false`.\n6. Replace `/\\b-\\b/` (regex) with the `.` (dot) character.\n7. Replace the `--` (double hyphen) character with the `-` (hyphen) character.\n8. If `is_idn` is set to `true`, add the punycode prefix `xn--`.\n9. **Optional**: Convert to Unicode.\n\n### Sample JavaScript code for decoding the hostname from a Google Translate URL\n\n```gdscript\nfunction decodeHostname(proxyUrl) {\n const parsedProxyUrl = new URL(proxyUrl);\n const fullHost = parsedProxyUrl.hostname;\n // 1. Extract the domain prefix from the hostname, by removing the\n \".translate.goog\" suffix\n let domainPrefix = fullHost.substring(0, fullHost.indexOf('.'));\n\n // 2. Split _x_tr_enc parameter by \",\" (comma), save as encodingList\n const encodingList = parsedProxyUrl.searchParams.has('_x_tr_enc') ?\n parsedProxyUrl.searchParams.get('_x_tr_enc').split(',') :\n [];\n\n // 3. Prepend value of _x_tr_hp parameter to the domain prefix, if it exists\n if (parsedProxyUrl.searchParams.has('_x_tr_hp')) {\n domainPrefix = parsedProxyUrl.searchParams.get('_x_tr_hp') + domainPrefix;\n }\n\n // 4. Remove '1-' prefix from the output of step 2 if encodingList contains\n // '1' and the output begins with '1-'.\n if (encodingList.includes('1') && domainPrefix.startsWith('1-')) {\n domainPrefix = domainPrefix.substring(2);\n }\n\n // 5. Remove '0-' prefix from the output of step 3 if encodingList contains\n // '0' and the output begins with '0-'.\n // Set isIdn to true if removed, false otherwise.\n let isIdn = false;\n if (encodingList.includes('0') && domainPrefix.startsWith('0-')) {\n isIdn = true;\n domainPrefix = domainPrefix.substring(2);\n }\n\n // 6. Replace /\\b-\\b/ (regex) with '.' (dot) character.\n // 7. Replace '--' (double hyphen) with '-' (hyphen).\n let decodedSegment =\n domainPrefix.replaceAll(/\\b-\\b/g, '.').replaceAll('--', '-');\n\n // 8. If isIdn equals true, add the punycode prefix 'xn--'.\n if (isIdn) {\n decodedSegment = 'xn--' + decodedSegment;\n }\n return decodedSegment;\n}\n```\n\nReconstruct the URL\n-------------------\n\n1. Using the original page URL, replace the hostname with the decoded hostname.\n2. Remove all `_x_tr_*` parameters.\n\nTest your code\n--------------\n\n\nYou can create unit tests for your code using the following table. Given a `proxyUrl`,\nthe `decodeHostname` must match the expected value.\n\n\nThe following table can only be used to test the hostname decoding. You'll need to ensure that\nthe path, fragment, and original parameters of the URL are preserved as is.\n\n| `proxyUrl` | `decodeHostname` |\n|----------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|\n| `https://example-com.translate.goog` | `example.com` |\n| `https://foo-example-com.translate.goog` | `foo.example.com` |\n| `https://foo--example-com.translate.goog` | `foo-example.com` |\n| `https://0-57hw060o-com.translate.goog/?_x_tr_enc=0` | `xn--57hw060o.com (⚡😊.com)` |\n| `https://1-en--us-example-com/?_x_tr_enc=1` | `en-us.example.com` |\n| `https://0-en----w45as309w-com.translate.goog/?_x_tr_enc=0` | `xn--en--w45as309w.com (en-⚡😊.com)` |\n| `https://1-0-----16pw588q-com.translate.goog/?_x_tr_enc=0,1` | `xn----16pw588q.com (⚡-😊.com)` |\n| `https://lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch-co-uk.translate.goog/?_x_tr_hp=l` | `llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch.co.uk` |\n| `https://lanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch-co-uk.translate.goog/?_x_tr_hp=www-l` | `www.llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch.co.uk` |\n| `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` |\n| `https://g5h3969ntadg44juhyah3c9aza87iiar4i410avdl8d3f1fuq3nz05dg5b-com.translate.goog/?_x_tr_enc=0&_x_tr_hp=0-` | `xn--g5h3969ntadg44juhyah3c9aza87iiar4i410avdl8d3f1fuq3nz05dg5b.com (💖🌲😊💞🤷♂️💗🌹😍🌸🌺😂😩😉😒😘💕🐶🐱🐭🐹🐰🐻🦊🐇😺.com)` |"]]