Requêtes conditionnelles : ETag, If-Modified-Since et 304 Not Modified

Comment ETag, Last-Modified, If-Modified-Since, If-None-Match et la réponse 304 permettent à Googlebot d’éviter le téléchargement des pages inchangées sur les grands sites.

Première publication : 28 juin 2026 · Dernière mise à jour : 11 août 2026 · Advanced
Langues
1 indice probant sur cette page

Les requêtes conditionnelles permettent à Googlebot de demander si une page a changé avant de la retélécharger. Il envoie If-Modified-Since, comparé à Last-Modified, et/ou If-None-Match, comparé à ETag. Sans changement, le serveur répond 304 Not Modified sans corps et le robot réutilise sa copie. Google préfère ETag lorsque les deux validateurs sont présents, ne les envoie pas à chaque exploration et peut recalculer des signaux malgré un 304. Le bénéfice concerne l’efficacité d’exploration des grands sites, pas le classement. Les erreurs courantes sont une réponse 200 systématique, des ETag volatils et un Last-Modified sans rapport avec les vrais changements.

En bref — Les requêtes conditionnelles permettent à Googlebot de valider une copie en cache plutôt que de la retélécharger. Il envoie If-Modified-Since, comparé à Last-Modified, et/ou If-None-Match, comparé à ETag. Si rien n’a changé, le serveur renvoie 304 Not Modified sans corps et le robot réutilise sa copie — environ 1 Ko contre plus de 100 Ko pour une page complète. ETag prévaut lorsque les deux sont présents. Google le recommande, car il évite les problèmes de format de date, tout en conseillant de définir les deux. Google n’envoie pas ces en-têtes à chaque exploration : cela dépend de l’usage, et AdsBot est plus susceptible de le faire. Un serveur peut même renvoyer préventivement un 304 sans en-tête conditionnel. Un 304 ne fige pas les signaux d’indexation. Trois erreurs annulent le bénéfice : toujours répondre 200, produire des ETag volatils — horodatage, jeton par requête, variation entre nœuds — ou utiliser un Last-Modified qui ne reflète pas les changements réels. C’est un levier d’efficacité pour les grands sites, pas un facteur de classement, et il se distingue du débit, de la fréquence et du budget d’exploration.

Evidence for this claim Google may send If-Modified-Since or If-None-Match, but a site must not assume every crawler request will contain either conditional header. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Troubleshoot Google Search crawling errors Evidence for this claim Conditional requests use validators such as ETag and Last-Modified with If-None-Match or If-Modified-Since. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: Conditional requests Evidence for this claim A 304 response indicates a conditional request can reuse a stored representation and does not include a message body. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: 304 Not Modified

Le mécanisme précis

Le débit d’exploration indique à quelle vitesse Googlebot récupère les pages, et la fréquence à quel rythme il revient. Les requêtes conditionnelles déterminent à quel coût chaque nouvelle visite peut recevoir une réponse. Cette validation entre robot et serveur repose sur deux paires d’en-têtes HTTP :

Vous envoyez — en-tête de réponseLe robot renvoie — en-tête de requêteValidation
Last-Modified: <date>If-Modified-Since: <date>Comparaison des dates
ETag: "<fingerprint>"If-None-Match: "<fingerprint>"Comparaison des identifiants de contenu

Déroulement étape par étape :

  1. À la première exploration, le serveur renvoie la page avec 200 OK, une date Last-Modified et/ou une empreinte ETag.
  2. Lors d’une visite ultérieure, Googlebot peut renvoyer If-Modified-Since, avec la dernière date observée, et/ou If-None-Match, avec l’ETag.
  3. Le serveur les vérifie. Si rien de pertinent n’a changé, il répond 304 Not Modified sans corps, avec seulement le statut et les en-têtes.
  4. Googlebot réutilise la version précédente. Si le contenu a changé, le serveur renvoie 200 OK avec le corps complet.

Google décrit presque mot pour mot cet échange : “Google’s crawlers that support caching will send the ETag value returned for a previous crawl of that URL in the If-None-Match header. If the ETag value sent by the crawler matches the current value the server generated, your server should return an HTTP 304 (Not modified) status code with no HTTP body.” (traduction) « Les robots Google qui prennent en charge le cache renvoient dans If-None-Match la valeur ETag reçue lors d’une exploration précédente. Si elle correspond à la valeur actuelle du serveur, celui-ci doit répondre HTTP 304, sans corps. »

Evidence for this claim Google documents heuristic HTTP caching and support for ETag and Last-Modified validators for crawlers that support caching. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Things to Know about Google web crawling
The validator makes the recrawl conditional: unchanged content returns a lightweight 304, while a real change returns the full 200 response. Source : Google Search Central

A crawler revalidates its saved copy by sending If-None-Match with an ETag or If-Modified-Since with a date. The server compares that validator. If the representation is unchanged, it returns 304 Not Modified without a response body and the crawler reuses its saved copy. If the representation changed, the server returns 200 OK with the full updated response body.

© Patrick Stox LLC · CC BY 4.0 ·

ETag ou Last-Modified — et pourquoi Google préfère ETag

Les deux validateurs sont pris en charge. La documentation de Google l’indique clairement : “Google’s crawling infrastructure supports heuristic HTTP caching as defined by the HTTP caching standard, specifically through the ETag response- and If-None-Match request header, and the Last-Modified response- and If-Modified-Since request header.” (traduction) « L’infrastructure d’exploration de Google prend en charge la mise en cache HTTP heuristique définie par le standard, au moyen des paires ETag/If-None-Match et Last-Modified/If-Modified-Since. »

Evidence for this claim Google documents heuristic HTTP caching and support for ETag and Last-Modified validators for crawlers that support caching. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Things to Know about Google web crawling

Lorsque les deux sont présents, ETag prévaut : “If both ETag and Last-Modified response header fields are present in the HTTP response, Google’s crawlers use the ETag value as required by the HTTP standard.” (traduction) « Si ETag et Last-Modified figurent tous deux dans la réponse HTTP, les robots Google utilisent ETag, conformément au standard HTTP. » Ce n’est pas une particularité de Google, mais la règle de priorité du standard HTTP. Mon entrée du glossaire Ahrefs sur 304 Not Modified décrit la même règle : lorsque If-None-Match et If-Modified-Since sont employés, If-None-Match a priorité.

Pourquoi préférer ETag ? Cette chaîne opaque représente une empreinte du contenu et évite les pièges d’analyse de date de Last-Modified. Google recommande : “For Google’s crawlers specifically, we recommend using ETag instead of the Last-Modified header to indicate caching preference as ETag doesn’t have date formatting issues.” (traduction) « Pour les robots Google, nous recommandons ETag plutôt que Last-Modified pour indiquer la préférence de cache, car ETag ne présente pas de problème de format de date. » Si vous utilisez Last-Modified, la date doit suivre le standard HTTP (Weekday, DD Mon YYYY HH:MM:SS Timezone), sinon Google risque de ne pas la comprendre. Dans la pratique, Google conseille néanmoins de définir les deux lorsque c’est possible.

Un signal complémentaire existe : Cache-Control: max-age. Google ne l’exige pas, mais vous pouvez lui donner le nombre de secondes pendant lesquelles le contenu devrait rester inchangé afin d’aider ses robots à décider du prochain passage. L’asymétrie est importante : l’infrastructure d’exploration considère max-age comme un indice, sans appliquer les autres directives Cache-Control exactement comme un navigateur.

Ce que fait un 304 — et ce qu’il ne fait pas

Le gain sur le réseau est spectaculaire. Un 304 ne contient pas de corps et représente, selon l’ordre de grandeur donné par Gary Illyes, environ 1 Ko au lieu de plus de 100 Ko pour une page complète. Il coûte aussi moins à produire — aucun rendu complet ni requête de base de données — et à traiter pour Google — pas de nouvelle analyse, de rendu ni de pipeline complet sur le corps.

Soyez toutefois précis : un 304 ne fige pas les signaux de classement. Les recommandations de Google sur les codes d’état indiquent que le pipeline d’indexation “may recalculate signals for the URL,” (traduction) « peut recalculer les signaux de l’URL », même sans récupérer le corps. Un 304 évite le téléchargement et le retraitement du contenu, pas toutes les évaluations ultérieures. Il n’existe donc aucune astuce consistant à servir des 304 pour verrouiller un classement.

Google ne pose pas toujours la question — et c’est normal

Un détail échappe à beaucoup d’articles : Googlebot n’envoie pas les en-têtes conditionnels à chaque requête. La documentation sur les erreurs d’exploration précise : “Google generally supports the If-Modified-Since and If-None-Match HTTP request headers for crawling. Google’s crawlers don’t send the headers with all crawl attempts; it depends on the use case of the request (for example, AdsBot is more likely to set the If-Modified-Since and If-None-Match HTTP request headers).” (traduction) « Google prend généralement en charge If-Modified-Since et If-None-Match pour l’exploration, mais ses robots ne les envoient pas à chaque tentative ; cela dépend de l’usage, AdsBot étant par exemple plus susceptible de les définir. »

Si vos journaux montrent rarement If-None-Match dans les requêtes de Googlebot, cela ne signifie pas que la configuration est cassée. Google ne le demandait peut-être simplement pas lors de cette visite. Il précise aussi que chaque robot et système de récupération peut ou non utiliser le cache selon le produit servi.

À l’inverse, une technique peu employée consiste à renvoyer 304 sans avoir reçu d’en-tête conditionnel. Google indique : “Independently of the request headers, you can send a 304 (Not Modified) HTTP status code and no response body for any Googlebot request if the content hasn’t changed since Googlebot last visited the URL. This will save your server processing time and resources, which may indirectly improve crawl efficiency.” (traduction) « Indépendamment des en-têtes de requête, vous pouvez répondre 304 sans corps à toute requête Googlebot si le contenu n’a pas changé depuis sa dernière visite. Cela économise du temps et des ressources serveur et peut indirectement améliorer l’efficacité d’exploration. » Cette optimisation avancée de CDN ou de périphérie devient dangereuse si elle est fausse : servir 304 pour un contenu modifié revient à mentir avec vos validateurs. Traitez-la comme une optimisation de bord, pas comme un raccourci pour simuler la fraîcheur.

Pourquoi cela compte pour le budget d’exploration

Le gain se cumule surtout sur le profil déjà visé par les conseils de Google : grands sites comportant beaucoup d’URL rarement modifiées — catalogues e-commerce à longue traîne, archives de presse ou d’éditeurs, documentation volumineuse. Une part importante du budget peut y être dépensée à retélécharger des pages strictement identiques. Répondez avec des 304 et libérez ce budget pour les pages nouvelles ou modifiées.

La partie moins réjouissante est que Google réclame une adoption plus large, sans annoncer qu’elle est déjà généralisée. Illyes observe que la part des récupérations Googlebot pouvant être mises en cache a diminué en dix ans, d’environ 0,026 % à 0,017 %, alors même que le Web grandissait. Ce levier reste sous-employé, comme le résume le titre presque suppliant du billet « Crawling December » : “Allow us to cache, pretty please.” (traduction) « Laissez-nous utiliser le cache, s’il vous plaît. » La plupart des sites ne sont tout simplement pas configurés pour cela.

Erreurs courantes qui annulent les requêtes conditionnelles

Définir un validateur ne suffit pas à en bénéficier. Les sites échouent discrètement de quatre manières :

1. Toujours renvoyer 200 avec un corps complet

L’erreur la plus fréquente consiste à ne rien faire : le serveur ne définit aucun validateur ou ne les vérifie jamais. Chaque exploration retélécharge donc la page complète, qu’elle ait changé ou non. Il s’agit souvent d’un CMS ou serveur sans couche de cache. C’est précisément l’état par défaut qu’Illyes encourage à quitter.

2. Des ETag qui changent à chaque requête

Ce cas est plus trompeur car il paraît correct. Si l’ETag dépend d’une donnée volatile — horodatage intégré, jeton par requête ou session, identifiant de requête, artefact contenant l’heure de compilation — chaque réponse reçoit un nouvel ETag alors que le contenu visible est identique. If-None-Match ne correspond jamais et le serveur ne peut jamais répondre 304. Produisez l’ETag à partir d’un hachage du corps réel ou d’un identifiant stable de version du contenu, jamais d’une donnée variant par requête.

3. Une variation entre nœuds de CDN ou de grappe

Variante proche : plusieurs nœuds d’origine génèrent des ETag faibles différents pour un contenu identique. Un CDN ou robot alternant entre les nœuds ne voit jamais de valeur stable et revalide sans obtenir de 304 propre. Générez les ETag de manière déterministe à partir du contenu, et non de l’état de l’instance, ou centralisez leur production dans toute l’infrastructure.

4. Un Last-Modified qui ne reflète pas les vrais changements

Si Last-Modified reçoit « maintenant » à chaque rendu ou change pour une modification mineure, telle que l’année automatique du pied de page, il déclenche des explorations complètes inutiles. S’il est ancien ou manipulé, il réduit la confiance de Google. Le même principe d’honnêteté s’applique à lastmod dans les sitemaps : ne l’utilisez que s’il reflète de manière vérifiable une modification importante. L’article sur la fréquence d’exploration détaille cette logique ; elle vaut aussi pour l’en-tête HTTP Last-Modified.

Le cas limite d’Illyes : quand un 304 pérennise une page cassée

Ce scénario contre-intuitif mérite une section. Illyes explique qu’un 304 peut “backfire spectacularly” (traduction) « se retourner de façon spectaculaire » : un bogue serveur sert une page vide et cassée avec 200 ; le robot considère l’erreur comme temporaire et programme une vérification ; la page toujours cassée répond ensuite correctement 304, donc « inchangée » ; le robot conclut alors que l’erreur constitue le contenu durable et espace ses vérifications. Son déroulé s’achève lorsque le robot apprend que l’erreur est persistante. Il ajoute : “but it’s worth keeping this somewhere deep in your mind because debugging it is an absolute nightmare.” (traduction) « mais cela mérite de rester quelque part au fond de votre esprit, car le diagnostic est un véritable cauchemar. » Cela arrive-t-il ? Oui. Souvent ? Absolument pas. La leçon est de ne pas greffer les requêtes conditionnelles sur une origine instable : elles peuvent pérenniser une erreur de génération.

Comment Bing le gère

La fonctionnalité ne concerne pas seulement Google ; la prise en charge de Bing est même plus ancienne et plus explicite. En 2008, Live Search annonçait les requêtes GET conditionnelles conformes à la RFC 2616 : il “generally will not download the page unless it has changed since the last time it crawled it,” (traduction) « ne télécharge généralement pas la page si elle n’a pas changé depuis sa dernière exploration », en envoyant If-Modified-Since avec la date du dernier téléchargement et, lorsqu’il existe, If-None-Match avec l’ETag. Aujourd’hui, Bing intègre cela à une mesure nommée efficacité d’exploration, définie par Fabrice Canel comme “how often we crawl and discover new and fresh content per page crawled.” (traduction) « la fréquence à laquelle nous explorons et découvrons du contenu nouveau et frais par page explorée ». Les nouvelles visites inutiles de contenu inchangé réduisent directement ce score. Les mêmes validateurs servent donc les deux moteurs ; Bing donne simplement un tableau de bord au concept.

Evidence for this claim Conditional requests use validators such as ETag and Last-Modified with If-None-Match or If-Modified-Since. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: Conditional requests

Cela affecte-t-il le classement ?

Non. Appliquez la même rigueur que dans les articles sur le débit et le budget : les requêtes conditionnelles sont un levier d’efficacité d’exploration et de ressources, pas un facteur de classement. Aucune source officielle ne relie ETag, If-Modified-Since ou 304 au classement. Le bénéfice indirect est qu’un grand site souvent mis à jour peut faire explorer et indexer ses nouveautés plus vite, mais une exploration efficace ne constitue pas elle-même un signal.

Comment vérifier le fonctionnement

Les journaux du serveur font foi. Recherchez Googlebot envoyant If-None-Match ou If-Modified-Since, puis le serveur lui répondant 304. Les données réelles sont rares, ce qui rend précieuse l’ étude de journaux de Tame the Bots par Dave Smart. Sur du trafic Googlebot vérifié, seulement environ 1,3 % des requêtes ont obtenu 304, contre une majorité de 200. Les requêtes If-None-Match se regroupaient lorsqu’une URL était redemandée peu après une récupération. La conclusion rejoint les recommandations : peu fréquent sur les petits sites, mais source d’économies importantes à grande échelle. N’attendez pas un taux élevé sur un petit site ; attendez-vous à un effet sur les sites très explorés.

Requêtes conditionnelles, débit, fréquence et budget

Pour distinguer les notions de la famille du budget d’exploration :

  • Débit d’exploration — vitesse de récupération par Googlebot, côté offre et limitée par la santé du serveur.
  • Fréquence d’exploration — rythme auquel une URL connue est récupérée, selon sa popularité et son ancienneté.
  • Budget d’exploration — enveloppe de demande et de capacité : ensemble des URL que Google peut et souhaite explorer.
  • Requêtes conditionnelles — coût de réponse à chaque nouvelle visite. Elles ne modifient ni la vitesse ni la fréquence, mais rendent presque gratuite la visite d’une page inchangée et évitent de gaspiller le budget sur un contenu identique.

Add an expert note

Pin an expert quote

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