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.
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này
- Công cụ trực tuyến liên quanHTTP Header Checker
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.
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 ModifiedTL;DR — MỘT yêu cầu có điều kiện là Googlebot asking máy chủ của bạn “has this page changed since I last grabbed it?” (bản dịch) «có này trang changed since I cuối cùng grabbed điều này?» trước downloading điều này again. Nếu đó câu trả lời là không, máy chủ của bạn gửi back một tiny
304 Not Modifiedreply với không trang trong điều này, và đó crawler reuses đó copy điều này đã có. Đó saves hoạt động on cả hai sides — nhưng điều này chỉ helps trong một có ý nghĩa way on big các trang, và điều này không làm bạn xếp hạng cao hơn.
Điều gì conditional yêu cầu là
Thông thường, khi Googlebot wants một trang, điều này chỉ downloads đó toàn bộ điều. MỘT conditional yêu cầu là smarter: đó crawler says “only send me the page if it’s actually different from the last time I visited.” (bản dịch) «chỉ gửi me đó trang nếu đây là thực ra khác nhau từ đó cuối cùng time I visited.»
nó làm điều này với little extra information nó remembers từ trước đó crawl:
- MỘT date — “last time I got this page, you told me it was last modified on such-and-such date. Anything newer?” (bản dịch) «cuối cùng time I đã nhận này trang, bạn told me điều này đã là cuối cùng modified on such-và-such date. Bất cứ điều gì newer?»
- MỘT fingerprint — “last time, you gave this page an ID (an
ETag). Is that ID still the same?” (bản dịch) «cuối cùng time, bạn gave này trang an ID (anETag). Là đó ID vẫn đó giống nhau?»
Nếu không có gì changed, máy chủ của bạn replies 304 Not Modified. Đó reply có không
trang attached — đây là chỉ một ngắn message đó có nghĩa là “same as before.” (bản dịch) «giống nhau as trước.» Googlebot
thì reuses đó copy điều này saved cuối cùng time thay vì re-downloading mọi thứ.
nếu điều gì đó đã làm thay đổi, của bạn máy chủ gửi đầy đủ trang back as thông thường ( 200 OK), và crawler takes bản sao mới.
Vì sao anyone cares
Think of một giant online store với một million sản phẩm các trang đó mostly không bao giờ thay đổi. Không có các yêu cầu có điều kiện, Googlebot re-downloads all of them mỗi khi điều này xuất hiện back — một huge amount of wasted bandwidth và máy chủ hoạt động cho các trang đó là giống hệt to cuối cùng week. Với các yêu cầu có điều kiện, hầu hết of những visits nhận một tiny “nothing changed” (bản dịch) «không có gì changed» reply, và đó crawler có thể spend của nó time on đó các trang đó đã làm thay đổi hoặc là brand new.
đó toàn bộ benefit: efficiency. nó part của Điều gì được gọi là của bạn crawl budget — amount của crawling công cụ tìm kiếm là willing để làm trên trang web củ bạn.
honest caveat
Hai điều worth knowing trước khi bạn nhận excited:
- Này mostly matters đối với các trang web lớn. On một nhỏ site, đó savings là tiny
và thường không worth đó setup. As I’ve được viết trước, cho nhỏ websites đó
bộ nhớ đệm opportunity một
304cung cấp là “not that crucial.” (bản dịch) «không đó crucial.» - Điều này sẽ không improve của bạn thứ hạng. Crawling hơn efficiently không move bạn up đó kết quả — điều này chỉ helps big các trang nhận của họ new và changed các trang được crawl một bit nhanh hơn.
Muốn chính xác các header, Điều gì Google có thực ra đã nói nó hỗ trợ, three ways các trang âm thầm break điều này, và Cách nó differs từ tốc độ crawl và crawl frequency? Switch để Nâng cao tab.
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 ModifiedTó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ạnLast-Modifiedheader) và/hoặcIf-None-Match(validated so với của bạnETag); nếu không có gì changed, của bạn máy chủ trả về304 Not Modifiedvớ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.ETagwins 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ụ304even không có header có điều kiện, và304làm không freeze lập chỉ mục các tín hiệu. Three misconfigurations defeat nó: luôn-200, volatileETags (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.
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:
- On đó đầu tiên crawl, máy chủ của bạn trả về đó trang với
200 OKplus mộtLast-Modifieddate và/hoặc anETagfingerprint. - 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ặcIf-None-Match(echoing back đóETag). - 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 Modifiedvới không thân phản hồi — chỉ status và các header. - 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 OKvớ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 crawlingA 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 crawlingKhi 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-Match và If-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.
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.
AI summary
condensed take on Nâng cao version:
- Các yêu cầu có điều kiện = “has this changed?” (bản dịch) «có này changed?» Googlebot gửi
If-Modified-Since(validated so với của bạnLast-Modified) và/hoặcIf-None-Match(validated so với của bạnETag). Unchanged → máy chủ của bạn trả về304 Not Modifiedvới không thân phản hồi và đó crawler reuses của nó copy. - ETag wins khi cả hai là present; Google khuyến nghị
ETag(không date-format pitfalls) nhưng says set cả hai.Cache-Control: max-agelà an tùy chọn supplementary recrawl-timing hint. - MỘT
304là ~1 KB so với. 100 KB+ và skips re-download/re-processing — nhưng điều này làm không freeze các tín hiệu lập chỉ mục (Google có thể vẫn recalculate them). - Google không luôn gửi đó các header (dùng-case dependent; AdsBot là likelier
to), và bạn có thể proactively serve
304even không có một header có điều kiện. - Three misconfigurations defeat điều này: luôn-
200với một đầy đủ thân phản hồi; volatileETags (timestamps, theo-yêu cầu tokens, theo-node CDN variance); và mộtLast-Modifiedđó không track real thay đổi (giống nhau honesty rule as sitemaplastmod). - Trường hợp biên: một
304served over một hỏng/empty trang có thể làm Googlebot treat đó lỗi as vĩnh viễn (Illyes). - Bing có supported RFC-compliant conditional GET since 2008 và tracks điều này as “crawl efficiency.” (bản dịch) «hiệu quả crawl.»
- Adoption là thấp và falling (~0,026% → ~0,017% cacheable fetches over một decade); đây là an underused lever đối với các trang web lớn — và không phải là yếu tố xếp hạng.
- Verify trong máy chủ logs (
304rate,If-None-Matchpresence). Real dữ liệu (Tame đó Bots) cho thấy đây là rare on nhỏ các trang, có ý nghĩa tại scale.
Tài liệu chính thức
Chính-nguồn tài liệu on các yêu cầu có điều kiện và crawler bộ nhớ đệm.
- Điều to Know về Google Web Crawling — đó hiện tại HTTP-bộ nhớ đệm contract:
ETag/If-None-Match,Last-Modified/If-Modified-Since, ETag precedence, và đóCache-Control: max-agehint. (Note: này nội dung moved ở đây từ đó older/search/docs/...path; đó hướng dẫn là đó giống nhau.) - Crawling December: HTTP bộ nhớ đệm — Gary Illyes’ Dec 2024 post behind đó doc cập nhật (“Allow us to cache, pretty please” (bản dịch) «Cho phép us to bộ nhớ đệm, pretty please»).
- Troubleshoot Google Search crawling các lỗi — đó
If-Modified-Since/304mechanics, đó AdsBot ví dụ, và đó “serve a 304 without a conditional header” (bản dịch) «serve một 304 không có một header có điều kiện» allowance. - HTTP các mã trạng thái, network, và DNS các lỗi — cách Google xử lý một
304(các tín hiệu có thể vẫn là recalculated; không negative effect on lập chỉ mục). - Optimize của bạn ngân sách crawl — đó parent concept và ai thực ra cần to care.
- Xây dựng và submit một sitemap — đó
lastmodhonesty principle đó mirrors đóLast-Modifiedheader discipline.
Bing / Microsoft
- Announcing crawler improvements cho Trực tiếp Tìm kiếm — Bing original 2008 RFC-2616 conditional-GET announcement (
If-Modified-Since+If-None-Match/ETag). - bingbot Series: Maximizing Hiệu quả crawl — Bing “crawl efficiency” (bản dịch) «hiệu quả crawl» chỉ số và vì sao unchanged re-crawl thấp hơn điều này.
- Bing Quản trị viên web Tools — Crawl Control — đó rate-side lever, contrasted với các yêu cầu có điều kiện as đó theo-hiệu quả crawl lever.
Quotes từ nguồn
On—record statements từ Google và Bing. mỗi link là deep link đó jumps để quoted passage on nguồn trang.
Google — Điều gì supported, chính xác
- “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 header yêu cầu, và đó Last-Modified phản hồi- và If-Modified-Since header yêu cầu.» — Google, Điều to Know về Google Web Crawling. Jump to quote
- “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 header phản hồi 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.» Jump to quote
- “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 đề.» Jump to quote
- “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 thay đổi) mã trạng thái với không HTTP thân phản hồi.» Jump to quote
Google — Khi nó gửi các header, và proactive-304 allowance
- “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).» — Google, Troubleshoot Google Search crawling các lỗi. Jump to quote
- “If our crawlers send the If-Modified-Since header, the header’s value is the date and time the content was last crawled. Based on that value, the server may choose to return a 304 (Not Modified) HTTP status code with no response body, in which case Google will reuse the content version it crawled the last time.” (bản dịch) «Nếu của chúng ta các crawler gửi đó If-Modified-Since header, đó header giá trị là đó date và time đó nội dung đã là cuối cùng được crawl. Dựa trên đó giá trị, đó máy chủ có thể chọn to trả về một 304 (Không thay đổi) HTTP mã trạng thái với không thân phản hồi, trong mà case Google sẽ reuse đó nội dung version điều này được crawl đó cuối cùng time.» Jump to quote
- “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.» Jump to quote
Gary Illyes, Google (LinkedIn — 304-backfire thất bại chế độ)
- “HTTP 304 (not modified) is super useful to signal crawlers that the content they’re accessing hasn’t changed since it was last crawled, but it can also backfire spectacularly.” (bản dịch) «HTTP 304 (không thay đổi) là super hữu ích to tín hiệu các crawler đó đó nội dung họ là accessing hasn’t changed since điều này đã là cuối cùng được crawl, nhưng điều này có thể cũng backfire spectacularly.» Đọc đó post
- On cách thường đó empty-trang-thì-304 trap thực ra happens: “Does this ever happen? Yes. Often? Absolutely not. But it’s worth keeping this somewhere deep in your mind because debugging it is an absolute nightmare.” (bản dịch) «Làm này bao giờ happen? Có. Thường? Absolutely không. 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.» Đọc đó post
Bing (Trực tiếp Tìm kiếm), Fabrice Canel (2008 conditional-GET announcement)
- “Live Search supports conditional get as defined by RFC 2616 (Section 14.25), and generally will not download the page unless it has changed since the last time it crawled it.” (bản dịch) «Trực tiếp Tìm kiếm hỗ trợ NHẬN có điều kiện as được định nghĩa by RFC 2616 (Section 14,25), và 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.» Jump to quote
about-crawling bộ nhớ đệm quotes render qua JavaScript và resisted trực tiếp automated scraping; những điều đó quotes là confirmed verbatim qua multiple independent relays (công cụ tìm kiếm Land, công cụ tìm kiếm Journal, công cụ tìm kiếm Roundtable) và nên là re-checked so với trực tiếp các trang trước khi là được xem như cuối. Illyes LinkedIn quotes và Bing 2008 và Troubleshoot crawling các lỗi quotes là confirmed verbatim so với của họ trực tiếp sources. nên I bother implementing các yêu cầu có điều kiện?
không mỗi trang web cần điều này. Hoạt động qua liệu nó worth của bạn time trước khi bạn touch máy chủ config.
Is implementing conditional requests worth it for my site?
SOP: implement các yêu cầu có điều kiện correctly
repeatable procedure cho thêm (hoặc sửa) conditional-yêu cầu hỗ trợ on lớn trang web. Làm nó trong điều này order — đo lường, implement, verify.
1. xác nhận bạn thực ra có vấn đề.
Pull verified-Googlebot traffic từ của bạn máy chủ nhật ký. nếu phần lớn các yêu cầu để
unchanged các URL trả về 200 với đầy đủ thân phản hồi và một vài hoặc không If-None-Match /
If-Modified-Since các header xuất hiện, bạn có room để improve. nếu bạn’re đã
seeing 304s on unchanged các trang, dừng — ở đó có thể là little để gain.
2. Generate ổn định, nội dung-based ETag.
Compute 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. Làm không derive nó từ timestamp, theo-yêu cầu hoặc
theo-session token, yêu cầu ID, hoặc bất cứ điều gì đó varies theo máy chủ node. Verify by
requesting giống nhau unchanged URL twice và confirming ETag giá trị là giống hệt
cả hai times (và giống hệt across của bạn CDN/origin fleet).
3. đặt honest cuối cùng-Modified.
đặt Last-Modified để date/time của cuối cùng significant nội dung thay đổi — không
hiện tại render time, và không giá trị đó moves Khi chỉ footer năm hoặc
timestamp thay đổi. Format nó để HTTP tiêu chuẩn
(Weekday, DD Mon YYYY HH:MM:SS Timezone). nếu Bạn có thể, đặt cả hai ETag và
Last-Modified; Google sẽ ưu tiên ETag.
4. Trả về 304 correctly.
Khi an incoming If-None-Match matches của bạn hiện tại ETag (hoặc If-Modified-Since
không phải older hơn của bạn Last-Modified) và không có gì changed, trả về 304 Not Modified với không thân phản hồi — status và các header chỉ. Hầu hết web các máy chủ và
các framework có thể làm này tự động; xác nhận yours không stripped by một proxy hoặc CDN
trong front of đó origin.
5. (Tùy chọn) Thêm bộ nhớ đệm-Control max-age hint.
đặt Cache-Control: max-age=<seconds> để number của seconds bạn expect
nội dung để stay unchanged, as supplementary recrawl-timing tín hiệu. nó hint, không
bảo đảm.
6. Verify trong nhật ký — sau đó leave nó alone.
Re-kiểm tra nhật ký sau khi một vài weeks. bạn muốn để see Googlebot’s If-None-Match
các yêu cầu met với 304s on unchanged các trang, và 200s chỉ Khi nội dung genuinely
changed. không expect cao 304 rate on nhỏ trang web; expect nó để quan trọng tại scale.
Guardrail: không bao giờ phục vụ 304 Đối với một trang đó thực ra changed, và không bao giờ bolt
các yêu cầu có điều kiện onto flaky origin — 304 served over hỏng/trang rỗng
có thể làm Googlebot treat lỗi as vĩnh viễn.
Myths và mistakes để tránh
recurring misconceptions đó nguyên nhân wasted effort hoặc yên lặng breakage:
-
“Googlebot always sends If-Modified-Since/If-None-Match, so if I don’t see it in my logs my server is broken.” (bản dịch) «Googlebot luôn gửi If-Modified-Since/If-None-Match, so nếu I không see điều này trong my logs my máy chủ là hỏng.» Sai. Google says explicitly đó điều này không gửi đó các header on mỗi crawl — đây là dùng-case dependent, và đó main Tìm kiếm crawler gửi them inconsistently (AdsBot là called out as hơn có khả năng to). Real log dữ liệu (Tame đó Bots) showed well under 2% of các yêu cầu đã nhận một
304on đó tested site. -
“A 304 means Google won’t re-evaluate my rankings/signals.” (bản dịch) «MỘT 304 có nghĩa là Google sẽ không re-evaluate my thứ hạng/các tín hiệu.» Sai. Google own tài liệu note đó pipeline lập chỉ mục có thể vẫn recalculate các tín hiệu cho đó URL on một
304; chỉ đó nội dung download và re-processing là skipped. -
“Setting an ETag automatically means I’ll get 304s.” (bản dịch) «Setting an ETag tự động có nghĩa là I’ll nhận 304s.» Sai nếu đó
ETaglà volatile. AnETagđược xây dựng từ một timestamp, một theo-yêu cầu token, hoặc theo-node state thay đổi on mỗi yêu cầu, soIf-None-Matchkhông bao giờ matches — và đây là harder to diagnose vì điều này looks correctly configured tại một glance. -
“Last-Modified just needs to be present — any date works.” (bản dịch) «Last-Modified chỉ cần to là present — any date hoạt động.» Sai. Nếu điều này không track real nội dung thay đổi (stamped với “hiện tại” mỗi render, hoặc bumped by một footer tweak), điều này either triggers wasted re-crawl hoặc erodes Google trust trong đó tín hiệu — đó giống nhau principle Google trạng thái cho sitemap
lastmod. -
“304 is only ever a reactive answer to a conditional GET.” (bản dịch) «304 là chỉ bao giờ một reactive câu trả lời to một conditional GET.» Sai. Google explicitly cho phép các máy chủ to proactively trả về
304với không thân phản hồi cho any Googlebot yêu cầu khi đó máy chủ independently knows đó nội dung là unchanged. -
“Implementing conditional requests will boost my rankings.” (bản dịch) «Implementing các yêu cầu có điều kiện sẽ boost my thứ hạng.» Không established by any chính thức nguồn. Đó được ghi lại benefit là crawl/máy chủ efficiency, mà có thể help lớn các trang nhận nội dung mới được crawl nhanh hơn — điều này không phải một xếp hạng factor.
-
“This only matters for giant enterprise sites.” (bản dịch) «Này chỉ matters cho giant enterprise các trang.» Mostly đúng trong urgency — Google targets này tại lớn, rarely-thay đổi-nội dung các trang — nhưng đó mechanism và đó misconfigurations apply to any site. On một nhỏ site đây là chỉ rarely worth đó setup.
kiểm tra URL’s bộ nhớ đệm các validator với curl
See Điều gì các validator của bạn máy chủ gửi, và liệu nó trả về 304 Khi bạn echo
them back.
1) See phản hồi các header (look cho ETag và Last-Modified)
curl -sI https://example.com/some-page | grep -iE 'etag|last-modified|cache-control'
# ETag: "a1b2c3d4e5"
# Last-Modified: Thu, 22 Jan 2026 01:28:49 GMT
# Cache-Control: max-age=940432) Ask conditionally với ETag — bạn muốn 304 back
curl -sI https://example.com/some-page \
-H 'If-None-Match: "a1b2c3d4e5"'
# HTTP/2 304 ← correct: server confirms nothing changed, sends no body
# HTTP/2 200 ← if you get this on an unchanged page, your validators aren't working3) Ask conditionally với date thay vì
curl -sI https://example.com/some-page \
-H 'If-Modified-Since: Thu, 22 Jan 2026 01:28:49 GMT'
# HTTP/2 304Detect volatile ETag
nếu giống nhau unchanged URL trả về khác ETag on back-để-back các yêu cầu, của bạn
ETag là volatile (timestamp/token-based) và If-None-Match sẽ không bao giờ match:
# Request twice; the two ETag values should be IDENTICAL for an unchanged page
for i in 1 2; do curl -sI https://example.com/some-page | grep -i '^etag:'; done
# ETag: "a1b2c3d4e5"
# ETag: "a1b2c3d4e5" ← good (stable)
# ETag: "9f8e7d6c5b" ← BAD if different: your ETag changes every requestSpot kiểm tra 304s trong của bạn access nhật ký
Verify thực conditional-yêu cầu activity từ Googlebot. Adjust trường positions để của bạn log format (điều này assumes combined-log-style status trường):
# Count status codes returned to Googlebot
grep -i 'googlebot' access.log | awk '{print $9}' | sort | uniq -c | sort -rn
# 4211 200
# 53 304 ← these are the conditional-request wins
# 12 301
# See which URLs are getting 304s
grep -i 'googlebot' access.log | awk '$9==304 {print $7}' | sort | uniq -c | sort -rn | head(Verify yêu cầu là thực sự Googlebot với reverse + forward DNS kiểm tra trước khi trusting người dùng-agent string — fake Googlebot traffic là phổ biến.)
Nhanh DevTools Console kiểm tra trong trình duyệt
Paste vào Chrome DevTools Console để đọc các validator trình duyệt đã nhận cho hiện tại trang:
// Reads the ETag / Last-Modified the server sent for THIS page
fetch(location.href, { method: 'HEAD' }).then(r => {
console.log('ETag:', r.headers.get('etag'));
console.log('Last-Modified:', r.headers.get('last-modified'));
console.log('Cache-Control:', r.headers.get('cache-control'));
}); validator → yêu cầu → phản hồi framework
- Validator: đầu tiên
200phản hồi suppliesETag,Last-Modified, hoặc cả hai. - yêu cầu: sau đó fetch gửi đó giá trị back trong
If-None-MatchhoặcIf-Modified-Since. - phản hồi: unchanged nội dung trả về
304với không thân phản hồi; changed nội dung trả về200với new thân phản hồi và validator. - Stability kiểm tra: các validator nên thay đổi Khi representation nội dung thay đổi, không vì yêu cầu hit một máy chủ hoặc contained timestamp.
Conditional-yêu cầu header bảng tra nhanh
| Header hoặc status | Direction | Meaning |
|---|---|---|
ETag | phản hồi | Identifier cho hiện tại representation |
If-None-Match | yêu cầu | trả về thân phản hồi chỉ nếu ETag differs |
Last-Modified | phản hồi | máy chủ modification time cho representation |
If-Modified-Since | yêu cầu | trả về thân phản hồi chỉ nếu nó changed sau khi điều này time |
304 Not Modified | phản hồi | Reuse được lưu đệm copy; không phản hồi thân phản hồi |
200 OK | phản hồi | Download hiện tại representation và các validator |
Tools cho kiểm tra các validator
- HTTP Header Checker hiển thị
ETag,Last-Modified, bộ nhớ đệm các header, và header thay đổi across các chuyển hướng. - trình duyệt DevTools’ Network panel lets bạn inspect ban đầu các validator và các header có điều kiện on repeat yêu cầu.
curllà clearest reproducible kiểm thử: capture validator, gửi nó back, và xác nhận unchanged phản hồi là304.- Access-log analysis reveals liệu crawler các yêu cầu có điều kiện thực ra nhận
304các phản hồi tại scale.
Các chỉ số cho conditional-yêu cầu health
Conditional hit rate
Chỉ số: eligible các yêu cầu có điều kiện returning 304. Điều gì nó tells bạn: liệu các validator tránh unchanged-thân phản hồi transfers. Cách pull nó: group access-log các yêu cầu carrying If-None-Match hoặc If-Modified-Since by phản hồi status. Benchmark / realistic range: establish baseline by template và thay đổi cadence; frequently đã cập nhật các trang nên naturally differ từ ổn định archives. Cadence: monthly, và sau khi bộ nhớ đệm/CDN thay đổi.
Bytes avoided by 304 các phản hồi
Chỉ số: estimated phản hồi-thân phản hồi bytes không transferred. Điều gì nó tells bạn: bandwidth benefit thay vì chỉ phản hồi được tính. Cách pull nó: so sánh mỗi 304 URL với mới nhất 200 thân phản hồi size trong nhật ký hoặc crawl export. Benchmark / realistic range: so sánh so với trang web own prior period; không universal đích là honest. Cadence: monthly.
Validator instability
Chỉ số: unchanged các URL whose ETag hoặc cuối cùng-Modified giá trị thay đổi giữa kiểm tra. Điều gì nó tells bạn: liệu theo-yêu cầu hoặc theo-node variance defeats revalidation. Cách pull nó: repeat giống hệt header các yêu cầu so với fixed sample. Benchmark / realistic range: các validator nên vẫn ổn định trong khi representation là unchanged. Cadence: sau khi deployments, CDN thay đổi, hoặc load-balancer thay đổi.
các tài nguyên worth của bạn time
My related writing
- Điều gì Là 304 Không thay đổi? (Ahrefs SEO Glossary) — my walkthrough of đó đầy đủ conditional-yêu cầu flow, đó
If-None-Match-takes-precedence rule, và vì sao đó304opportunity là “not that crucial” (bản dịch) «không đó crucial» cho nhỏ các trang nhưng một “great opportunity” (bản dịch) «great opportunity» cho lớn ones. - Khi Nên Bạn Worry Về Ngân sách crawl? — đó parent concept: điều gì ngân sách crawl thực ra là, demand so với. capacity, và ai cần to care trước khi bạn hẹp vào các yêu cầu có điều kiện.
- Điều gì Là Googlebot & Cách Làm Điều này Hoạt động? — cách Googlebot decides điều gì và cách fast to crawl, đó context khoảng đó scheduler.
- Đó Beginner Hướng dẫn to SEO kỹ thuật — nơi hiệu quả crawl fits trong đó bigger picture.
My speaking
- Cách Tìm kiếm Hoạt động (SlideShare) — my walkthrough of crawling, kết xuất, lập chỉ mục, và xếp hạng, including đó crawl-demand factors đó decide điều gì nhận re-fetched. (My standing disclaimer áp dụng: “This is my understanding of systems… not going to be 100% complete or accurate.” (bản dịch) «Này là my understanding of các hệ thống… không going to là 100% hoàn tất hoặc chính xác.»)
Từ khoảng đó ngành
- Crawling December: HTTP bộ nhớ đệm (Google Search Central) — Gary Illyes’ post asking chủ trang web to enable bộ nhớ đệm, và đó nguồn of đó declining-adoption stat.
- Làm Googlebot Dùng Etag Các header? (Dave Smart, Tame đó Bots) — một rare real máy chủ-log study of Googlebot’s conditional-yêu cầu behavior; hầu hết competing ghi-ups là pure spec paraphrase với không observed dữ liệu.
- Google clarifies cách Google các crawler xử lý Bộ nhớ đệm-Control các header (Barry Schwartz, Search Engine Land) — coverage of đó Dec 2024 doc cập nhật, với đó cốt lõi
ETag/Last-Modifiedquotes reproduced verbatim. - Google Đã cập nhật Crawler Hướng dẫn Khuyến nghị ETags (Roger Montti, Search Engine Journal) — vì sao Google prefers
ETag, và đó “individual crawlers may or may not use caching” (bản dịch) «individual các crawler có thể hoặc có thể không dùng bộ nhớ đệm» nuance. - Announcing crawler improvements cho Trực tiếp Tìm kiếm (Fabrice Canel, Bing Quản trị viên web Blog) — Bing original 2008 RFC-2616 conditional-GET announcement, với một sample yêu cầu/phản hồi.
- bingbot Series: Maximizing Hiệu quả crawl (Bing Quản trị viên web Blog) — Bing “crawl efficiency” (bản dịch) «hiệu quả crawl» framing, nơi unchanged re-crawl trực tiếp thấp hơn đó chỉ số.
- MDN: HTTP các yêu cầu có điều kiện (Mozilla) — đó neutral spec-level reference cho đó các validator và đó
304mechanics.
Tự kiểm tra: Các yêu cầu có điều kiện
Five nhanh các câu hỏi on ETag, nếu-Modified-Since, và 304 Chư sử đổi. Pick câu trả lời cho mỗi, sau đó kiểm tra.
Nhật ký thay đổi
Đã cập nhật 8 thg 8, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.
Đã cập nhật 18 thg 7, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.