# B · Canonicalisation et doublons

> Source: https://seorunbook.com/playbook/b-canonicalization-and-duplicates/
> SEO Run Book — 410 SEO actions, free to read
> Last built: 2026-09-15

Le même contenu accessible à quatre URLs divise ses propres signaux en quatre. Ces actions désignent une URL comme la réponse et font pointer toutes les autres variantes vers elle : slash final, paramètres, protocole, www, pagination, syndication.

**Pourquoi ce module existe.** Sur la plupart des sites, les gains de position les moins chers sont ici : le travail est déjà fait, il ne reste qu’à le consolider.

12 actions, numérotées 21 à 32.

### 21. Ajouter sur chaque page une balise rel="canonical" absolue et auto-référente

**Comment.** Ajoutez cette balise dans le <head> de chaque page indexable : <link rel="canonical" href="https://votresite.com/cette-page"> Le href doit être une URL absolue, pas relative. · Sur la plupart des CMS, c’est une ligne de configuration : WordPress : Yoast ou Rank Math l’ajoutent automatiquement. Vérifiez sur quelques pages. · Next.js : utilisez metadata.alternates.canonical dans la page ou le layout. · Astro : utilisez Astro.site plus votre slug. · · Pour les pages dynamiques, générez la canonical depuis l’URL de la requête. Exemple avec Express : app.use((req, res, next) => { res.locals.canonical = `${req.protocol}://${req.get('host')}${req.originalUrl.split('?')[0]}`; next(); }); · Vérification : affichez le source de 10 pages au hasard. Chacune doit avoir exactement une canonical, pointant vers elle-même.

**À éviter.** Faire pointer la canonical vers une autre URL que la page elle-même (si c’est vraiment voulu, c’est une autre action) · Utiliser une URL relative dans le href de la canonical (elle doit être absolue) · Avoir plusieurs balises canonical sur la même page (Google les ignore toutes) · Oublier de canonicaliser les vues paginées (les pages 2, 3, etc. doivent pointer vers la page 1, ou vers une page « tout afficher »)

### 22. Faire pointer la canonical des doublons inter-domaines ou syndiqués vers l’URL d’origine

**Comment.** Identifiez la relation. La page A sur domaine1.com et la page B sur domaine2.com ont un contenu substantiellement identique. L’originale est domaine1.com/page. · Sur la page domaine2.com/page, ajoutez : <link rel="canonical" href="https://domaine1.com/page"> · Sur la page d’origine domaine1.com/page, la canonical pointe vers elle-même. · Ajoutez au besoin des balises hreflang si les pages servent des marchés ou des régions différentes. La canonical et le hreflang sont des signaux indépendants — ils n’entrent pas en conflit. · Vérifiez avec l’inspection d’URL de la Search Console sur l’URL dupliquée. La « Canonical » doit afficher l’URL d’origine.

**À éviter.** Canonicaliser entre domaines vers une page différente (le doublon doit contenir un contenu substantiellement identique) · Oublier le conflit avec le noindex — si vous posez une canonical inter-domaines, ne mettez PAS aussi un noindex sur le doublon (Google y verra une contradiction) · Utiliser une redirection 301 au lieu d’une canonical alors que vous voulez garder les deux URLs accessibles (301 quand les visiteurs doivent atterrir sur l’originale, canonical quand le doublon doit rester accessible tout en consolidant les signaux)

### 23. Faire en sorte que canonical, hreflang, sitemap et liens internes emploient EXACTEMENT la même chaîne d’URL (protocole, slash, casse)

**Comment.** Fixez UNE forme d’URL et écrivez-la : protocole https, hôte avec ou sans www, slash final ou non, minuscules. · Générez canonical, hreflang, sitemap et liens internes depuis la même fonction (par exemple une fonction url_for() unique dans vos gabarits) plutôt que de les écrire à la main. · Recherchez les écarts : crawlez le site, exportez les canonical, les href hreflang et les <loc> du sitemap, et comparez-les chaîne par chaîne aux URLs finales (après redirection).

**À éviter.** Une canonical en https://exemple.com/page/ et un sitemap en https://www.exemple.com/page : deux signaux qui se contredisent · Des liens internes vers http:// qui passent par une redirection à chaque clic · Des hreflang écrits en relatif ou avec une casse différente de la canonical

### 24. Consolider par des 301 les variantes exemple.com/, /index.html, avec et sans slash final, et en majuscules

**Comment.** Choisissez la forme canonique : avec ou sans slash final, sans /index.html, en minuscules. · Au serveur, redirigez en 301 toutes les autres formes vers elle, en un seul saut. Apache : RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L] ; Nginx : rewrite ^(.*)/index\.html$ $1/ permanent; · Pour la casse, redirigez les URLs contenant des majuscules vers leur version en minuscules (RewriteMap tolower sous Apache, ou un middleware). · Mettez à jour les liens internes pour qu’ils visent directement la forme canonique.

**À éviter.** Répondre 200 sur /page et sur /page/ avec le même contenu (deux URLs indexables) · Rediriger en 302 au lieu de 301 · Enchaîner deux redirections (http → https → slash final) au lieu d’une seule

### 25. Désindexer la valeur maigre des corps de pagination ?page=2 et suivants : les garder indexables mais avec un contenu unique et une canonical vers elles-mêmes (pas vers la page 1)

**Comment.** Laissez les pages ?page=2 et suivantes indexables, avec une canonical vers elles-mêmes (pas vers la page 1, qui dirait à Google que leur contenu n’existe pas). · Rendez chaque page de pagination distincte : title et H1 suffixés « — page 2 », liste d’articles différente, pas de chapeau recopié de la page 1. · Retirez de ces pages le texte d’introduction long de la page 1 : il ne doit exister qu’une fois. · Gardez des liens <a href> simples entre les pages (précédent, suivant, numéros), explorables sans JavaScript.

**À éviter.** Canonical de toutes les pages de pagination vers la page 1 : les articles profonds perdent leur chemin de crawl · Mettre les pages 2+ en noindex, follow : à terme Google finit par ne plus suivre leurs liens · Répéter le même title et la même description sur toutes les pages

### 26. Paramétrer les URLs de tri et de filtre avec un noindex ou un blocage robots ; garder une seule canonical propre par produit ou catégorie

**Comment.** Listez les paramètres de tri et de filtre (?sort=, ?order=, ?color=, ?price_min=) et classez-les : ceux qui créent une page qu’on recherche (couleur d’un produit très demandée) et ceux qui ne font que réordonner. · Pour les seconds, posez une canonical vers l’URL sans paramètre et, si le volume est énorme, bloquez-les dans robots.txt (Disallow: /*?sort=). · Ne combinez pas canonical et Disallow sur les mêmes URLs : une URL bloquée n’est jamais lue, sa canonical non plus. · Pour les filtres qui méritent d’être indexés, créez une URL propre (/chaussures/rouges/) avec son propre contenu.

**À éviter.** Bloquer dans robots.txt des URLs déjà indexées : elles restent dans l’index, sans pouvoir être désindexées · Laisser des milliers de combinaisons de filtres explorables : le crawl s’épuise sur des doublons · Canonical vers une page catégorie qui ne contient pas les produits filtrés

### 27. Fusionner les pages quasi dupliquées (même intention, moins de 20 % de contenu propre) en une seule URL plus forte, et rediriger le reste en 301

**Comment.** Repérez les quasi-doublons : même requête visée, contenu à plus de 80 % identique (Screaming Frog → Content → Near Duplicates, seuil 90 %). · Pour chaque groupe, gardez l’URL qui a le plus de trafic et de liens entrants ; intégrez-y ce que les autres avaient d’unique. · Redirigez les autres en 301 vers elle et mettez à jour les liens internes. · Retirez les URLs redirigées du sitemap.

**À éviter.** Fusionner des pages qui répondent à des intentions différentes (un guide et une page produit) · Rediriger vers la page d’accueil au lieu de la page fusionnée · Supprimer le contenu unique des pages absorbées au lieu de le reprendre

### 28. Supprimer les pages qui ne sont que du gabarit et que Google regroupe comme doublons (fuite : clustering IndexingDupsLocalized)

**Comment.** Trouvez les pages dont le contenu propre est minime par rapport au gabarit : pages de tags à un article, fiches vides, pages de ville générées avec seulement le nom changé. · Mesurez-les : texte principal (hors navigation et pied de page) sous ~100 mots, ou identique à d’autres pages hormis un mot. · Pour chacune : enrichissez-la d’un contenu réellement propre, fusionnez-la avec une page proche, ou retirez-la (404/410 ou noindex) et enlevez les liens vers elle.

**À éviter.** Générer une page par ville ou par tag en ne changeant qu’un nom · Garder des centaines de pages vides « au cas où » elles rankeraient · Mettre ces pages en noindex tout en les laissant dans le sitemap

### 29. Donner à chaque page un <title> et une meta description uniques (les titles dupliqués déclenchent le regroupement en doublons)

**Comment.** Exportez tous les titles et meta descriptions (Screaming Frog → Page Titles → Duplicate ; Meta Description → Duplicate). · Réécrivez chaque doublon pour qu’il décrive ce qui distingue la page : produit précis, ville, angle, numéro de page. · Pour les gabarits (catégories, pagination, fiches), construisez le title à partir des champs propres à la page plutôt qu’un texte fixe. · Laissez une meta description vide plutôt que dupliquée si vous ne pouvez pas en écrire une propre : Google en génère une depuis le contenu.

**À éviter.** Le même title « Accueil | Marque » sur plusieurs pages · Des titles qui ne diffèrent que par la marque · Une description par défaut du CMS copiée sur toutes les pages

### 30. Fixer un domaine préféré et imposer la canonical en HTTPS ; rediriger HTTP vers HTTPS sur tout le site

**Comment.** Installez un certificat valide couvrant l’apex et le www (Let’s Encrypt est gratuit). · Choisissez l’hôte préféré (avec ou sans www) et redirigez en 301, en un seul saut, les trois autres combinaisons (http, http+www, https+autre hôte). · Ajoutez l’en-tête Strict-Transport-Security: max-age=31536000 une fois le HTTPS stable. · Mettez canonical, sitemap et liens internes en https sur l’hôte préféré.

**À éviter.** Des redirections en chaîne http://www → https://www → https:// · Des ressources (images, scripts) encore chargées en http : contenu mixte bloqué · Oublier le www dans le certificat : erreur de sécurité sur la moitié des liens entrants

### 31. Traiter les paramètres UTM et de tracking avec une canonical vers l’URL propre

**Comment.** Ajoutez sur chaque page une canonical absolue vers l’URL sans paramètres de tracking (utm_*, gclid, fbclid). · Construisez la canonical côté serveur à partir du chemin, jamais en recopiant l’URL demandée. · Ne mettez jamais de liens internes avec des UTM : ils écrasent la source réelle dans l’analytique et créent des URLs explorables. · Si les UTM sont déjà indexées, laissez la canonical agir ; ne les bloquez pas dans robots.txt.

**À éviter.** Une canonical qui recopie l’URL avec ses paramètres · Mettre des UTM sur les liens du menu ou du pied de page · Bloquer ?utm_ dans robots.txt : Google ne voit plus la canonical

### 32. Localiser correctement les doublons : entre variantes régionales d’une même langue, c’est le hreflang qu’il faut, pas la canonical

**Comment.** Pour des variantes d’une même langue par pays (fr-FR, fr-BE, fr-CA), gardez une canonical vers elle-même sur chaque version. · Reliez-les par hreflang : chaque page liste toutes les variantes, y compris elle-même, plus un x-default. · Différenciez réellement les versions : devise, prix, livraison, mentions locales, numéros de téléphone. · Vérifiez que les liens hreflang sont réciproques : si A cite B, B doit citer A.

**À éviter.** Canonical de fr-BE vers fr-FR : la version belge disparaît de l’index belge · hreflang non réciproque : Google l’ignore · Des codes invalides (fr-UK au lieu de en-GB, ou « be » au lieu de « fr-BE »)

