Panduan Dynamic Serving
Apa dynamic serving adalah, dua jobs dari Vary pengguna-Agent header, mengapa ini adalah sebuah legacy pattern, dan bagaimana ini differs dari responsive design dan dynamic rendering.
Bahasa
Dynamic serving berarti satu URL mengembalikan berbeda HTML/CSS depending pada requesting pengguna-agent — desktop mendapatkan satu halaman, mobile mendapatkan lainnya — dan server harus kirim Vary: pengguna-Agent header so caches dan crawler jangan sajikan wrong versi. ini adalah satu dari three mobile configurations (responsive, dynamic serving, terpisah m-dot URLs), dan Google recommends responsive design alih-alih karena dynamic serving bergantung pada error-prone pengguna-agent detection dan correct Vary headers. jangan confuse ini dengan dynamic rendering (pre-rendering JS untuk bot) — berbeda concept, berbeda doc. di 2026 ini adalah mostly sebuah legacy pattern Anda audit sebuah older atau enterprise situs off dari, tidak sesuatu untuk bangun fresh: pengindeksan mobile-pertama raised stakes dari getting device serving wrong, dan Vary: pengguna-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 indexingTL;DR — Dynamic serving adalah ketika sebuah situs web menggunakan satu web address tetapi mengirim sebuah berbeda halaman untuk phones daripada ini melakukan untuk desktops — server looks di apa device Anda’re pada dan mengembalikan berbeda HTML. ini berfungsi, tetapi Google akan rather Anda gunakan responsive design (satu halaman itu hanya re-alur untuk fit screen), karena dynamic serving adalah easy untuk mendapatkan wrong. jika Anda melakukan gunakan ini, server memiliki untuk kirim special
Vary: User-Agentheader so caches jangan hand wrong versi untuk wrong person.
Apa dynamic serving adalah
ada three cara sebuah situs dapat tangani mobile pengunjung:
- Responsive design — satu halaman, satu set dari HTML, dan layout re-alur untuk fit whatever screen Anda’re pada. ini adalah apa Google recommends.
- Dynamic serving — satu web address, tetapi server mengirim berbeda HTML untuk phones dan desktops. sama URL, berbeda halaman underneath.
- Terpisah URLs — sebuah seluruh terpisah mobile situs pada -nya own address, like
m.example.com.
Dynamic serving adalah middle option. Ketika Anda browser menanyakan untuk sebuah halaman, ini tells server apa ini adalah — sebuah phone, sebuah tablet, sebuah desktop — di sesuatu called pengguna-agent. dengan dynamic serving, server membaca itu, dan decides yang versi dari halaman untuk kirim back. Anda dan seseorang pada sebuah laptop dapat jenis tepat sama URL dan mendapatkan genuinely berbeda HTML.
Vary: User-Agent header
Di sini’s catch. Karena halaman perubahan depending pada device — tetapi URL
tidak — apa pun itu caches halaman (Anda browser, sebuah CDN, Anda internet provider)
dapat accidentally save desktop versi dan lalu hand ini untuk berikutnya person,
siapa’s pada sebuah phone. untuk mencegah itu, server memiliki untuk kirim little note dengan setiap
respons: Vary: User-Agent. ini berarti “itu konten dari ini halaman bergantung pada itu
device, so jangan reuse a cached copy across berbeda devices.” (terjemahan) “ konten dari ini halaman bergantung pada
device, so jangan reuse sebuah cached copy di seluruh berbeda devices.” Forget itu header
dan orang (dan Google) dapat end up seeing wrong versi.
Mengapa Google recommends terhadap ini
Dynamic serving relies pada server correctly guessing apa device Anda’re pada dari pengguna-agent — dan itu guessing adalah genuinely hard untuk pertahankan right. baru devices muncul, tablets mendapatkan mistaken untuk phones, dan ini adalah easy untuk ship sebuah desktop dan sebuah mobile versi itu diam-diam drift apart. Ketika itu happens, Google dapat end up seeing sebuah rusak atau wrong versi dari Anda halaman. So Google’s advice adalah sederhana: gunakan responsive design alih-alih, so ada hanya satu versi dan tidak ada apa pun untuk mendapatkan out dari sync.
hal orang mendapatkan wrong
jangan confuse dynamic serving dengan “dynamic rendering.” (terjemahan) “dynamic rendering.” mereka sound hampir identical dan keduanya involve server memeriksa pengguna-agent, tetapi mereka solve berbeda masalah. Dynamic serving adalah tentang giving phones dan desktops berbeda HTML. Dynamic rendering adalah tentang giving penelusuran-mesin bot sebuah pre-dibangun versi dari sebuah JavaScript-berat halaman. berbeda hal, berbeda Google documentation — lebih pada itu di Advanced tab.
di 2026, dynamic serving adalah mostly sesuatu Anda’ll inherit pada sebuah older atau besar
enterprise situs, tidak sesuatu anyone recommends membangun dari scratch. ingin penuh
versi — dua jobs dari Vary header, CDN cost sebagian besar guides skip,
cloaking pertanyaan, dan cara periksa jika sebuah situs adalah menggunakan ini — switch untuk
Advanced 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 indexingTL;DR — Dynamic serving = sama URL, berbeda HTML/CSS per pengguna-agent, detected server-side dan signaled dengan
Vary: User-Agentrespons header. ini adalah satu dari three mobile configs alongside responsive design (Google’s recommendation) dan terpisah URLs (m-dot).Varyheader melakukan dua jobs: (1) berhenti caches serving wrong device’s versi, dan (2) secara historis helped Googlebot menemukan mobile versi. ini memiliki sebuah nyata cost, though —Vary: User-Agentfragments CDN cache keys di seluruh setiap distinct UA string, multiplying origin muat. pengguna-agent detection adalah error-prone (stale UA lists, tablets baca sebagai phones), dan sebuah detection bug atau missingVarydapat membuat Google see wrong atau rusak versi — yang adalah di mana cloaking risk sebenarnya lives. jangan confuse ini dengan dynamic rendering (pre-rendering JS untuk crawler — sebuah berbeda concept dengan -nya own doc). di 2026 ini adalah sebuah legacy pattern untuk audit off dari, tidak bangun fresh.
Apa dynamic serving adalah, precisely
Google’s own definition, dari -nya pengindeksan mobile-pertama best-practices doc:
“Dynamic serving: Menggunakan itu sama URL regardless dari device. Ini configuration relies
pada user-agent sniffing dan itu Vary: user-agent HTTP response header untuk serve a
berbeda version dari itu HTML untuk berbeda devices.” (terjemahan) “Dynamic serving: menggunakan yang sama URL regardless dari device. ini configuration relies
pada pengguna-agent sniffing dan Vary: user-agent header HTTP untuk sajikan
berbeda versi dari HTML untuk berbeda devices.” now-retired dedicated
Google halaman put ini bahkan lebih concretely — dynamic serving adalah “a setup di mana itu
server responds dengan berbeda HTML (dan CSS) pada itu sama URL depending pada yang
user agent requests itu halaman (mobile, tablet, atau desktop).” (terjemahan) “sebuah setup di mana
server responds dengan berbeda HTML (dan CSS) pada yang sama URL depending pada yang
pengguna agent permintaan halaman (mobile, tablet, atau desktop).”
ini adalah satu dari three mobile configurations, dan paling bersih cara untuk see ini adalah sebuah three-baris table:
| Configuration | sama URL? | sama HTML? | Utama sinyal digunakan |
|---|---|---|---|
| Responsive design | Ya | Ya | CSS media kueri (tidak ada apa pun server-side) |
| Dynamic serving | Ya | Tidak (oleh pengguna-agent) | Vary: User-Agent header |
| Terpisah URLs (m-dot) | Tidak | Tidak | rel=canonical/rel=alternate + Vary |
Dua dari ini three bergantung pada Vary header. Google adalah jelas itu terpisah
URLs, “like dynamic serving, ini configuration relies pada itu user-agent dan Vary
HTTP headers.” (terjemahan) “like dynamic serving, ini configuration relies pada pengguna-agent dan Vary
header HTTP.” hanya responsive design memiliki tidak ada apa pun untuk mendapatkan out dari sync — yang adalah
persis mengapa Google recommends ini (see responsive design
deep dive, dan bagaimana semua three fit together di mobile SEO hub).
Bagaimana ini berfungsi: pengguna-agent detection + Vary header
server inspects incoming pengguna-agent string — identifier setiap client
mengirim — decides apakah ini adalah sebuah mobile, tablet, atau desktop device, dan mengembalikan
matching HTML. Karena URL adalah identical untuk everyone, server lalu memiliki untuk
announce itu respons varies oleh pengguna-agent. itu’s Vary: User-Agent
header, dan Google’s archived guidance adalah precise itu ini melakukan dua distinct
jobs — jangan collapse them ke satu:
“ini sinyal untuk caching server digunakan di ISPs dan elsewhere itu mereka seharusnya pertimbangkan pengguna agent ketika deciding apakah untuk sajikan halaman dari cache atau tidak. Tanpa Vary header HTTP, sebuah cache dapat mistakenly sajikan mobile pengguna cache dari desktop HTML halaman atau vice versa. ini helps Googlebot menemukan Anda mobile-dioptimalkan konten lebih cepat, sebagai sebuah valid Vary header HTTP adalah satu dari sinyal kami dapat gunakan untuk crawl URLs itu sajikan mobile-dioptimalkan konten.”
So job satu adalah cache correctness — sebuah pure UX/correctness concern independent dari mesin pencari — dan job dua adalah crawl penemuan. sebagian besar pesaing glossary halaman hanya mention pertama (atau blur dua). di sebuah nyata respons HTTP ini looks like ini:
HTTP/1.1 200 OK
Content-Type: text/html
Vary: User-Agent
Content-Length: 5710jika Anda server sudah mengirim sebuah Vary header untuk sesuatu else (like
Accept-Encoding), Anda tambahkan User-Agent untuk list alih-alih replacing ini.
Worth separating dengan jelas: Vary itself adalah sebuah plain HTTP caching mechanism, tidak sebuah
SEO invention. ini tells sebuah cache yang permintaan headers untuk fold ke cache key so
ini dapat store right variant — ini tidak detect devices atau memahami SEO di semua;
Anda server’s pengguna-agent logic melakukan itu secara terpisah, dan Google’s crawl-penemuan
gunakan dari header (job dua, di atas) adalah Google’s own characterization dari sebuah sinyal ini
watches untuk, tidak sebuah caching-protocol requirement setiap cache mengikuti yang sama cara.
kirim ini consistently untuk sebuah diberikan URL — including pada 304 Not Modified respons dan
apa pun default/fallback respons — atau sebuah cache dapat end up holding inconsistent metadata
tentang apa ini adalah storing.
cost sebagian besar guides skip: CDN cache fragmentation
Di sini’s angle hampir setiap peringkat halaman misses. Vary: User-Agent adalah tidak free —
ini fragments Anda cache. sebuah cache keys entries partly pada Vary-listed headers, so
Vary: User-Agent berarti sebuah terpisah cached copy untuk setiap distinct pengguna-agent
string itu hits situs: setiap browser versi, setiap OS bangun, setiap bot. itu’s
thousands dari variants untuk konten itu hanya benar-benar memiliki dua atau three nyata versi —
though persis bagaimana banyak reuse Anda lose bergantung pada Anda CDN’s own cache-key menangani
(beberapa normalize atau group similar pengguna-agent strings, sebagian besar jangan), so ada Tidak
single universal hit-rate kehilangan untuk quote; treat apa pun spesifik multiplier, including
SiteGround’s di bawah, sebagai satu vendor’s estimate alih-alih sebuah guaranteed angka untuk
Anda 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.” (terjemahan) “dengan pengguna-Agent [header] enabled, sistem akan pertahankan berbeda copies untuk setiap combination dari OS dan browser versi visiting Anda situs… Anda akan memiliki 5-30 dynamic permintaan untuk yang sama 100 visits. So very sama situs akan gunakan 5-30 times resources.” dan ini hits 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.” (terjemahan) “jika such [sebuah] bot dimulai crawling Anda situs dan Anda memiliki Vary: pengguna-Agent header, setiap permintaan ini membuat untuk Anda situs akan menjadi sebuah dynamic satu dan akan eat up Anda resources.”
ini tidak baru. Back di 2013, Cindy Krum warned di mesin pencari Land
itu enterprise CDNs treated header sebagai sebuah sinyal itu konten “cannot menjadi cached
atau served dari itu CDN dan harus menjadi fetched secara langsung dari Anda server” (terjemahan) “cannot menjadi cached
atau disajikan dari CDN dan harus menjadi fetched secara langsung dari Anda server” — potentially
“rendering Anda CDN completely useless” (terjemahan) “rendering Anda CDN completely useless” untuk dynamically-disajikan halaman. spesifik
2013 vendor perilaku memiliki changed, tetapi underlying tension — Vary: User-Agent
fragments cache keys — adalah masih technically nyata, dan ini adalah sebuah major alasan dynamic
serving fell out dari favor bahkan among situs itu tidak worried tentang SEO. SiteGround
juga membuat practical poin itu “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” (terjemahan) “sebagian besar dari situs jangan sebenarnya sajikan
berbeda HTML untuk mereka mobile versi. ini adalah responsive CSS itu melakukan semua
berat lifting” — meaning sebuah lot dari Vary: User-Agent headers di wild adalah sekadar
leftover misconfigurations pada situs itu adalah benar-benar responsive.
adalah dynamic serving cloaking?
Tidak — tidak inherently. risk adalah tentang outcome dan intent, tidak technique.
Detecting sebuah device dan serving ini device-appropriate konten adalah fine; danger adalah
either (sebuah) sebuah detection bug atau missing Vary header itu accidentally menyajikan Googlebot
wrong atau rusak versi, atau (b) dengan sengaja serving mesin pencari meaningfully
berbeda konten daripada pengguna mendapatkan. Google’s own archived dynamic-serving guidance adalah
blunt tentang trap:
“Menjadi very careful dari cloaking ketika detecting user agents… it seharusnya tidak menjadi looking secara khusus untuk Googlebot. All Googlebot user agents identify themselves sebagai specific mobile devices, dan Anda seharusnya treat ini Googlebot user agents persis like Anda akan treat ini devices.” (terjemahan) “menjadi very careful dari cloaking ketika detecting pengguna agents… ini seharusnya tidak menjadi looking secara khusus untuk Googlebot. semua Googlebot pengguna agents identify themselves sebagai spesifik mobile devices, dan Anda harus treat ini Googlebot pengguna agents persis like Anda akan treat ini devices.”
parallel adalah Google’s masih-langsung dynamic rendering doc, yang status umum principle untuk related JS-rendering case: “Sebagai long sebagai Anda dynamic rendering produces similar konten, Googlebot tidak akan view dynamic rendering sebagai cloaking,” (terjemahan) “sebagai panjang sebagai Anda dynamic rendering produces similar konten, Googlebot tidak akan view dynamic rendering sebagai cloaking,” sementara “serving completely different content to users and crawlers can be considered cloaking.” (terjemahan) “serving completely berbeda konten untuk pengguna dan crawler dapat menjadi considered cloaking.” sama logic applies untuk dynamic serving: substantially—sama konten disajikan per device adalah fine; sebuah misconfiguration itu looks like cloaking adalah nyata danger.
Dynamic serving vs. dynamic rendering — jangan confuse ini
ini adalah single clearest hal sebagian besar competing konten mendapatkan wrong, so ini adalah worth sebuah hard line:
- Dynamic serving = device variance. sama URL, berbeda HTML untuk mobile vs. desktop. topic dari ini halaman. Google folded -nya guidance ke mobile-pertama pengindeksan doc.
- Dynamic rendering = JS-rendering variance untuk bot. Serving sebuah pre-dirender/ server-dirender versi dari sebuah JavaScript-berat halaman untuk crawler sementara pengguna mendapatkan client-dirender versi. ini memiliki -nya own dedicated, masih-langsung Google doc, dan Bing covers ini di -nya 2018 bingbot post (“Dynamic rendering is about detecting user agent and rendering content differently for humans and search engine crawlers” (terjemahan) “Dynamic rendering adalah tentang detecting pengguna agent dan rendering konten differently untuk humans dan mesin pencari crawler” — note: itu’s tentang JS rendering untuk bingbot, tidak device-based serving).
mereka’re easy untuk conflate karena keduanya gunakan pengguna-agent detection dan keduanya raise cloaking pertanyaan — tetapi mereka’re berbeda masalah dengan berbeda docs.
pengguna-agent detection adalah genuinely error-prone
Google’s archived guidance listed umum failure modes, dan mereka masih hold: pengguna-agent lists perlu constant maintenance dan tidak akan match brand-baru agents; ini adalah easy untuk mismatch — “sometimes detecting a desktop user agent as a mobile one or detecting a mobile user agent as a desktop” (terjemahan) “sometimes detecting sebuah desktop pengguna agent sebagai sebuah mobile satu atau detecting sebuah mobile pengguna agent sebagai sebuah desktop”; dan sebuah spesifik classic, “a common mistake for sites is to inadvertently treat tablet devices as smartphones.” (terjemahan) “sebuah umum mistake untuk situs adalah untuk inadvertently treat tablet devices sebagai smartphones.” Google’s own summary — “Gunakan itu Vary HTTP header untuk sinyal Anda perubahan depending pada itu user agent. Detect user agent strings correctly.” (terjemahan) “gunakan Vary header HTTP untuk sinyal Anda perubahan depending pada pengguna agent. Detect pengguna agent strings correctly.” — sounds sederhana tetapi adalah seluruh maintenance burden di dua sentences.
Google memiliki fielded ini mistakes untuk sebuah decade. Back di January 2015, Pierre Far dari
Google flagged
top implementation masalah he saw — sekitar menangani JavaScript, CSS, dan image
variants correctly di seluruh devices, tidak hanya Vary header — sebuah reminder itu “add
the header” (terjemahan) “tambahkan
header” adalah tidak pernah seluruh story.
Mengapa responsive design adalah now default
Dua forces dibuat dynamic serving sebuah legacy pattern. pertama, Google memiliki recommended responsive design “because it’s the easiest design pattern to implement and maintain” (terjemahan) “karena ini adalah easiest design pattern untuk implement dan maintain” since setidaknya 2015 — satu versi, Tidak device-detection risk di semua. kedua, pengindeksan mobile-pertama selesai di 2023–2024, yang raised stakes dari getting device serving wrong: mobile versi adalah now versi Google primarily melakukan crawl, indeks, dan peringkat, so sebuah dynamic-serving misconfiguration tidak hanya sajikan Googlebot sebuah buruk mobile halaman — ini menyajikan Googlebot Anda utama terindeks konten, wrong. yang sama push away dari device-spesifik setups itu applies untuk terpisah m-dot URLs applies untuk dynamic serving too: consolidate untuk satu responsive URL dan seluruh class dari masalah 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 indexinguntuk penuh mobile picture — konten parity, Core Web Vitals pada mobile, usability, interstitials, dan di mana AMP stands — see mobile SEO hub dan mobile SEO checklist.
cara periksa jika sebuah situs menggunakan dynamic serving
Concrete dan fast: permintaan sama URL twice dengan berbeda pengguna-agent strings dan
bandingkan. jika HTML differs dan respons carries Vary: User-Agent, ini adalah
dynamic serving. jika HTML adalah identical (dan ini hanya re-alur melalui CSS), ini adalah
responsive. Scripts tab memiliki curl, DevTools, dan bookmarklet versi. tell untuk
watch untuk: HTML itu differs oleh device tetapi Tidak Vary header — itu’s
misconfiguration itu risks caches dan crawler seeing wrong versi.
AI summary
sebuah condensed take pada Advanced versi:
- Dynamic serving = sama URL, berbeda HTML/CSS per pengguna-agent (desktop vs.
mobile vs. tablet), detected server-side dan signaled dengan
Vary: User-Agentrespons header. - Satu dari three mobile configs: responsive design (sama URL + sama HTML, CSS
media kueri — Google’s recommendation), dynamic serving (sama URL, berbeda
HTML), dan terpisah URLs / m-dot (berbeda URL + berbeda HTML). Dua dari three
bergantung pada
Vary. - **
Vary: User-Agentheader melakukan dua jobs:** (1) berhenti caches (browser, CDNs, ISPs) serving sebuah mobile pengunjung cached desktop halaman atau vice versa, dan (2) secara historis helped Googlebot menemukan mobile versi. sebagian besar pesaing konten mentions hanya pertama. - ini memiliki sebuah nyata cost:
Vary: User-Agentfragments CDN cache keys di seluruh setiap distinct UA string (setiap browser/OS/bot), multiplying origin permintaan (SiteGround estimates 5–30×). sebuah major, di bawah-discussed alasan situs moved off ini. - Cloaking risk adalah tentang outcome, tidak technique. Serving device-appropriate
konten adalah fine; danger adalah sebuah detection bug/missing
Varyserving Googlebot wrong versi, atau dengan sengaja serving crawler berbeda konten. tidak pernah special-case “Googlebot” (terjemahan) “Googlebot” di detection — treat -nya declared device like apa pun device. - pengguna-agent detection adalah error-prone: stale UA lists, desktop-sebagai-mobile mismatches, dan treating tablets sebagai phones.
- Tidak yang sama sebagai dynamic rendering (pre-rendering JS untuk bot) — berbeda concept, berbeda Google/Bing docs.
- Legacy pattern di 2026. Google memiliki recommended responsive since ~2015, dan pengindeksan mobile-pertama (menyelesaikan 2023–2024) raised stakes dari sebuah dynamic-serving misconfiguration. Mostly sesuatu Anda audit sebuah older/enterprise situs off dari.
- untuk detect ini: permintaan yang sama URL dengan sebuah desktop vs. mobile UA, bandingkan
HTML, dan periksa untuk
Vary: User-Agentheader.
Dokumentasi resmi
Utama-sumber documentation dari mesin pencari.
- pengindeksan mobile-pertama Best Practices — di mana dynamic serving dan terpisah-URLs definitions now langsung ( dedicated dynamic-serving halaman adalah folded di di sini) dan di mana Google status responsive-design recommendation.
- Dynamic Serving (original dedicated doc — archived) — retired, banyak richer halaman (terakhir diperbarui Jan 2021). ini adalah sumber untuk “two jobs of the Vary header” (terjemahan) “dua jobs dari Vary header” explanation dan pengguna-agent-detection failure modes. langsung URL now 301-redirects untuk pengindeksan mobile-pertama guide, yang dropped sebagian besar dari ini detail.
- Dynamic rendering sebagai sebuah workaround — related-tetapi-distinct JS-rendering concept, dengan “not cloaking if the content is similar” (terjemahan) “tidak cloaking jika konten adalah similar” clarification. Cited di sini hanya untuk draw pembedaan.
- Announcing pengindeksan mobile-pertama untuk seluruh web (Mar 2020) — context pada mengapa device serving penting lebih hari ini.
Bing / Microsoft
- bingbot Series: JavaScript, Dynamic rendering, dan Cloaking. Oh My! (Oct 2018) — Bing’s guidance pada dynamic rendering (JS-untuk-bot), tidak device-based dynamic serving. Bing melakukan tidak muncul untuk publish sebuah dedicated device-based dynamic-serving/
Varydoc cara Google secara historis melakukan; ini broadly favors responsive/single-URL setups.
#:~:text= anchors. Re-konfirmasi snapshot memuat sebelum treating sebagai akhir. Quotes dari sumber
pada—record statements dari Google dan industry. Langsung Google-doc tautan adalah deep tautan itu jump untuk quoted passage; archived dan relayed sources adalah noted.
Google — definition dan recommendation (langsung 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.” (terjemahan) “Dynamic serving menggunakan URL yang sama untuk semua perangkat. Konfigurasi ini mengandalkan pendeteksian user-agent dan header HTTPVary: user-agentuntuk menyajikan versi HTML yang berbeda kepada perangkat yang berbeda.”* — Google Search Central docs. Jump untuk 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.” (terjemahan) “URL terpisah menyajikan HTML berbeda kepada setiap perangkat dan menggunakan URL terpisah. Seperti dynamic serving, konfigurasi ini mengandalkan user-agent dan header HTTPVaryuntuk mengarahkan pengguna ke versi situs yang sesuai dengan perangkat.”* Jump untuk quote - “Google recommends Responsive Web Design because it’s the easiest design pattern to implement and maintain.” (terjemahan) “Google merekomendasikan Responsive Web Design karena merupakan pola desain yang paling mudah diterapkan dan dipelihara.”* Jump untuk quote
Google — Vary header’s dua jobs (archived dedicated doc, terakhir diperbarui 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.” (terjemahan) “Header HTTP Vary memiliki dua implikasi penting dan berguna: header ini memberi tahu server cache di ISP dan tempat lain agar mempertimbangkan user-agent saat menentukan apakah halaman disajikan dari cache. Tanpa header Vary, cache dapat keliru menyajikan cache HTML desktop kepada pengguna seluler, atau sebaliknya. Header ini membantu Googlebot menemukan konten yang dioptimalkan untuk seluler dengan lebih cepat.”* — 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.” (terjemahan) “Berhati-hatilah terhadap cloaking saat mendeteksi user-agent; pemeriksaan tidak boleh secara khusus mencari Googlebot. Semua user-agent Googlebot mengidentifikasi diri sebagai perangkat seluler tertentu, dan harus diperlakukan persis seperti perangkat tersebut.”* — Google Search Central, Dynamic Serving (archived).
Google — dynamic rendering ( distinct concept) (langsung doc)
- “As long as your dynamic rendering produces similar content, Googlebot won’t view dynamic rendering as cloaking.” (terjemahan) “Selama dynamic rendering Anda menghasilkan konten yang serupa, Googlebot tidak akan menganggap dynamic rendering sebagai cloaking.”* Jump untuk quote
SiteGround — CDN cost dari Vary: User-Agent (industry)
- “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.” (terjemahan) “Dengan header User-Agent aktif, sistem menyimpan salinan berbeda untuk setiap kombinasi OS dan versi browser yang mengunjungi situs… Anda akan memiliki 5–30 permintaan dinamis untuk 100 kunjungan yang sama. Jadi situs yang sama akan menggunakan sumber daya 5–30 kali lebih banyak.”* — SiteGround, “Bagaimana itu Vary HTTP Header Dapat Menjadi Bad.” (terjemahan) “Bagaimana Vary header HTTP dapat menjadi buruk.”
Yang mobile configuration seharusnya I gunakan?
Hampir everyone seharusnya land pada responsive design — tetapi ini walks nyata decision, including cases di mana dynamic serving atau terpisah URLs mendapatkan considered, dan apa untuk melakukan jika Anda’ve inherited satu.
Responsive, dynamic serving, or separate URLs?
pendek versi: responsive adalah jawaban untuk hampir setiap case. Dynamic serving dan m-dot adalah hal Anda manage down pada situs itu sudah memiliki them, tidak patterns untuk reach untuk baru.
Dynamic serving audit checklist
- permintaan yang sama URL dengan representative desktop dan mobile pengguna agents dan konfirmasi apakah HTML intentionally differs.
- kirim
Vary: User-Agentpada setiap respons milik siapa representation perubahan oleh device class, including cached dan error respons di mana applicable. - pertahankan utama copy, heading, tautan internal, images dan teks alt, metadata, robots directives, dan data terstruktur equivalent di seluruh versi.
- Test Googlebot Smartphone menerima yang sama mobile representation sebagai sebuah wajar mobile browser; tidak pernah special-case crawler.
- periksa CDN cache keys dan hit perilaku so satu device class cannot menerima lainnya’s cached document.
- Repeat setiap permintaan several times melalui CDN/cache edge (tidak hanya sebuah single origin fetch) di seluruh desktop, mobile, tablet, dan bot pengguna agents — sebuah cache-poisoning failure hanya menampilkan up setelah sebuah variant adalah warmed dan re-requested, tidak pada pertama fetch.
- sertakan tablets, unfamiliar pengguna agents, dan missing pengguna-agent headers di fallback test matrix.
- hapus
Vary: User-Agentketika situs memiliki become genuinely responsive dan respons Tidak lebih lama perubahan. - pertahankan sebuah terdokumentasi migration path toward responsive design di mana dynamic serving adalah legacy alih-alih sebuah requirement.
Dynamic serving — cheat sheet
Definition: sama URL, berbeda HTML/CSS per pengguna-agent, signaled dengan Vary: User-Agent.
** three mobile configs**
| Config | sama URL? | sama HTML? | Key sinyal | Google’s stance |
|---|---|---|---|---|
| Responsive design | Ya | Ya | CSS media kueri | Recommended |
| Dynamic serving | Ya | Tidak (oleh UA) | Vary: User-Agent | berfungsi, fragile |
| Terpisah URLs (m-dot) | Tidak | Tidak | rel=canonical/alternate + Vary | Least recommended |
** Vary: User-Agent header — dua jobs**
- Cache correctness — berhenti browser/CDNs/ISPs serving wrong device’s cached versi.
- crawl penemuan — secara historis helped Googlebot temukan mobile versi.
Apa ini looks like
HTTP/1.1 200 OK
Vary: User-Agent** hidden cost**
Vary: User-Agentfragments CDN cache keys di seluruh setiap UA string (setiap browser/OS/bot).- SiteGround estimate: 5–30× origin permintaan untuk yang sama traffic.
- jika Anda HTML adalah sebenarnya identical per device → header adalah sebuah leftover misconfiguration; hapus ini.
Cloaking aturan
- Serving device-appropriate konten = fine.
- Detection bug / missing
Varyserving Googlebot wrong versi = nyata risk. - tidak pernah special-case “Googlebot” (terjemahan) “Googlebot” di detection — treat -nya declared device like apa pun device.
umum detection failures
- Stale pengguna-agent string lists (miss baru devices).
- desktop baca sebagai mobile atau vice versa.
- Tablets treated sebagai smartphones (classic).
jangan confuse dengan: dynamic rendering = pre-rendering JS untuk bot (berbeda concept, berbeda doc).
2026 reality: legacy pattern. Google memiliki recommended responsive since ~2015; pengindeksan mobile-pertama (menyelesaikan 2023–2024) raised stakes. Audit off ini; jangan bangun fresh.
Detect dynamic serving pada apa pun URL
core test: permintaan sama URL dengan sebuah desktop dan sebuah mobile pengguna-agent,
bandingkan HTML, dan periksa untuk Vary: User-Agent header. jika HTML differs,
ini adalah dynamic serving (atau m-dot, jika URL perubahan); jika respons varies tetapi
ada Tidak Vary header, itu’s misconfiguration untuk flag.
curl — bandingkan desktop vs. mobile respons (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 apa crawler mendapatkan)
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) — sama perbandingan
$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 — Tidak terminal needed
- Open DevTools (
F12/Cmd+Opt+I), open Network conditions tab (⋮→ Lebih alat → Network conditions). - Uncheck “Gunakan browser default,” (terjemahan) “gunakan browser default,” pick sebuah mobile UA (atau paste Googlebot’s smartphone
string), dan reload. Bandingkan dirender halaman dan, di Network panel,
document permintaan’s respons Headers untuk
Vary. - Toggle back untuk sebuah desktop UA dan reload — berbeda HTML pada yang sama URL adalah Anda tell.
browser-console snippet — periksa saat ini halaman’s 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 — satu-click Vary periksa
javascript:(async()=>{const r=await fetch(location.href,{method:"HEAD",cache:"no-store"});alert("Vary: "+(r.headers.get("vary")||"(none set)"));})();Note: fetch hanya exposes respons headers server memungkinkan melalui CORS untuk
cross-origin permintaan, so console/bookmarklet memeriksa adalah sebagian besar reliable pada
sama origin Anda’re viewing. untuk sebuah definitive header baca, gunakan curl -I atau
DevTools Network panel.
alat untuk auditing device-dependent respons
curl: Repeat yang sama permintaan dengan jelas desktop, mobile, dan Googlebot Smartphone pengguna agents; bandingkan headers, status, body size, dan konten hashes.- Chrome DevTools Network panel: Override pengguna agent, disable cache, dan inspect sebenarnya document respons alih-alih assuming device emulation perubahan ini.
- Search Console pemeriksaan URL: periksa dirender HTML Googlebot Smartphone diterima untuk representative URLs.
- sebuah crawler dengan pengguna-agent configuration: Jalankan terpisah mobile dan desktop melakukan crawl, lalu diff judul, heading, canonicals, directives, data terstruktur, dan internal tautan di scale.
- CDN cache analytics: Segment hits, misses, dan cache keys oleh device class untuk temukan cache fragmentation atau cross-device leakage.
Dynamic serving anti-patterns
failure modes itu turn dynamic serving dari “berfungsi” (terjemahan) “berfungsi” ke “actively hurting you” (terjemahan) “actively hurting Anda”:
1. Serving berbeda HTML dengan Tidak Vary: User-Agent header.
cardinal sin. Tanpa ini, sebuah cache dapat store desktop versi dan hand ini untuk sebuah
phone (atau hand Googlebot smartphone desktop halaman). konten varies tetapi tidak ada apa pun
tells caches atau crawler itu — so wrong versi leaks. jika Anda sajikan per-device
HTML, header adalah non-negotiable.
2. menambahkan Vary: User-Agent pada sebuah situs itu’s sebenarnya responsive.
opposite mistake, dan sebuah umum satu. jika Anda HTML adalah identical di seluruh devices,
header melakukan tidak ada apa pun berguna dan fragments Anda CDN cache di seluruh setiap pengguna-agent
string (SiteGround: 5–30× permintaan). jangan tambahkan ini “to be thorough” (terjemahan) “untuk menjadi thorough” — hanya ketika
Anda genuinely sajikan berbeda HTML per device.
3. Special-casing “Googlebot” (terjemahan) “Googlebot” di detection logic. Detecting device class adalah fine; sniffing secara khusus untuk Googlebot dan serving ini sesuatu berbeda adalah bagaimana accidental cloaking happens. Googlebot announces itself sebagai sebuah spesifik perangkat seluler — treat ini persis like itu device.
4. Letting desktop dan mobile HTML drift out dari parity. Dua versi berarti dua hal untuk pertahankan di sync. di bawah pengindeksan mobile-pertama, mobile versi adalah apa terindeks — so konten, data terstruktur, images/teks alt, dan tautan itu exist hanya pada desktop adalah, untuk pengindeksan purposes, hilang.
5. Stale pengguna-agent lists dan tablet-sebagai-phone mismatches. UA-detection lists rot: baru devices go unmatched, desktops mendapatkan baca sebagai mobile, dan tablets mendapatkan treated sebagai smartphones. Detection Anda siapkan setelah dan tidak pernah revisit akan diam-diam misclassify sebuah growing slice dari traffic.
6. Treating dynamic serving sebagai sebuah fresh “option” (terjemahan) “option” untuk pick. ini adalah tidak satu dari three co-equal choices di 2026. Google memiliki recommended responsive since ~2015, dan pengindeksan mobile-pertama raised stakes. jika Anda’re choosing baru, choose responsive; dynamic serving adalah legacy debt untuk manage down.
7. Confusing ini dengan dynamic rendering. Reaching untuk JS pre-rendering docs (atau Bing’s bingbot post) untuk configure device-based serving. berbeda masalah, berbeda solusi — mixing them produces guidance itu fits neither.
umum dynamic serving failures
Mobile pengguna intermittently menerima desktop halaman
Symptom: correct mobile respons muncul pada sebuah cold permintaan tetapi desktop HTML
muncul setelah cache hits. mungkin penyebab: respons varies oleh pengguna agent tanpa sebuah
matching cache key atau Vary: User-Agent. Perbaiki: Correct origin header dan CDN
configuration, purge affected objects, lalu repeat cross-device permintaan terhadap warm
cache entries.
Googlebot Smartphone sees lebih sedikit konten
Symptom: pemeriksaan URL lacks copy, tautan, data terstruktur, atau images tersedia pada desktop. mungkin penyebab: Mobile templates memiliki drifted atau device detection routed Googlebot incorrectly. Perbaiki: Restore parity dari shared konten sumber dan test tepat smartphone crawler agent alongside sebuah wajar phone agent.
sebuah responsive situs memiliki poor cache efficiency
Symptom: HTML adalah identical di seluruh devices tetapi CDN stores banyak pengguna-agent
variants. mungkin penyebab: sebuah legacy Vary: User-Agent header survived migration
untuk responsive design. Perbaiki: Verify respons truly Tidak lebih lama perubahan, hapus
header, purge variants, dan konfirmasi cache consolidates.
Validate sebuah dynamic serving perubahan
Test representation dan header agreement
Test untuk jalankan: permintaan yang sama URL dengan desktop dan mobile pengguna agents dan record
body hashes plus Vary header. Yang diharapkan hasil: Intentionally berbeda bodies
keduanya declare Vary: User-Agent; identical responsive bodies melakukan tidak carry sebuah needless
device variance. Failure interpretation: Cache signaling dan origin perilaku
disagree. Monitoring window: Immediate. Rollback trigger: berbeda bodies dapat
share satu unvaried cache object.
Test warmed-cache isolation
Test untuk jalankan: Warm URL dengan satu device class, lalu permintaan ini sebagai lainnya di keduanya orders. Yang diharapkan hasil: setiap menerima -nya yang dimaksud representation setiap time. Failure interpretation: CDN cache key ignores device variation. Monitoring window: Immediate setelah CDN atau header perubahan. Rollback trigger: sebuah mobile permintaan menerima desktop HTML atau vice versa.
Test mobile konten parity
Test untuk jalankan: Diff sebuah sample dari desktop dan mobile dirender output untuk utama konten, metadata, directives, tautan, dan data terstruktur. Yang diharapkan hasil: Layout dapat differ, tetapi dapat diindeks meaning dan sinyal tetap equivalent. Failure interpretation: Template drift perubahan apa pengindeksan mobile-pertama dapat gunakan. Monitoring window: pada rilis dan setelah recrawl di pemeriksaan URL. Rollback trigger: mobile representation drops sebuah dapat diindeks element atau menambahkan sebuah restrictive directive.
Uji pemahaman Anda: Dynamic Serving
Five quick pertanyaan pada dynamic serving dan Vary header. Pick sebuah jawaban untuk
setiap, lalu periksa.
Resources worth Anda time
My related writing
- Beginner’s Guide untuk SEO teknis — di mana mobile configuration dan crawl/indeks fit bigger picture.
- JavaScript SEO Issues & Best Practices — relevant untuk dynamic rendering concept orang confuse dengan dynamic serving ( JS-untuk-bot side, tidak device serving).
Vary: User-Agent header — ini adalah sebuah sempit, largely-legacy configuration — so dua guides di atas adalah closest related pertama-party context alih-alih direct coverage dari ini tepat topic.My speaking
- Bagaimana Penelusuran berfungsi (SlideShare) — my walkthrough dari crawling, rendering, pengindeksan, dan peringkat, including bagaimana Googlebot melakukan crawl sebagai sebuah smartphone (yang adalah mengapa device-serving misconfigurations bite di bawah pengindeksan mobile-pertama). (Standing disclaimer: “Ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.” (terjemahan) “ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.”)
dari sekitar industry
- pengindeksan mobile-pertama Best Practices (Google) — saat ini home dari dynamic serving dan terpisah-URLs definitions dan responsive-design recommendation.
- Dynamic Serving (archived original Google doc) (Google, melalui Wayback Machine) — retired, lebih detailed halaman dengan dua-jobs-dari-Vary explanation dan pengguna-agent-detection failure modes.
- Dynamic rendering sebagai sebuah workaround (Google) — distinct JS-rendering concept, dengan “similar konten tidak cloaking” (terjemahan) “similar konten tidak cloaking” clarification.
- Mobile situs Configuration & Vary header HTTP (mesin pencari Land, Cindy Krum, 2013) — enterprise CDN vs.
Varyheader conflict. Dated, tetapi underlying cache-fragmentation tension masih holds. - Bagaimana Vary header HTTP dapat menjadi buruk (SiteGround) — plain-istilah breakdown dari
Vary: User-Agentcache fragmentation dan 5–30× resource-cost estimate. - Google’s Top Three masalah mereka See dengan Dynamic Serving Mobile situs (mesin pencari Roundtable, 2015) — Pierre Far’s flagged JS/CSS/image implementation mistakes, sebuah early “even Google adalah fielding ini” (terjemahan) “bahkan Google adalah fielding ini” record.
Log perubahan
Diperbarui 8 Agu 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.