Être recontacté

Servir un blog depuis un CDN externe sans perdre le SEO

Mis à jour le 19 août 2026 · 9 min de lecture · Intention : informationnelle · Indexation

Héberger le blog ailleurs que le site principal est une décision d'infrastructure courante. Elle devient une décision SEO au moment où l'on choisit comment les visiteurs et les crawlers y accèdent : sous-domaine, sous-répertoire, ou sous-répertoire servi par un proxy.

Distribution d'un blog via un CDN externe
Distribution d'un blog via un CDN externe

Trois configurations, trois profils de risque

ConfigurationURL vue par GoogleTransmission d'autoritéComplexité
Sous-domaineblog.exemple.comPartielle — hôte distinctFaible
Sous-répertoire natifexemple.com/blog/ComplèteÉlevée — même application
Sous-répertoire via rewriteexemple.com/blog/ComplèteMoyenne

La troisième ligne est le meilleur compromis : les URL restent sur le domaine principal — donc dans le même périmètre d'autorité — tandis que l'application qui rend les pages est entièrement découplée.

Le point critique : ce doit être un rewrite, pas une redirection. Une redirection 301 renvoie le visiteur sur l'autre hôte et l'URL change ; un rewrite sert le contenu distant sous l'URL d'origine, de façon transparente.

La chaîne complète d'une requête

Googlebot
  → GET https://client.com/blog/mon-article
  → rewrite au niveau de l'hébergeur du domaine client
  → GET https://cdn.exemple.app/blog/mon-article
       en-tête ajouté : x-forwarded-host: client.com
  → l'application SSR lit x-forwarded-host
  → elle génère canonical = https://client.com/blog/mon-article
  → HTML rendu côté serveur, renvoyé sous l'URL d'origine

Tout repose sur la troisième étape. Si l'application ignore x-forwarded-host et se fie à l'en-tête host, elle produit un canonical vers le CDN. Google indexe alors le CDN et le domaine client ne reçoit rien.

Résoudre le domaine dans le bon ordre

domaine = x-forwarded-host
       || x-original-host
       || parametre ?domain=
       || host

domaine = retirer_www(retirer_port(minuscules(domaine)))

L'ordre importe : la valeur la plus fiable en tête, le repli le plus générique en fin. La normalisation finale évite de traiter www.client.com, client.com:443 et Client.com comme trois domaines différents — source classique de canonicals éclatés, comme décrit dans canonical et duplicate content.

Les six vérifications avant mise en production

  1. Le HTML est-il rendu côté serveur ? Vérifier le code source brut, pas l'inspecteur du navigateur qui affiche le DOM après exécution du JavaScript.
  2. Le canonical pointe-t-il vers le domaine client ? C'est la vérification qui invalide le plus de configurations.
  3. Le sitemap est-il servi sous le domaine client ? Un sitemap listant des URL d'un autre hôte est ignoré pour ces URL.
  4. Le robots.txt du CDN bloque-t-il l'indexation directe ? Sinon les deux versions coexistent en index.
  5. Les codes de statut sont-ils propagés ? Une page inexistante doit renvoyer un 404 réel, pas une page d'erreur en 200.
  6. Les liens internes sont-ils relatifs ? Un lien absolu vers le CDN fait sortir le crawler du domaine client.

Mise en cache : le paramètre qui change tout à l'échelle

Sur un blog dont le contenu bouge peu, une politique de cache agressive au niveau du CDN allège la charge et stabilise les temps de réponse — ce qui agit directement sur le budget d'exploration.

Cache-Control: public, s-maxage=3600, stale-while-revalidate=86400

La directive stale-while-revalidate autorise le CDN à servir immédiatement une version légèrement périmée tout en la rafraîchissant en arrière-plan. Pour un crawler, cela signifie une réponse rapide et constante, ce qui est exactement le signal recherché — voir budget de crawl.

Le cas multi-domaines

Une même application peut servir plusieurs domaines clients, à condition que trois éléments soient dérivés du domaine résolu et non codés en dur : le canonical, l'URL du sitemap, et le filtrage des articles renvoyés. Une valeur codée en dur à l'un de ces trois endroits fait fuiter le contenu d'un client sur le domaine d'un autre — un incident dont la correction implique des désindexations manuelles.

Questions fréquentes

Sous-domaine ou sous-répertoire pour un blog ?

Le sous-répertoire reste préférable : les URL appartiennent au même hôte que le site principal, ce qui simplifie la consolidation des signaux. Un rewrite permet de l'obtenir sans fusionner les applications.

Un rewrite est-il vu comme du cloaking ?

Non, tant que le contenu servi est identique pour les utilisateurs et pour les robots. Le cloaking consiste à servir un contenu différent selon le visiteur, ce qui n'est pas le cas ici.

Que se passe-t-il si le canonical pointe vers le CDN ?

Google indexe l'URL du CDN et non celle du domaine client. Tout le trafic organique se retrouve alors sur un domaine technique, sans bénéfice pour le site principal.