Dynamic Serving : fonctionnement, risques et audit

Définition du dynamic serving, double rôle de l’en-tête Vary User-Agent, raisons de son obsolescence et différences avec le responsive design et le dynamic rendering.

Première publication : 2 juil. 2026 · Dernière mise à jour : 21 août 2026 · Advanced
Langues

Le dynamic serving permet à une URL unique de renvoyer un HTML et un CSS différents selon le user-agent : une page pour ordinateur, une autre pour mobile. Le serveur doit envoyer l’en-tête Vary: User-Agent afin que les caches et les robots ne servent pas la mauvaise version. Parmi les trois configurations mobiles — responsive, dynamic serving et URL m-dot distinctes — Google recommande le responsive design, car le dynamic serving dépend d’une détection du user-agent sujette aux erreurs et d’en-têtes Vary correctement configurés. Il ne faut pas le confondre avec le dynamic rendering, qui pré-rend le JavaScript pour les robots. En 2026, c’est surtout une configuration historique à supprimer progressivement des sites anciens ou d’entreprise : l’indexation mobile-first a accru les conséquences d’une erreur, tandis que Vary: User-Agent fragmente les caches CDN.

En bref — Dynamic serving = même URL, HTML/CSS différent selon le user-agent, avec détection côté serveur et signalement par l’en-tête de réponse Vary: User-Agent. C’est l’une des trois configurations mobiles, avec le responsive design (recommandé par Google) et les URL distinctes (m-dot). L’en-tête Vary remplit deux fonctions : (1) empêcher les caches de servir la version du mauvais appareil et (2) historiquement, aider Googlebot à découvrir la version mobile. Il a cependant un coût réel : Vary: User-Agent fragmente les clés du cache CDN pour chaque chaîne de user-agent distincte et multiplie la charge à l’origine. La détection est sujette aux erreurs (listes obsolètes, tablettes prises pour des téléphones), et une détection défectueuse ou l’absence de Vary peut présenter à Google une version erronée ou cassée : c’est là que se situe le véritable risque de cloaking. Ne le confondez pas avec le dynamic rendering (pré-rendu du JavaScript pour les robots, notion distincte avec sa propre documentation). En 2026, c’est une configuration historique dont il faut sortir lors d’un audit, pas une architecture à adopter pour un nouveau site.

Evidence for this claim Dynamic serving uses one URL with device-dependent HTML and should send Vary: User-Agent. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile configurations Evidence for this claim Google supports dynamic serving but recommends responsive design because it is easier to implement and maintain. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile-first indexing

Définition précise du dynamic serving

Voici la définition donnée par Google dans ses bonnes pratiques sur l’indexation mobile-first : “Dynamic serving: Uses the same URL regardless of device. This configuration relies on user-agent sniffing and the Vary: user-agent HTTP response header to serve a different version of the HTML to different devices.” (traduction) « Dynamic serving : utilise la même URL quel que soit l’appareil. Cette configuration s’appuie sur la détection du user-agent et sur l’en-tête de réponse HTTP Vary: user-agent pour servir une version différente du HTML selon l’appareil. » L’ancienne page dédiée de Google le formulait encore plus concrètement : “a setup where the server responds with different HTML (and CSS) on the same URL depending on which user agent requests the page (mobile, tablet, or desktop).” (traduction) « une configuration dans laquelle le serveur répond avec un HTML — et un CSS — différent sur la même URL selon le user-agent qui demande la page : mobile, tablette ou ordinateur ».

C’est l’une des trois configurations mobiles. Un tableau en trois lignes permet de les distinguer clairement :

ConfigurationMême URL ?Même HTML ?Signal principal
Responsive designOuiOuiMedia queries CSS (rien côté serveur)
Dynamic servingOuiNon (selon le user-agent)En-tête Vary: User-Agent
URL distinctes (m-dot)NonNonrel=canonical/rel=alternate + Vary

Deux de ces trois configurations dépendent de l’en-tête Vary. Google précise que les URL distinctes, “like dynamic serving, this configuration relies on the user-agent and Vary HTTP headers.” (traduction) « comme le dynamic serving, cette configuration s’appuie sur le user-agent et les en-têtes HTTP Vary ». Seul le responsive design ne comporte aucun élément susceptible de se désynchroniser, ce qui explique précisément pourquoi Google le recommande (voir le guide sur le responsive design et la place de ces trois méthodes dans le hub SEO mobile).

Fonctionnement : détection du user-agent et en-tête Vary

Le serveur examine la chaîne du user-agent entrant — l’identifiant envoyé par chaque client —, détermine s’il s’agit d’un téléphone, d’une tablette ou d’un ordinateur, puis renvoie le HTML correspondant. Comme l’URL est identique pour tout le monde, il doit ensuite annoncer que la réponse varie selon le user-agent. C’est le rôle de l’en-tête Vary: User-Agent. Les anciennes consignes de Google précisent qu’il remplit deux fonctions distinctes, qu’il ne faut pas confondre :

Selon ces consignes, l’en-tête empêche d’abord un cache de renvoyer la version pour ordinateur à un utilisateur mobile, ou l’inverse. Il aide aussi Googlebot à repérer plus rapidement les URL qui proposent un contenu optimisé pour mobile.

La première fonction concerne donc la justesse du cache : un enjeu d’expérience utilisateur et de fiabilité, indépendant des moteurs de recherche. La seconde concerne la découverte lors du crawl. La plupart des glossaires concurrents ne mentionnent que la première, ou mélangent les deux. Dans une vraie réponse HTTP, l’en-tête ressemble à ceci :

HTTP/1.1 200 OK
Content-Type: text/html
Vary: User-Agent
Content-Length: 5710

Si votre serveur envoie déjà un en-tête Vary pour une autre raison, par exemple Accept-Encoding, ajoutez User-Agent à la liste au lieu de remplacer la valeur existante.

Cette distinction mérite d’être explicite : Vary est un mécanisme HTTP ordinaire de gestion du cache, pas une invention SEO. Il indique au cache quels en-têtes de la requête intégrer à sa clé afin de stocker la bonne variante ; il ne détecte pas les appareils et ne comprend rien au SEO. La logique de user-agent du serveur s’en charge séparément. L’utilisation de l’en-tête comme signal de découverte lors du crawl — la deuxième fonction ci-dessus — correspond à la description qu’en fait Google, et non à une exigence du protocole de cache que tous les caches appliqueraient de la même manière. Envoyez-le systématiquement pour une URL donnée, y compris dans les réponses 304 Not Modified et les réponses par défaut ou de repli, faute de quoi le cache peut conserver des métadonnées incohérentes sur ce qu’il stocke.

Le coût oublié par la plupart des guides : la fragmentation du cache CDN

Voici l’aspect que presque toutes les pages bien classées omettent. Vary: User-Agent n’est pas gratuit : il fragmente le cache. Un cache construit ses clés en partie à partir des en-têtes énumérés dans Vary. Avec Vary: User-Agent, il conserve donc une copie distincte pour chaque chaîne de user-agent rencontrée : chaque version de navigateur, chaque version de système d’exploitation et chaque robot. Cela représente des milliers de variantes pour un contenu qui ne possède en réalité que deux ou trois versions. La perte de réutilisation dépend toutefois de la gestion des clés par votre CDN : certains normalisent ou regroupent les chaînes similaires, la plupart ne le font pas. Il n’existe donc pas de baisse universelle du taux de réussite à citer. Tout multiplicateur précis, y compris celui de SiteGround ci-dessous, doit être traité comme l’estimation d’un fournisseur et non comme une garantie pour votre infrastructure.

SiteGround estime que cette fragmentation peut transformer 100 visites identiques en 5 à 30 requêtes dynamiques et multiplier d’autant la consommation de ressources. Ce chiffre décrit son propre système et ne constitue pas une règle universelle. L’effet est particulièrement fort sur les robots : “If such [a] bot starts crawling your site and you have the Vary: User-Agent header, each request it makes to your site would be a dynamic one and will eat up your resources.” (traduction) « Si un tel robot commence à explorer votre site alors que l’en-tête Vary: User-Agent est présent, chacune de ses requêtes sera dynamique et consommera vos ressources. »

Le problème n’est pas nouveau. Dès 2013, Cindy Krum avertissait dans Search Engine Land que certains CDN d’entreprise interprétaient l’en-tête comme un signal indiquant que le contenu “cannot be cached or served from the CDN and must be fetched directly from your server” (traduction) « ne peut pas être mis en cache ni servi depuis le CDN et doit être récupéré directement sur votre serveur », ce qui pouvait “rendering your CDN completely useless” (traduction) « rendre votre CDN totalement inutile » pour les pages en dynamic serving. Ce comportement propre à certains fournisseurs en 2013 a évolué, mais la tension technique demeure : Vary: User-Agent fragmente les clés du cache. C’est une raison majeure du recul de cette méthode, même chez les sites qui ne s’inquiétaient pas du SEO. SiteGround souligne aussi que “most of the sites don’t actually serve different HTML for their mobile versions. It’s the responsive CSS that does all the heavy lifting” (traduction) « la plupart des sites ne servent pas réellement un HTML différent à leur version mobile ; le responsive CSS fait tout le travail ». Beaucoup d’en-têtes Vary: User-Agent observés sont donc de simples vestiges de configuration sur des sites devenus responsives.

Le dynamic serving est-il du cloaking ?

Non, pas en soi. Le risque dépend du résultat et de l’intention, pas de la technique. Détecter un appareil et lui servir un contenu adapté est acceptable. Le danger vient soit (a) d’une erreur de détection ou de l’absence de Vary, qui sert par accident à Googlebot une version erronée ou cassée, soit (b) de la volonté de présenter aux moteurs de recherche un contenu sensiblement différent de celui vu par les internautes. Les anciennes consignes de Google sur le dynamic serving étaient très claires sur ce piège :

Les anciennes consignes demandaient de ne jamais cibler Googlebot lors de la détection. Ses user-agents doivent recevoir la même version que les appareils mobiles auxquels ils déclarent correspondre.

Le parallèle apparaît dans la documentation toujours en ligne de Google sur le dynamic rendering, qui énonce le principe général pour ce cas voisin de rendu JavaScript : “As long as your dynamic rendering produces similar content, Googlebot won’t view dynamic rendering as cloaking,” (traduction) « tant que votre dynamic rendering produit un contenu similaire, Googlebot ne le considérera pas comme du cloaking », alors que “serving completely different content to users and crawlers can be considered cloaking.” (traduction) « servir un contenu complètement différent aux internautes et aux robots peut être considéré comme du cloaking ». Le même raisonnement vaut pour le dynamic serving : un contenu substantiellement identique, adapté à chaque appareil, convient ; une mauvaise configuration qui ressemble à du cloaking constitue le vrai danger.

Dynamic serving et dynamic rendering : ne les confondez pas

C’est la distinction la plus nette que beaucoup de contenus concurrents manquent ; elle mérite donc une séparation franche :

  • Dynamic serving = variation selon l’appareil. Même URL, HTML différent entre mobile et ordinateur. C’est le sujet de cette page. Google a intégré ses consignes au guide sur l’indexation mobile-first.
  • Dynamic rendering = variation du rendu JavaScript pour les robots. Une version prérendue ou rendue côté serveur d’une page très dépendante de JavaScript leur est servie, tandis que les internautes reçoivent la version rendue côté client. Cette technique possède sa propre documentation Google, toujours en ligne. Bing la présente dans son article de 2018 sur bingbot : “Dynamic rendering is about detecting user agent and rendering content differently for humans and search engine crawlers” (traduction) « le dynamic rendering consiste à détecter le user-agent et à rendre le contenu différemment pour les humains et les robots des moteurs de recherche ». Attention : il est ici question du rendu JavaScript pour bingbot, pas d’un service selon l’appareil.

Les deux notions sont faciles à confondre, car elles utilisent toutes deux la détection du user-agent et soulèvent la question du cloaking. Elles répondent pourtant à des problèmes différents et relèvent de documentations distinctes.

La détection du user-agent est réellement sujette aux erreurs

Les anciennes consignes de Google énuméraient des modes d’échec toujours actuels : les listes de user-agents exigent un entretien constant et ne reconnaissent pas les agents nouvellement apparus ; les correspondances sont faciles à inverser — “sometimes detecting a desktop user agent as a mobile one or detecting a mobile user agent as a desktop” (traduction) « parfois en détectant un user-agent d’ordinateur comme mobile, ou un user-agent mobile comme celui d’un ordinateur ». Autre erreur classique : “a common mistake for sites is to inadvertently treat tablet devices as smartphones.” (traduction) « une erreur courante consiste à traiter involontairement les tablettes comme des smartphones ». Le résumé de Google — “Use the Vary HTTP header to signal your changes depending on the user agent. Detect user agent strings correctly.” (traduction) « Utilisez l’en-tête HTTP Vary pour signaler les changements selon le user-agent. Détectez correctement les chaînes de user-agent. » — paraît simple, mais condense toute la charge de maintenance en deux phrases.

Google rencontre ces erreurs depuis une décennie. En janvier 2015, Pierre Far de Google signalait les principaux problèmes d’implémentation qu’il observait : la bonne gestion des variantes JavaScript, CSS et d’images entre appareils, et pas seulement l’en-tête Vary. Un rappel que « ajouter l’en-tête » n’a jamais constitué toute la solution.

Pourquoi le responsive design est désormais la solution par défaut

Deux évolutions ont fait du dynamic serving une méthode historique. Premièrement, Google recommande le responsive design “because it’s the easiest design pattern to implement and maintain” (traduction) « parce qu’il s’agit du modèle de conception le plus facile à mettre en œuvre et à maintenir » depuis au moins 2015 : une seule version, sans aucun risque lié à la détection de l’appareil. Deuxièmement, l’indexation mobile-first s’est achevée en 2023–2024, ce qui a accru les conséquences d’une erreur de service selon l’appareil. Google explore, indexe et classe désormais principalement la version mobile. Une mauvaise configuration ne lui présente donc pas seulement une mauvaise page mobile, mais un contenu indexé principal erroné. La même incitation à abandonner les configurations propres à chaque appareil qui vaut pour les URL m-dot distinctes vaut aussi pour le dynamic serving : réunissez tout sur une URL responsive et cette catégorie de problèmes disparaît.

Evidence for this claim Google supports dynamic serving but recommends responsive design because it is easier to implement and maintain. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile-first indexing

Pour une vue complète du mobile — parité du contenu, Core Web Vitals sur mobile, facilité d’utilisation, interstitiels et place actuelle d’AMP — consultez le hub SEO mobile et la checklist SEO mobile.

Comment vérifier si un site utilise le dynamic serving

La vérification est rapide et concrète : demandez deux fois la même URL avec des chaînes de user-agent différentes et comparez. Si le HTML diffère et que la réponse contient Vary: User-Agent, il s’agit de dynamic serving. Si le HTML est identique et que seule la mise en page s’adapte via CSS, le site est responsive. L’onglet Scripts propose les versions curl, DevTools et bookmarklet. Le signal d’alerte est un HTML qui varie selon l’appareil sans en-tête Vary : cette mauvaise configuration risque de présenter la mauvaise version aux caches et aux robots.

Evidence for this claim Dynamic serving uses one URL with device-dependent HTML and should send Vary: User-Agent. Scope: Current official or standards documentation. Confidence: high · Verified: Google: Mobile configurations

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.