Các yêu cầu có điều kiện: ETag, If-Modified-Since & 304 Không thay đổi

Cách các yêu cầu có điều kiện — ETag, Last-Modified, If-Modified-Since/If-None-Match, và đó 304 Không thay đổi phản hồi — let Googlebot skip re-downloading unchanged các trang và bảo toàn ngân sách crawl trên các trang web lớn.

Xuất bản lần đầu: 28 thg 6, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

Các yêu cầu có điều kiện là cách Googlebot asks 'có này trang changed since I cuối cùng được crawl điều này?' trước re-downloading. Điều này gửi If-Modified-Since (checked so với của bạn Last-Modified header) và/hoặc If-None-Match (checked so với của bạn ETag); nếu không có gì changed, máy chủ của bạn nên trả về 304 Không thay đổi với không thân phản hồi và đó crawler reuses của nó existing copy — roughly một kilobyte thay vì đó toàn bộ trang. Google prefers ETag khi cả hai là present, không gửi đó các header on mỗi crawl, và một 304 không freeze các tín hiệu lập chỉ mục. Đó payoff là hiệu quả crawl trên các trang web lớn với nhiều rarely-thay đổi URLs — đây là không phải là yếu tố xếp hạng. Các trang âm thầm break điều này three ways: luôn returning 200 với một đầy đủ thân phản hồi, ETags đó thay đổi on mỗi yêu cầu (timestamps, theo-yêu cầu tokens, theo-node CDN variance), và một Last-Modified đó không reflect real nội dung thay đổi.

Tóm tắt — Các yêu cầu có điều kiện let Googlebot validate được lưu đệm copy thay vì re-downloading nó. nó gửi If-Modified-Since (validated so với của bạn Last-Modified header) và/hoặc If-None-Match (validated so với của bạn ETag); nếu không có gì changed, của bạn máy chủ trả về 304 Not Modified với không thân phản hồi và crawler reuses của nó copy — roughly ~1 KB so với. 100 KB+ cho đầy đủ trang. ETag wins Khi cả hai là present; Google khuyến nghị ETag (không date-format pitfalls) nhưng nói đặt cả hai. Google không gửi các header on mỗi crawl (sử dụng-case dependent — AdsBot là likelier để), Bạn có thể proactively phục vụ 304 even không có header có điều kiện, và 304 làm không freeze lập chỉ mục các tín hiệu. Three misconfigurations defeat nó: luôn-200, volatile ETags (timestamps, theo-yêu cầu tokens, theo-node CDN variance), và Last-Modified đó không track thực thay đổi. nó crawl-efficiency lever cho lớn các trang — không xếp hạng factor, và distinct từ tốc độ crawl, frequency, và budget.

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

mechanism, precisely

nơi tốc độ crawl là Cách fast Googlebot fetches và crawl frequency là Cách thường nó xuất hiện back, các yêu cầu có điều kiện là về Cách cheaply mỗi individual recrawl có thể là answered. họ’re validation handshake giữa crawler và của bạn máy chủ, được xây dựng on hai pairs của HTTP các header:

bạn gửi (phản hồi header)Crawler gửi back (yêu cầu header)Validates by
Last-Modified: <date>If-Modified-Since: <date>Comparing dates
ETag: "<fingerprint>"If-None-Match: "<fingerprint>"Comparing nội dung IDs

flow, từng bước:

  1. On đó đầu tiên crawl, máy chủ của bạn trả về đó trang với 200 OK plus một Last-Modified date và/hoặc an ETag fingerprint.
  2. On một sau đó crawl, Googlebot có thể gửi If-Modified-Since (echoing back đó date điều này cuối cùng saw) và/hoặc If-None-Match (echoing back đó ETag).
  3. Máy chủ của bạn kiểm tra them. Nếu không có gì relevant changed, điều này trả về 304 Not Modified với không thân phản hồi — chỉ status và các header.
  4. Googlebot reuses đó version điều này được crawl cuối cùng time. Nếu đó nội dung đã làm thay đổi, máy chủ của bạn trả về 200 OK với đó đầy đủ thân phản hồi.

Google documents đó handshake gần như word cho word: “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.” (bản dịch) «Google các crawler đó hỗ trợ bộ nhớ đệm sẽ gửi đó ETag giá trị đã trả về cho một trước đó crawl of đó URL trong đó If-None-Match header. Nếu đó ETag giá trị đã gửi by đó crawler matches đó hiện tại giá trị đó máy chủ generated, máy chủ của bạn nên trả về an HTTP 304 (Không modified) mã trạng thái với không HTTP thân phản hồi.»

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. Nguồn: 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 so với. cuối cùng-Modified — và Vì sao Google prefers ETag

Cả hai các validator là supported. Google crawling tài liệu state điều này plainly: “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.” (bản dịch) «Google crawling infrastructure hỗ trợ heuristic HTTP bộ nhớ đệm as được định nghĩa by đó HTTP bộ nhớ đệm tiêu chuẩn, cụ thể qua đó ETag phản hồi- và If-None-Match yêu cầu header, và đó Last-Modified phản hồi- và If-Modified-Since header yêu cầu.»

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

Khi cả hai là present, ETag wins: “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.” (bản dịch) «Nếu cả hai ETag và Last-Modified phản hồi header các trường là present trong đó HTTP phản hồi, Google các crawler dùng đó ETag giá trị as bắt buộc by đó HTTP tiêu chuẩn.» đó là không chỉ một Google quirk — đây là đó HTTP spec, và điều này matches đó precedence rule I’ve described trong my Ahrefs glossary entry on 304 Không thay đổi: khi cả hai If-None-MatchIf-Modified-Since là dùng, If-None-Match takes precedence.

Vì sao ưu tiên ETag? Vì đây là an opaque string — một fingerprint of đó nội dung — so điều này sidesteps đó date-parsing traps đó plague Last-Modified. Google own khuyến nghị: “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.” (bản dịch) «Cho Google các crawler cụ thể, we khuyến nghị dùng ETag thay vì đó Last-Modified header to indicate bộ nhớ đệm preference as ETag không có date formatting các vấn đề.» Nếu bạn làm dùng Last-Modified, đó date có to là formatted to đó HTTP tiêu chuẩn (Weekday, DD Mon YYYY HH:MM:SS Timezone) hoặc Google có thể không parse điều này. Và Google practical advice là to set cả hai anyway nếu bạn có thể — belt và suspenders.

có bonus tín hiệu cũng: Cache-Control: max-age. Google nói nó không bắt buộc, nhưng Bạn có thể đặt nó để number của seconds bạn expect nội dung để stay unchanged để help các crawler quyết định Khi để recrawl. Note asymmetry — Google crawling infrastructure honors max-age as hint nhưng không treat khác Cache-Control directives way trình duyệt sẽ.

Điều gì 304 làm — và Điều gì nó không

payoff là dramatic on wire. 304 carries không thân phản hồi, so theo Gary Illyes’ rough so sánh nó on order của ~1 KB thay vì 100 KB+ cho đầy đủ trang — và nó cheaper để generate (không đầy đủ render hoặc database query) và cheaper cho Google để xử lý (không re-parsing, re-kết xuất, hoặc re-đang chạy toàn bộ lập chỉ mục pipeline on thân phản hồi).

Nhưng là precise về điều gì một 304 làm không làm: điều này không freeze của bạn xếp hạng các tín hiệu. Google own status-code hướng dẫn notes đó on một 304 đó lập chỉ mục pipeline “may recalculate signals for the URL,” (bản dịch) «có thể recalculate các tín hiệu cho đó URL,» mặc dù điều này đã không re-fetch đó thân phản hồi. MỘT 304 skips đó download và re-processing of nội dung — không mỗi downstream evaluation. So có không “serve 304s to lock in my rankings” (bản dịch) «serve 304s to lock trong my thứ hạng» trick ở đây.

Google không luôn ask — và đó thông thường

Ở đây một detail hầu hết ghi-ups miss: Googlebot không gửi đó các header có điều kiện on mỗi yêu cầu. Từ Google crawling-các lỗi doc: “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).” (bản dịch) «Google generally hỗ trợ đó If-Modified-Since và If-None-Match HTTP yêu cầu các header cho crawling. Google các crawler không gửi đó các header với all crawl attempts; điều này phụ thuộc vào đó dùng case of đó yêu cầu (ví dụ, AdsBot là hơn có khả năng to set đó If-Modified-Since và If-None-Match HTTP yêu cầu các header).»

So nếu bạn look trong của bạn nhật ký và see Googlebot rarely sending If-None-Match, đó làm không có nghĩa là của bạn setup là hỏng — Google có thể đơn giản không là asking on đó crawl. Google cũng notes đó individual các crawler và fetchers có thể hoặc có thể không sử dụng bộ nhớ đệm depending on sản phẩm họ phục vụ.

Và đó flip side — một genuinely underused chi tiết triển khai — bạn có thể serve một 304 không có receiving một header có điều kiện tại all. Google: “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.” (bản dịch) «Independently of đó yêu cầu các header, bạn có thể gửi một 304 (Không thay đổi) HTTP mã trạng thái và không thân phản hồi cho any Googlebot yêu cầu nếu đó nội dung hasn’t changed since Googlebot cuối cùng visited đó URL. Này sẽ save máy chủ của bạn processing time và các tài nguyên, mà có thể indirectly improve hiệu quả crawl.» đó là an advanced CDN/edge technique — và một dangerous một nếu bạn nhận điều này wrong, vì serving 304 cho nội dung đó đã làm thay đổi là chính xác đó “your validators lie” (bản dịch) «của bạn các validator lie» chế độ lỗi. Treat điều này as an edge optimization, không một shortcut to fake freshness.

Vì sao điều này matters cho ngân sách crawl

savings compound hardest on chính xác profile Google crawl-budget hướng dẫn đã flags: lớn các trang với big share của rarely-thay đổi các URL — e-commerce catalogs với dài-tail SKUs, news và publisher archives, big tài liệu các trang. On những điều đó các trang, có ý nghĩa slice của ngân sách crawl có thể là spent re-downloading các trang đó là byte-cho-byte giống hệt để cuối cùng crawl. Câu trả lời những điều đó với 304s và bạn free đó budget cho new và changed các trang thay vì.

Đó honest, slightly deflating part: Google là asking cho hơn adoption ở đây, không reporting đó mọi người đã làm điều này. Illyes có noted đó đó share of Googlebot’s fetches đó là cacheable có thực ra fallen over đó cuối cùng decade — từ khoảng 0,026% to về 0,017% — even as đó web có grown. Nói cách khác, này là an underused lever, và đó “Crawling December” (bản dịch) «Crawling December» post own section heading là một near-literal plea: “Allow us to cache, pretty please.” (bản dịch) «Cho phép us to bộ nhớ đệm, pretty please.» Hầu hết các trang đơn giản không configured cho điều này.

phổ biến misconfigurations đó defeat các yêu cầu có điều kiện

Setting validator không phải giống nhau as benefiting từ một. Three (well, four) ways các trang âm thầm break điều này:

1. luôn returning 200 với đầy đủ thân phản hồi

phần lớn phổ biến thất bại là đang làm không có gì — máy chủ không bao giờ sets các validator hoặc không bao giờ kiểm tra them, so mỗi crawl là đầy đủ re-download regardless của liệu bất cứ điều gì changed. thường Đây là CMS/máy chủ stack với không bộ nhớ đệm layer configured tại all. Đây là default state Illyes là nudging mọi người out của.

2. ETags đó thay đổi on mỗi single yêu cầu

điều này một là nastier vì nó looks đúng. nếu của bạn ETag là computed từ điều gì đó volatile — embedded timestamp, theo-yêu cầu hoặc theo-session token, yêu cầu ID, hoặc xây dựng artifact đó bakes trong xây dựng time — sau đó mỗi phản hồi nhận “new” ETag even Khi visible nội dung là giống hệt. If-None-Match không bao giờ matches, so của bạn máy chủ không bao giờ có grounds để trả về 304. khắc phục: derive ETag từ hash của thực tế phản hồi thân phản hồi hoặc ổn định nội dung-version identifier, không từ bất cứ điều gì đó varies theo yêu cầu.

3. Theo-node CDN/cluster variance

close cousin: khác origin nodes generating khác (yếu) ETags cho giống hệt nội dung. CDN hoặc crawler alternating giữa nodes không bao giờ sees ổn định giá trị và giữ re-validating không có bao giờ landing sạch 304. khắc phục: generate ETags deterministically từ nội dung, không theo-instance state, hoặc centralize ETag generation across fleet.

4. cuối cùng-Modified đó không reflect thực thay đổi

nếu của bạn Last-Modified nhận stamped với “hiện tại” on mỗi render, hoặc bumped by trivial thay đổi như auto-updating copyright năm trong footer, nó either triggers pointless đầy đủ re-crawl ( date luôn looks new) hoặc, nếu nó stale/gamed, erodes Google trust trong tín hiệu. Đây là giống nhau honesty principle Google áp dụng để sitemap lastmod giá trị — chỉ sử dụng nó nếu nó verifiably reflects significant thay đổi. crawl-frequency bài viết covers đó lastmod logic; giống hệt discipline áp dụng để Last-Modified HTTP header.

Illyes trường hợp biên: Khi 304 locks trong hỏng trang

Worth của nó own callout, vì đây là genuinely counterintuitive và gần như không ai covers điều này. Illyes có described cách một 304 có thể “backfire spectacularly” (bản dịch) «backfire spectacularly»: một máy chủ bug serves một hỏng, empty trang với một 200; đó crawler xử lý điều này as một transient lỗi và schedules một recrawl to verify; đó vẫn-hỏng trang thì correctly các báo cáo 304 (“unchanged”); và đó crawler concludes đó lỗi state là đó durable, “real” nội dung và dừng rechecking as thường. His numbered walkthrough ends với đó crawler “learn[ing] the error is persistable.” (bản dịch) «learn[ing] đó lỗi là persistable.» His own caveat: làm này happen? Có. Thường? Absolutely không — “but it’s worth keeping this somewhere deep in your mind because debugging it is an absolute nightmare.” (bản dịch) «nhưng đây là worth giữ này nơi nào đó deep trong của bạn mind vì gỡ lỗi điều này là an absolute nightmare.» Đó lesson: các yêu cầu có điều kiện có thể entrench an lỗi nếu đó underlying nội dung generation là hỏng, so không bolt them on over một flaky origin.

Cách Bing xử lý nó

Này không một Google-chỉ feature, và Bing hỗ trợ là arguably older và hơn rõ ràng. Bing (back khi điều này đã là Trực tiếp Tìm kiếm) announced RFC-2616-compliant conditional GET trong 2008: điều này “generally will not download the page unless it has changed since the last time it crawled it,” (bản dịch) «generally sẽ không download đó trang trừ khi điều này có changed since đó cuối cùng time điều này được crawl điều này,» sending If-Modified-Since với đó time of cuối cùng download và, khi khả dụng, If-None-Match với đó ETag. Hôm nay Bing folds này vào một named, trackable chỉ số — hiệu quả crawl — mà Fabrice Canel defines as “how often we crawl and discover new and fresh content per page crawled.” (bản dịch) «cách thường we crawl và discover new và fresh nội dung theo trang được crawl.» Unnecessary re-crawl of unchanged nội dung trực tiếp thấp hơn đó score. So đó giống nhau các validator serve cả hai engines; Bing chỉ cho đó concept một scoreboard.

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

Làm điều này ảnh hưởng thứ hạng?

Không. giữ giống nhau discipline crawl-rate và crawl-budget các bài viết hold để: các yêu cầu có điều kiện là crawl-efficiency và tài nguyên lever, không xếp hạng factor. Không chính thức nguồn ties ETag/If-Modified-Since/304 để thứ hạng. gián tiếp benefit là đó lớn hoặc frequently-đã cập nhật các trang có thể nhận new và changed nội dung được crawl và được lập chỉ mục sooner — nhưng crawling nhiều hơn efficiently không phải itself tín hiệu xếp hạng.

Cách verify nó hoạt động

ground truth là của bạn máy chủ nhật ký. Look cho hai điều: Googlebot sending If-None-Match/If-Modified-Since yêu cầu các header, và của bạn máy chủ returning 304 các phản hồi để nó. thực-world dữ liệu là thin ở đây, mà là Điều gì làm Dave Smart máy chủ-log study tại Tame Bots valuable: monitoring verified Googlebot traffic, he tìm thấy chỉ về 1,3% của các yêu cầu đã nhận 304 — mostly 200s — và đó If-None-Match các yêu cầu tended để cluster Khi URL là requested again shortly sau khi prior fetch. His conclusion matches hướng dẫn: infrequent on nhỏ các trang, nhưng potentially “significant savings” (bản dịch) «significant savings» on heavily-được crawl ones. không expect cao 304 rate on nhỏ trang web; làm expect nó để quan trọng tại scale.

Các yêu cầu có điều kiện so với. rate so với. frequency so với. budget

để giữ crawl-budget family straight:

  • Tốc độ crawl — Cách fast Googlebot fetches (supply side, throttled by máy chủ health).
  • Crawl frequency — Cách thường known URL là re-fetched (popularity + staleness).
  • Ngân sách crawl — demand + capacity envelope: đặt của các URL Google có thể và wants để crawl.
  • Các yêu cầu có điều kiện — Cách cheaply mỗi individual recrawl có thể là answered. họ không thay đổi Cách fast hoặc Cách thường Google crawl; họ làm mỗi unchanged-trang visit gần như free, mà là Cách bạn dừng wasting budget on giống hệt nội dung.

Add an expert note

Pin an expert quote

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