Hướng dẫn về Dynamic Serving
Điều gì dynamic serving là, đó hai jobs of đó Vary Người dùng-Agent header, vì sao đây là một legacy pattern, và cách điều này differs từ responsive design và dynamic kết xuất.
Ngôn ngữ
Dynamic serving có nghĩa là một URL trả về khác nhau HTML/CSS depending on đó requesting người dùng-agent — desktop nhận một trang, mobile nhận một sản phẩm khác — và đó máy chủ phải gửi đó Vary: Người dùng-Agent header so caches và các crawler không serve đó sai version. đây là một of three mobile configurations (responsive, dynamic serving, tách biệt m-dot URLs), và Google khuyến nghị responsive design thay vì vì dynamic serving phụ thuộc vào lỗi-prone người dùng-agent detection và correct Vary các header. không confuse điều này với dynamic kết xuất (pre-kết xuất JS cho bots) — khác nhau concept, khác nhau doc. Trong 2026 đây là mostly một legacy pattern bạn audit an older hoặc enterprise site off of, không điều gì đó để xây dựng fresh: mobile-đầu tiên lập chỉ mục raised đó stakes of getting device serving sai, và Vary: Người dùng-Agent fragments CDN caches.
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 indexingTóm tắt — Dynamic serving là Khi trang web dùng một web address nhưng gửi khác trang để phones hơnó làm để desktops — máy chủ xem xét Điều gì device bạn’re on và trả về khác HTML. nó hoạt động, nhưng Google sẽ rather bạn sử dụng responsive design (một trang đó chỉ re-luồng để fit screen), vì dynamic serving là easy để nhận sai. nếu bạn làm sử dụng nó, máy chủ có để gửi special
Vary: User-Agentheader so caches không hand sai version để sai person.
Điều gì dynamic serving là
có three ways trang web có thể xử lý mobile khách truy cập:
- Responsive design — một trang, một đặt của HTML, và layout re-luồng để fit whatever screen bạn’re on. Đây là Điều gì Google khuyến nghị.
- Dynamic serving — một web address, nhưng máy chủ gửi khác HTML để phones và desktops. giống nhau URL, khác trang underneath.
- Tách biệt các URL — toàn bộ tách biệt mobile trang web on của nó own address, như
m.example.com.
Dynamic serving là middle option. Khi của bạn trình duyệt asks Đối với một trang, nó tells máy chủ Điều gì nó là — phone, tablet, desktop — trong điều gì đó được gọi là người dùng-agent. với dynamic serving, máy chủ đọc đó, và decides mà version của trang để gửi back. bạn và ai đó on laptop có thể loại chính xác giống nhau URL và nhận genuinely khác HTML.
Vary: User-Agent header
Ở đây đó catch. Vì đó trang thay đổi depending on đó device — nhưng đó URL
không — bất cứ điều gì đó caches các trang (trình duyệt của bạn, một CDN, của bạn internet provider)
có thể accidentally save đó desktop version và thì hand điều này để đó tiếp theo person,
ai on một phone. Để ngăn đó, đó máy chủ có để gửi một little note với mỗi
phản hồi: Vary: User-Agent. Điều này có nghĩa là “the content of this page depends on the
device, so don’t reuse a cached copy across different devices.” (bản dịch) «đó nội dung of này trang phụ thuộc vào đó device, so không reuse một được lưu đệm copy across khác nhau devices.» Forget đó header
và mọi người (và Google) có thể end lên seeing đó sai version.
Vì sao Google khuyến nghị so với nó
Dynamic serving relies on máy chủ correctly guessing Điều gì device bạn’re on từ người dùng-agent — và đó guessing là genuinely hard để giữ right. New devices xuất hiện, tablets nhận mistaken cho phones, và nó easy để ship desktop và mobile version đó âm thầm drift apart. Khi đó happens, Google có thể end lên seeing hỏng hoặc sai version của bạn trang. So Google advice là đơn giản: sử dụng responsive design thay vì, so có chỉ một version và không có gì để nhận out của sync.
điều mọi người nhận sai
không confuse dynamic serving với “dynamic rendering.” (bản dịch) «dynamic kết xuất.» They sound gần như giống hệt và cả hai involve đó máy chủ kiểm tra người dùng-agent, nhưng they solve khác nhau các vấn đề. Dynamic serving là về giving phones và desktops khác nhau HTML. Dynamic kết xuất là về giving tìm kiếm-engine bots một pre-được xây dựng version of một JavaScript-nặng trang. Khác nhau điều, khác nhau Google tài liệu — hơn on đó trong đó Advanced tab.
Trong 2026, dynamic serving là mostly điều gì đó bạn’ll inherit on older hoặc lớn
enterprise trang web, không điều gì đó anyone khuyến nghị building từ scratch. Muốn đầy đủ
version — hai jobs của Vary header, CDN cost phần lớn các hướng dẫn skip,
cloaking câu hỏi, và Cách kiểm tra nếu trang web là sử dụng nó — switch để
Nâng cao tab.
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 indexingTóm tắt — Dynamic serving = giống nhau URL, khác HTML/CSS theo người dùng-agent, detected máy chủ-side và signaled với
Vary: User-Agentphản hồi header. nó một của three mobile configs alongside responsive design (Google khuyến nghị) và tách biệt các URL (m-dot).Varyheader làm hai jobs: (1) dừng caches serving sai device version, và (2) trong lịch sử helped Googlebot discover mobile version. nó có thực cost, though —Vary: User-Agentfragments CDN bộ nhớ đệm keys across mỗi distinct UA string, multiplying origin load. Người dùng-agent detection là lỗi-prone (stale UA lists, tablets đọc as phones), và detection bug hoặc bị thiếuVarycó thể làm Google see sai hoặc hỏng version — mà là nơi cloaking risk thực ra lives. không confuse nó với dynamic kết xuất (pre-kết xuất JS cho các crawler — khác concept với của nó own doc). Trong 2026 nó legacy pattern để audit off của, không xây dựng fresh.
Điều gì dynamic serving là, precisely
Google own definition, từ của nó mobile-đầu tiên lập chỉ mục best-practices doc:
“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.” (bản dịch) «Dynamic serving: Dùng đó giống nhau URL regardless of device. Này configuration relies on người dùng-agent sniffing và đó Vary: user-agent HTTP header phản hồi để serve một khác nhau version of đó HTML để khác nhau devices.» Đó hiện tại-retired dedicated
Google trang put điều này even hơn concretely — dynamic serving là “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).” (bản dịch) «một setup nơi đó máy chủ responds với khác nhau HTML (và CSS) on đó giống nhau URL depending on mà người dùng agent các yêu cầu đó trang (mobile, tablet, hoặc desktop).»
nó một của three mobile configurations, và sạch nhất way để see nó là three-hàng bảng:
| Configuration | giống nhau URL? | giống nhau HTML? | Chính tín hiệu được sử dụng |
|---|---|---|---|
| Responsive design | Có | Có | CSS media các truy vấn (không có gì máy chủ-side) |
| Dynamic serving | Có | Không (by người dùng-agent) | Vary: User-Agent header |
| Tách biệt các URL (m-dot) | Không | Không | rel=canonical/rel=alternate + Vary |
Hai of những three phụ thuộc on đó Vary header. Google là rõ ràng đó tách biệt
URLs, “like dynamic serving, this configuration relies on the user-agent and Vary
HTTP headers.” (bản dịch) «như dynamic serving, này configuration relies on người dùng-agent và Vary HTTP các header.» Chỉ responsive design có không có gì để nhận out of sync — mà là
chính xác vì sao Google khuyến nghị điều này (see đó responsive design
deep dive, và cách all three fit together trong đó mobile SEO hub).
Cách nó hoạt động: người dùng-agent detection + Vary header
máy chủ inspects incoming người dùng-agent string — identifier mỗi client
gửi — decides liệu nó mobile, tablet, hoặc desktop device, và trả về
matching HTML. vì URL là giống hệt cho mọi người, máy chủ sau đó có để
announce đó phản hồi varies by người dùng-agent. đó Vary: User-Agent
header, và Google archived hướng dẫn là precise đó nó làm hai distinct
jobs — không collapse them vào một:
“It signals to caching servers used in ISPs and elsewhere that they should consider the user agent when deciding whether to serve the page from cache or not. Without the Vary HTTP header, a cache may mistakenly serve mobile users the cache of the desktop HTML page or vice versa. It helps Googlebot discover your mobile-optimized content faster, as a valid Vary HTTP header is one of the signals we may use to crawl URLs that serve mobile-optimized content.” (bản dịch) «Điều này các tín hiệu để bộ nhớ đệm các máy chủ dùng trong ISPs và elsewhere đó they nên consider người dùng agent khi deciding liệu để serve đó trang từ bộ nhớ đệm hoặc không. Không có đó Vary HTTP header, một bộ nhớ đệm có thể mistakenly serve mobile người dùng đó bộ nhớ đệm of đó desktop HTML trang hoặc vice versa. Điều này helps Googlebot discover của bạn mobile-optimized nội dung nhanh hơn, as một hợp lệ Vary HTTP header là một of đó các tín hiệu we có thể dùng để crawl URLs đó serve mobile-optimized nội dung.»
So job một là bộ nhớ đệm correctness — pure UX/correctness concern independent của cácông cụ tìm kiếm — và job hai là crawl phát hiện. phần lớn đối thủ glossary các trang chỉ mention đầu tiên (hoặc blur hai). Trong thực HTTP phản hồi nó looks như điều này:
HTTP/1.1 200 OK
Content-Type: text/html
Vary: User-Agent
Content-Length: 5710nếu của bạn máy chủ đã gửi Vary header cho điều gì đó khác (như
Accept-Encoding), bạn thêm User-Agent để list thay vì thay thế nó.
Worth separating rõ ràng: Vary itself là đơn giản HTTP bộ nhớ đệm mechanism, không
SEO invention. nó tells bộ nhớ đệmà yêu cầu các header để fold vào bộ nhớ đệmấu chốt so
nó có thể store right variant — nó không detect devices hoặc understand SEO tại all;
của bạn máy chủ người dùng-agent logic làm đó riêng, và Google crawl-phát hiện
sử dụng của header (job hai, trên) là Google own characterization của tín hiệu nó
watches cho, không bộ nhớ đệm-giao thức requirement mỗi bộ nhớ đệm follows giống nhau way.
gửi nó consistently cho được cho URL — including on 304 Not Modified các phản hồi và
bất kỳ default/fallback phản hồi — hoặc bộ nhớ đệm có thể end lên holding inconsistent metadata
về Điều gì nó storing.
cost phần lớn các hướng dẫn skip: CDN bộ nhớ đệm fragmentation
Ở đây angle gần như mỗi xếp hạng trang misses. Vary: User-Agent không phải free —
nó fragments của bạn bộ nhớ đệm. bộ nhớ đệm keys entries partly on Vary-listed các header, so
Vary: User-Agent có nghĩ là tách biệt được lưu đệm copy cho mỗi distinct người dùng-agent
string đó hits trang web: mỗi trình duyệt version, mỗi OS xây dựng, mỗi bot. đó
thousands của variants cho nội dung đó chỉ thực sự có hai hoặc three thực versions —
though chính xácách nhiều reuse bạn lose phụ thuộc vào của bạn CDN’s own bộ nhớ đệm-mấu chốt xử lý
(some normalize hoặc group similar người dùng-agent strings, phần lớn không), so có không
single universal hit-rate mất mát để quote; treat bất kỳ cụ thể multiplier, including
SiteGround dưới, as một vendor estimate thay vì guaranteed number cho
của bạn stack.
SiteGround put đó practical cost plainly: “With the User-Agent [header] enabled, the system will keep different copies for each combination of OS and browser version visiting your site… you will have 5-30 dynamic requests for the same 100 visits. So the very same site will use 5-30 times the resources.” (bản dịch) «Với người dùng-Agent [header] enabled, đó hệ thống sẽ giữ khác nhau copies cho mỗi combination of OS và trình duyệt version visiting trang web của bạn… bạn sẽ có 5-30 dynamic các yêu cầu cho đó giống nhau 100 visits. So đó very giống nhau site sẽ dùng 5-30 times đó các tài nguyên.» Và này hits các crawler hard: “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.” (bản dịch) «Nếu such [một] bot bắt đầu crawling trang web của bạn và bạn có đó Vary: Người dùng-Agent header, mỗi yêu cầu điều này làm để trang web của bạn sẽ là một dynamic một và sẽ eat lên của bạn các tài nguyên.»
Này không new. Back trong 2013, Cindy Krum warned trong Search Engine Land
đó enterprise CDNs treated đó header as mộtín hiệu đó nội dung “cannot be cached
or served from the CDN and must be fetched directly from your server” (bản dịch) «không thể là được lưu đệm hoặc phân phối từ đó CDN và phải được fetched trực tiếp từ máy chủ của bạn» — potentially
“rendering your CDN completely useless” (bản dịch) «kết xuất của bạn CDN completely useless» cho dynamically-phân phối các trang. Đó cụ thể
2013 vendor behavior có changed, nhưng đó underlying tension — Vary: User-Agent
fragments bộ nhớ đệm keys — là vẫn technically real, và đây là một major reason dynamic
serving fell out of favor even among các trang đó đã không worried về SEO. SiteGround
cũng làm đó practical point đó “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” (bản dịch) «hầu hết of đó các trang không thực ra serve khác nhau HTML cho của họ mobile versions. đây là đó responsive CSS đó làm all đó nặng lifting» — meaning một lot of Vary: User-Agent các header trong đó wild là đơn giản
leftover misconfigurations on các trang đó là thực sự responsive.
là dynamic serving cloaking?
Không — không inherently. risk là về outcome và intent, không technique.
Detecting device và serving nó device-appropriate nội dung là fine; danger là
either () detection bug hoặc bị thiếu Vary header đó accidentally phục vụ Googlebot
sai hoặc hỏng version, hoặc (b) có chủ ý serving cácông cụ tìm kiếm meaningfully
khác nội dung hơn người dùng nhận. Google own archived dynamic-serving hướng dẫn là
blunt về trap:
“Be very careful of cloaking when detecting user agents… it should not be looking specifically for Googlebot. All Googlebot user agents identify themselves as specific mobile devices, and you should treat these Googlebot user agents exactly like you would treat these devices.” (bản dịch) «Là very careful of cloaking khi detecting người dùng agents… điều này không nên là looking cụ thể cho Googlebot. All Googlebot người dùng agents identify themselves as cụ thể mobile devices, và bạnên treat những Googlebot người dùng agents chính xác như bạn sẽ treat những devices.»
Đó parallel là Google vẫn-trực tiếp dynamic kết xuất doc, mà trạng thái đó chung principle cho đó related JS-kết xuất case: “As long as your dynamic rendering produces similar content, Googlebot won’t view dynamic rendering as cloaking,” (bản dịch) «Miễn là của bạn dynamic kết xuất produces similar nội dung, Googlebot sẽ không view dynamic kết xuất as cloaking,» trong khi “serving completely different content to users and crawlers can be considered cloaking.” (bản dịch) «serving completely khác nhau nội dung để người dùng và các crawler có thể là considered cloaking.» Giống nhau logic áp dụng để dynamic serving: substantially-đó-giống nhau nội dung phân phối theo device là fine; một misconfiguration đó looks như cloaking là đó real danger.
Dynamic serving so với. dynamic kết xuất — không confuse những điều này
Đây là single clearest điều phần lớn competing nội dung nhận sai, so nó worth hard line:
- Dynamic serving = device variance. Giống nhau URL, khác nhau HTML cho mobile so với. desktop. Đó topic of này trang. Google folded của nó hướng dẫn vào đó mobile-đầu tiên lập chỉ mục doc.
- Dynamic kết xuất = JS-kết xuất variance cho bots. Serving một pre-được kết xuất/ máy chủ-được kết xuất version of một JavaScript-nặng trang để các crawler trong khi người dùng nhận đó client-được kết xuất version. Điều này có của nó own dedicated, vẫn-trực tiếp Google doc, và Bing covers điều này trong của nó 2018 bingbot post (“Dynamic rendering is about detecting user agent and rendering content differently for humans and search engine crawlers” (bản dịch) «Dynamic kết xuất là về detecting người dùng agent và kết xuất nội dung differently cho humans và công cụ tìm kiếm các crawler» — note: đó là về JS kết xuất cho bingbot, không device-based serving).
họ’re easy để conflate vì cả hai sử dụngười dùng-agent detection và cả hai raise cloaking câu hỏi — nhưng họ’re khácác vấn đề với khác tài liệu.
Người dùng-agent detection là genuinely lỗi-prone
Google archived hướng dẫn listed đó phổ biến các chế độ lỗi, và they vẫn hold: người dùng-agent lists cần constant maintenance và sẽ không match brand-new agents; đây là easy để mismatch — “sometimes detecting a desktop user agent as a mobile one or detecting a mobile user agent as a desktop” (bản dịch) «sometimes detecting một desktop người dùng agent as một mobile một hoặc detecting một mobile người dùng agent as một desktop»; và một cụ thể classic, “a common mistake for sites is to inadvertently treat tablet devices as smartphones.” (bản dịch) «một lỗi thường gặp cho các trang là để inadvertently treat tablet devices as smartphones.» Google own summary — “Use the Vary HTTP header to signal your changes depending on the user agent. Detect user agent strings correctly.” (bản dịch) «Dùng đó Vary HTTP header để tín hiệu của bạn thay đổi depending on người dùng agent. Detect người dùng agent strings correctly.» — sounds đơn giản nhưng là đó toàn bộ maintenance burden trong hai sentences.
Google có fielded những mistakes cho một decade. Back trong January 2015, Pierre Far of
Google flagged
đó top implementation các vấn đề he saw — khoảng xử lý JavaScript, CSS, và image
variants correctly across devices, không chỉ đó Vary header — một reminder đó “add
the header” (bản dịch) «thêm đó header» đã là không bao giờ đó toàn bộ story.
Vì sao responsive design là hiện tại default
Hai forces đã làm dynamic serving một legacy pattern. Đầu tiên, Google có được khuyến nghị responsive design “because it’s the easiest design pattern to implement and maintain” (bản dịch) «vì đây là đó easiest design pattern để implement và maintain» since ít nhất 2015 — một version, không device-detection risk tại all. Second, mobile-đầu tiên lập chỉ mục đã hoàn tất trong 2023–2024, mà raised đó stakes of getting device serving sai: đó mobile version là hiện tại đó version Google primarily crawl, indexes, và ranks, so một dynamic-serving misconfiguration không chỉ serve Googlebot một bad mobile trang — điều này serves Googlebot của bạn chính được lập chỉ mục nội dung, sai. Đó giống nhau push away từ device-cụ thể setups đó áp dụng để tách biệt m-dot URLs áp dụng để dynamic serving cũng: consolidate để một responsive URL và đó toàn bộ class of các vấn đề disappears.
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 indexingcho đầy đủ mobile picture — nội dung parity, Core Web Vitals on mobile, usability, interstitials, và nơi AMP stands — see mobile SEO hub và mobile SEO checklist.
Cách kiểm tra nếu trang web dùng dynamic serving
Concrete và fast: yêu cầu giống nhau URL twice với khác người dùng-agent strings và
so sánh. nếu HTML differs và phản hồi carries Vary: User-Agent, nó
dynamic serving. nếu HTML là giống hệt (và nó chỉ re-luồng qua CSS), nó
responsive. Scripts tab có curl, DevTools, và bookmarklet versions. tell để
watch cho: HTML đó differs by device nhưng không Vary header — đó
misconfiguration đó risks caches và các crawler seeing sai version.
AI summary
condensed take on Nâng cao version:
- Dynamic serving = giống nhau URL, khác nhau HTML/CSS theo người dùng-agent (desktop so với.
mobile so với. tablet), detected máy chủ-side và signaled với đó
Vary: User-Agentheader phản hồi. - Một of three mobile configs: responsive design (giống nhau URL + giống nhau HTML, CSS
media các truy vấn — Google khuyến nghị), dynamic serving (giống nhau URL, khác nhau
HTML), và tách biệt URLs / m-dot (khác nhau URL + khác nhau HTML). Hai of đó three
phụ thuộc on
Vary. - Đó
Vary: User-Agentheader làm hai jobs: (1) dừng caches (các trình duyệt, CDNs, ISPs) serving một mobile khách truy cập đó được lưu đệm desktop trang hoặc vice versa, và (2) trong lịch sử helped Googlebot discover đó mobile version. Hầu hết đối thủ nội dung mentions chỉ đó đầu tiên. - Điều này có một real cost:
Vary: User-Agentfragments CDN bộ nhớ đệm keys across mỗi distinct UA string (mỗi trình duyệt/OS/bot), multiplying origin các yêu cầu (SiteGround estimates 5–30×). MỘT major, dưới-discussed reason các trang moved off điều này. - Cloaking risk là về outcome, không đó technique. Serving device-appropriate
nội dung là fine; đó danger là một detection bug/bị thiếu
Varyserving Googlebot đó sai version, hoặcó chủ ý serving các crawler khác nhau nội dung. Không bao giờ special-case “Googlebot” trong detection — treat của nó declared device như bất kỳ device. - Người dùng-agent detection là lỗi-prone: stale UA lists, desktop-as-mobile mismatches, và treating tablets as phones.
- Không đó giống nhau as dynamic kết xuất (pre-kết xuất JS cho bots) — khác nhau concept, khác nhau Google/Bing tài liệu.
- Legacy pattern trong 2026. Google có được khuyến nghị responsive since ~2015, và mobile-đầu tiên lập chỉ mục (hoàn tất 2023–2024) raised đó stakes of một dynamic-serving misconfiguration. Mostly điều gì đó bạn audit an older/enterprise site off of.
- Để detect điều này: yêu cầu đó giống nhau URL với một desktop so với. mobile UA, so sánh đó
HTML, và kiểm tra cho đó
Vary: User-Agentheader.
Tài liệu chính thức
Chính-nguồn tài liệu từ cácông cụ tìm kiếm.
- Mobile-đầu tiên Lập chỉ mục Thực hành tốt nhất — nơi đó dynamic serving và tách biệt-URLs definitions hiện tại trực tiếp (đó dedicated dynamic-serving trang đã là folded trong ở đây) và nơi Google trạng thái đó responsive-design khuyến nghị.
- Dynamic Serving (original dedicated doc — archived) — đó retired, nhiều richer trang (cuối cùng đã cập nhật Jan 2021). Này là đó nguồn cho đó “two jobs of the Vary header” (bản dịch) «hai jobs of đó Vary header» lời giải thích và người dùng-agent-detection các chế độ lỗi. Đó trực tiếp URL hiện tại 301-các chuyển hướng để đó mobile-đầu tiên lập chỉ mục hướng dẫn, mà dropped hầu hết of này detail.
- Dynamic Kết xuất as một workaround — đó related-nhưng-distinct JS-kết xuất concept, với đó “not cloaking if the content is similar” (bản dịch) «không cloaking nếu đó nội dung là similar» clarification. Cited ở đây chỉ để draw đó phân biệt.
- Announcing mobile-đầu tiên lập chỉ mục cho đó toàn bộ web (Mar 2020) — context on vì sao device serving matters hơn hôm nay.
Bing / Microsoft
- bingbot Series: JavaScript, Dynamic Kết xuất, và Cloaking. Oh My! (Oct 2018) — Bing hướng dẫn on dynamic kết xuất (JS-cho-bots), không device-based dynamic serving. Bing không xuất hiện để publish dedicated device-based dynamic-serving/
Varydoc way Google trong lịch sử đã làm; nó broadly favors responsive/single-URL setups.
#:~:text= anchors. Re-xác nhận snapshot loads trước khi treating as cuối. Quotes từ nguồn
On—record statements từ Google và ngành. Trực tiếp Google-doc links là deep links đó jump để quoted passage; archived và relayed sources là noted.
Google — definition và khuyến nghị (trực tiếp doc)
- “Dynamic serving: Uses the same URL regardless of device. This configuration relies on user-agent sniffing and the
Vary: user-agentHTTP response header to serve a different version of the HTML to different devices.” (bản dịch) «Dynamic serving: Dùng đó giống nhau URL regardless of device. Này configuration relies on người dùng-agent sniffing và đóVary: user-agentHTTP header phản hồi để serve một khác nhau version of đó HTML để khác nhau devices.» — Google Search Central tài liệu. Jump để quote - “Separate URLs: Serves different HTML to each device, and on separate URLs. Like dynamic serving, this configuration relies on the user-agent and
VaryHTTP headers to redirect users to the device-appropriate version of the site.” (bản dịch) «Tách biệt URLs: Serves khác nhau HTML để mỗi device, và on tách biệt URLs. Như dynamic serving, này configuration relies on người dùng-agent vàVaryHTTP các header để chuyển hướngười dùng để đó device-appropriate version of đó site.» Jump để quote - “Google recommends Responsive Web Design because it’s the easiest design pattern to implement and maintain.” (bản dịch) «Google khuyến nghị Responsive Web Design vì đây là đó easiest design pattern để implement và maintain.» Jump để quote
Google — Vary header hai jobs (archived dedicated doc, cuối cùng đã cập nhật Jan 2021)
- “The Vary HTTP header has two important and useful implications: It signals to caching servers used in ISPs and elsewhere that they should consider the user agent when deciding whether to serve the page from cache or not. Without the Vary HTTP header, a cache may mistakenly serve mobile users the cache of the desktop HTML page or vice versa. It helps Googlebot discover your mobile-optimized content faster.” (bản dịch) «Đó Vary HTTP header có hai quan trọng và hữu ích implications: Điều này các tín hiệu để bộ nhớ đệm các máy chủ dùng trong ISPs và elsewhere đó they nên consider người dùng agent khi deciding liệu để serve đó trang từ bộ nhớ đệm hoặc không. Không có đó Vary HTTP header, một bộ nhớ đệm có thể mistakenly serve mobile người dùng đó bộ nhớ đệm of đó desktop HTML trang hoặc vice versa. Điều này helps Googlebot discover của bạn mobile-optimized nội dung nhanh hơn.» — Google Search Central, Dynamic Serving (archived).
- “Be very careful of cloaking when detecting user agents… it should not be looking specifically for Googlebot. All Googlebot user agents identify themselves as specific mobile devices, and you should treat these Googlebot user agents exactly like you would treat these devices.” (bản dịch) «Là very careful of cloaking khi detecting người dùng agents… điều này không nên là looking cụ thể cho Googlebot. All Googlebot người dùng agents identify themselves as cụ thể mobile devices, và bạnên treat những Googlebot người dùng agents chính xác như bạn sẽ treat những devices.» — Google Search Central, Dynamic Serving (archived).
Google — dynamic kết xuất ( distinct concept) (trực tiếp doc)
- “As long as your dynamic rendering produces similar content, Googlebot won’t view dynamic rendering as cloaking.” (bản dịch) «Miễn là của bạn dynamic kết xuất produces similar nội dung, Googlebot sẽ không view dynamic kết xuất as cloaking.» Jump để quote
SiteGround — CDN cost của Vary: User-Agent (ngành)
- “With the User-Agent [header] enabled, the system will keep different copies for each combination of OS and browser version visiting your site… you will have 5-30 dynamic requests for the same 100 visits. So the very same site will use 5-30 times the resources.” (bản dịch) «Với người dùng-Agent [header] enabled, đó hệ thống sẽ giữ khác nhau copies cho mỗi combination of OS và trình duyệt version visiting trang web của bạn… bạn sẽ có 5-30 dynamic các yêu cầu cho đó giống nhau 100 visits. So đó very giống nhau site sẽ dùng 5-30 times đó các tài nguyên.» — SiteGround, “How the Vary HTTP Header Can Be Bad.” (bản dịch) «Cách đó Vary HTTP Header Có thể Là Bad.»
Mà mobile configuration nên I sử dụng?
Gần như mọi người nên land on responsive design — nhưng điều này walks thực decision, including cases nơi dynamic serving hoặc tách biệt các URL nhận considered, và Điều gì để làm nếu bạn’ve inherited một.
Responsive, dynamic serving, or separate URLs?
ngắn version: responsive là câu trả lời cho gần như mỗi case. Dynamic serving và m-dot là điều bạn manage xuống on các trang đó đã có them, không patterns để reach cho new.
Dynamic serving audit checklist
- yêu cầu giống nhau URL với representative desktop và mobile người dùng agents và xác nhận liệu HTML intentionally differs.
- gửi
Vary: User-Agenton mỗi phản hồi whose representation thay đổi by device class, including được lưu đệm và lỗi các phản hồi nơi applicable. - giữ chính copy, headings, liên kết nội bộ, images và alt text, metadata, robots directives, và dữ liệu có cấu trúc tương đương across versions.
- Kiểm thử Googlebot Smartphone nhận giống nhau mobile representation as thông thường mobile trình duyệt; không bao giờ special-case crawler.
- kiểm tra CDN bộ nhớ đệm keys và hit behavior so một device class không thể nhận khác được lưu đệm document.
- Repeat mỗi yêu cầu several times qua CDN/bộ nhớ đệm edge (không chỉ single origin fetch) across desktop, mobile, tablet, và bot người dùng agents — bộ nhớ đệm-poisoning thất bại chỉ hiển thị lên sau khi variant là warmed và re-requested, không on đầu tiên fetch.
- bao gồm tablets, unfamiliar người dùng agents, và bị thiếu người dùng-agent các header trong fallback kiểm thử matrix.
- Xóa
Vary: User-AgentKhi trang web có become genuinely responsive và phản hồi không lâu hơn thay đổi. - giữ được ghi lại migration path toward responsive design nơi dynamic serving là legacy thay vì requirement.
Dynamic serving — bảng tra nhanh
Definition: giống nhau URL, khác HTML/CSS theo người dùng-agent, signaled với Vary: User-Agent.
** three mobile configs**
| Config | giống nhau URL? | giống nhau HTML? | mấu chốtín hiệu | Google stance |
|---|---|---|---|---|
| Responsive design | Có | Có | CSS media các truy vấn | Được khuyến nghị |
| Dynamic serving | Có | Không (by UA) | Vary: User-Agent | Hoạt động, fragile |
| Tách biệt các URL (m-dot) | Không | Không | rel=canonical/alternate + Vary | Least được khuyến nghị |
** Vary: User-Agent header — hai jobs**
- bộ nhớ đệm correctness — dừng các trình duyệt/CDNs/ISPs serving sai device được lưu đệm version.
- Crawl phát hiện — trong lịch sử helped Googlebot tìm mobile version.
Điều gì nó looks như
HTTP/1.1 200 OK
Vary: User-Agent** hidden cost**
Vary: User-Agentfragments CDN bộ nhớ đệm keys across mỗi UA string (mỗi trình duyệt/OS/bot).- SiteGround estimate: 5–30× origin các yêu cầu cho giống nhau traffic.
- nếu của bạn HTML là thực ra giống hệt theo device → header là leftover misconfiguration; xóa nó.
Cloaking rule
- Serving device-appropriate nội dung = fine.
- Detection bug / bị thiếu
Varyserving Googlebot sai version = thực risk. - không bao giờ special-case “Googlebot” trong detection — treat của nó declared device như bất kỳ device.
phổ biến detection failures
- Stale người dùng-agent string lists (miss new devices).
- Desktop đọc as mobile hoặc vice versa.
- Tablets được xem như smartphones (kinh điển).
không confuse với: dynamic kết xuất = pre-kết xuất JS cho bots (khác concept, khác doc).
2026 reality: legacy pattern. Google có được khuyến nghị responsive since ~2015; mobile-đầu tiên lập chỉ mục (hoàn tất 2023–2024) raised stakes. Audit off nó; không xây dựng fresh.
Detect dynamic serving on bất kỳ URL
cốt lõi kiểm thử: yêu cầu giống nhau URL với desktop và mobile người dùng-agent,
so sánh HTML, và kiểm tra cho Vary: User-Agent header. nếu HTML differs,
nó dynamic serving (hoặc m-dot, nếu URL thay đổi); nếu phản hồi varies nhưng
có không Vary header, đó misconfiguration để flag.
curl — so sánh desktop so với. mobile các phản hồi (macOS / Linux)
URL="https://example.com/"
DESKTOP="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36"
MOBILE="Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Mobile Safari/537.36"
# Fetch both, hash the body — different hashes = different HTML per device
curl -sA "$DESKTOP" "$URL" | shasum
curl -sA "$MOBILE" "$URL" | shasum
# Is the site even sending Vary: User-Agent? (headers only)
curl -sI "$URL" | grep -i '^vary:'curl — impersonate Googlebot smartphone (verify Điều gì crawler nhận)
GBOT="Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
curl -sA "$GBOT" "https://example.com/" | shasum
# Compare to the $MOBILE hash above — they should match. If Googlebot gets the
# desktop version, that's the misconfiguration that can look like cloaking.Windows (PowerShell) — giống nhau so sánh
$Url = "https://example.com/"
$Desktop = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36"
$Mobile = "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Mobile Safari/537.36"
(Invoke-WebRequest $Url -UserAgent $Desktop).RawContentLength
(Invoke-WebRequest $Url -UserAgent $Mobile ).RawContentLength
(Invoke-WebRequest $Url -Method Head).Headers["Vary"]Chrome DevTools — không terminal needed
- Open DevTools (
F12/Cmd+Opt+I), open đó Network conditions tab (⋮→ Hơn tools → Network conditions). - Uncheck “Use browser default,” (bản dịch) «Dùng trình duyệt default,» pick một mobile UA (hoặc paste Googlebot’s smartphone
string), và reload. So sánh đó được kết xuất trang và, trong đó Network panel, đó
document yêu cầu Các header phản hồi cho
Vary. - Toggle back để một desktop UA và reload — khác nhau HTML on đó giống nhau URL là của bạn tell.
trình duyệt-console snippet — kiểm tra hiện tại trang Vary header
// Paste in the DevTools Console on the page you're testing
fetch(location.href, { method: "HEAD", cache: "no-store" })
.then(r => console.log("Vary:", r.headers.get("vary") || "(none)"));Bookmarklet — một-nhấp Vary kiểm tra
javascript:(async()=>{const r=await fetch(location.href,{method:"HEAD",cache:"no-store"});alert("Vary: "+(r.headers.get("vary")||"(none set)"));})();Note: fetch chỉ exposes phản hồi các header máy chủ cho phép qua CORS cho
cross-origin các yêu cầu, so console/bookmarklet kiểm tra là phần lớn reliable on
giống nhau origin bạn’re viewing. cho definitive header đọc, sử dụng curl -I hoặc
DevTools Network panel.
Tools cho auditing device-phụ thuộcác phản hồi
curl: Repeat giống nhau yêu cầu với rõ ràng desktop, mobile, và Googlebot Smartphone người dùng agents; so sánh các header, status, thân phản hồi size, và nội dung hashes.- Chrome DevTools Network panel: Override người dùng agent, disable bộ nhớ đệm, và inspect thực tế document phản hồi thay vì assuming device emulation thay đổi nó.
- Search Console URL Inspection: kiểm tra được kết xuất HTML Googlebot Smartphone đã nhận cho representative các URL.
- ** crawler với người dùng-agent configuration:** Chạy tách biệt mobile và desktop crawl, sau đó diff các tiêu đề, headings, canonicals, directives, dữ liệu có cấu trúc, và internal links tại scale.
- CDN bộ nhớ đệm phân tích: Segment hits, misses, và bộ nhớ đệm keys by device class để tìm bộ nhớ đệm fragmentation hoặc cross-device leakage.
Dynamic serving anti-patterns
Đó các chế độ lỗi đó turn dynamic serving từ “hoạt động” vào “actively hurting you” (bản dịch) «actively hurting bạn»:
1. Serving khác HTML với không Vary: User-Agent header.
cardinal sin. không có nó, bộ nhớ đệm có thể store desktop version và hand nó để
phone (hoặc hand Googlebot smartphone desktop trang). nội dung varies nhưng không có gì
tells caches hoặcác crawler đó — so sai version leaks. nếu bạn phục vụ theo-device
HTML, header là non-negotiable.
2. Thêm Vary: User-Agent on một site đó là thực ra responsive.
Đó opposite mistake, và một phổ biến một. Nếu của bạn HTML là giống hệt across devices,
đó header làm không có gì hữu ích và fragments của bạn CDN bộ nhớ đệm across mỗi người dùng-agent
string (SiteGround: 5–30× đó các yêu cầu). không thêm điều này “to be thorough” (bản dịch) «để là thorough» — chỉ khi
bạn genuinely serve khác nhau HTML theo device.
3. Special-casing “Googlebot” trong detection logic. Detecting device class là fine; sniffing cụ thể cho Googlebot và serving nó điều gì đó khác là Cách accidental cloaking happens. Googlebot announces itself as cụ thể mobile device — treat nó chính xác như đó device.
4. Letting desktop và mobile HTML drift out của parity. Hai versions có nghĩ là hai điều để giữ trong sync. Dưới mobile-đầu tiên lập chỉ mục, mobile version là Điều gì được lập chỉ mục — so nội dung, dữ liệu có cấu trúc, images/alt text, và links đó exist chỉ on desktop là, cho lập chỉ mục purposes, đã biến mất.
5. Stale người dùng-agent lists và tablet-as-phone mismatches. UA-detection lists rot: new devices go unmatched, desktops nhận đọc as mobile, và tablets nhận được xem như smartphones. Detection bạn thiết lập sau khi và không bao giờ revisit sẽ âm thầm misclassify growing slice của traffic.
6. Treating dynamic serving as fresh “option” để pick. nó không một của three co-equal choices trong 2026. Google có được khuyến nghị responsive since ~2015, và mobile-đầu tiên lập chỉ mục raised stakes. nếu bạn’re chọn new, chọn responsive; dynamic serving là legacy debt để manage xuống.
7. Confusing nó với dynamic kết xuất. Reaching cho JS pre-kết xuấtài liệu (hoặc Bing bingbot post) để configure device-based serving. khác vấn đề, khác giải pháp — mixing them produces hướng dẫn đó fits neither.
phổ biến dynamic serving failures
Mobile người dùng intermittently nhận desktop trang
Symptom: đúng mobile phản hồi xuất hiện on cold yêu cầu nhưng desktop HTML
xuất hiện sau khi bộ nhớ đệm hits. có khả năng nguyên nhân: phản hồi varies by người dùng agent không có
matching bộ nhớ đệmấu chốt hoặc Vary: User-Agent. khắc phục: đúng origin header và CDN
configuration, purge affected objects, sau đó repeat cross-device các yêu cầu so với warm
bộ nhớ đệm entries.
Googlebot Smartphone sees ít hơnội dung
Symptom: URL Inspection lacks copy, links, dữ liệu có cấu trúc, hoặc images khả dụng on desktop. có khả năng nguyên nhân: Mobile templates có drifted hoặc device detection routed Googlebot incorrectly. khắc phục: Restore parity từ shared nội dung nguồn và kiểm thử chính xác smartphone crawler agent alongside thông thường phone agent.
responsive trang web có poor bộ nhớ đệm efficiency
Symptom: HTML là giống hệt across devices nhưng CDN stores nhiều người dùng-agent
variants. có khả năng nguyên nhân: legacy Vary: User-Agent header survived migration
để responsive design. khắc phục: Verify phản hồi truly không lâu hơn thay đổi, xóa
header, purge variants, và xác nhận bộ nhớ đệm consolidates.
Validate dynamic serving thay đổi
Kiểm thử representation và header agreement
Kiểm thử để chạy: yêu cầu giống nhau URL với desktop và mobile người dùng agents và record
thân phản hồi hashes plus Vary header. Dự kiến kết quả: Intentionally khácác thân phản hồi
cả hai declare Vary: User-Agent; giống hệt responsive các thân phản hồi không carry needless
device variance. thất bại interpretation: bộ nhớ đệm signaling và origin behavior
disagree. Monitoring window: Immediate. Rollback trigger: khácác thân phản hồi có thể
share một unvaried bộ nhớ đệm object.
Kiểm thử warmed-bộ nhớ đệm isolation
Kiểm thử để chạy: Warm URL với một device class, sau đó yêu cầu nó as khác trong cả hai orders. Dự kiến kết quả: mỗi nhận của nó dự kiến representation mỗi time. thất bại interpretation: CDN bộ nhớ đệmấu chốt bỏ qua device biến động. Monitoring window: Immediate sau khi CDN hoặc header thay đổi. Rollback trigger: mobile yêu cầu nhận desktop HTML hoặc vice versa.
Kiểm thử mobile nội dung parity
Kiểm thử để chạy: Diff sample của desktop và mobile được kết xuất output cho chính nội dung, metadata, directives, links, và dữ liệu có cấu trúc. Dự kiến kết quả: Layout có thể differ, nhưng indexable meaning và các tín hiệu vẫn tương đương. thất bại interpretation: Template drift thay đổi Điều gì mobile-đầu tiên lập chỉ mụcó thể sử dụng. Monitoring window: On phát hành và sau khi recrawl trong URL Inspection. Rollback trigger: mobile representation drops indexable element hoặc adds restrictive directive.
Tự kiểm tra: Dynamic Serving
Five nhanh cácâu hỏi on dynamic serving và Vary header. Pick câu trả lời cho
mỗi, sau đó kiểm tra.
các tài nguyên worth của bạn time
My related writing
- Người mới bắt đầu Hướng dẫn để kỹ thuật SEO — nơi mobile configuration và crawl/chỉ mục fit bigger picture.
- JavaScript SEO Các vấn đề & Thực hành tốt nhất — relevant cho dynamic kết xuất concept mọi người confuse với dynamic serving ( JS-cho-bots side, không device serving).
Vary: User-Agent header — nó hẹp, largely-legacy configuration — so hai các hướng dẫn trên là closest related đầu tiên-party context thay vì trực tiếp coverage của điều này chính xác topic.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 cách Googlebot crawl as một smartphone (mà là vì sao device-serving misconfigurations bite dưới mobile-đầu tiên lập chỉ mục). (Standing disclaimer: “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 để là 100% hoàn tất hoặc chính xác.»)
Từ khoảng đó ngành
- Mobile-đầu tiên Lập chỉ mục Thực hành tốt nhất (Google) — đó hiện tại home of đó dynamic serving và tách biệt-URLs definitions và đó responsive-design khuyến nghị.
- Dynamic Serving (archived original Google doc) (Google, qua Wayback Machine) — đó retired, hơn detailed trang với đó hai-jobs-of-Vary lời giải thích và người dùng-agent-detection các chế độ lỗi.
- Dynamic kết xuất as một workaround (Google) — đó distinct JS-kết xuất concept, với đó “similar content isn’t cloaking” (bản dịch) «similar nội dung không cloaking» clarification.
- Mobile Site Configuration & Đó Vary HTTP Header (Search Engine Land, Cindy Krum, 2013) — đó enterprise CDN so với.
Varyheader conflict. Dated, nhưng đó underlying bộ nhớ đệm-fragmentation tension vẫn holds. - Cách đó Vary HTTP Header Có thể Là Bad (SiteGround) — đó đơn giản-terms breakdown of
Vary: User-Agentbộ nhớ đệm fragmentation và đó 5–30× tài nguyên-cost estimate. - Google Top Three Các vấn đề They See Với Dynamic Serving Mobile Các trang (Công cụ tìm kiếm Roundtable, 2015) — Pierre Far flagged JS/CSS/image implementation mistakes, an sớm “even Google was fielding this” (bản dịch) «even Google đã là fielding này» record.
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.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
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.