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.

Pertama kali diterbitkan: 2 Jul 2026 · Terakhir diperbarui: 8 Agu 2026 · Advanced
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.

TL;DR — Dynamic serving = sama URL, berbeda HTML/CSS per pengguna-agent, detected server-side dan signaled dengan Vary: User-Agent respons header. ini adalah satu dari three mobile configs alongside responsive design (Google’s recommendation) dan terpisah URLs (m-dot). Vary header 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-Agent fragments 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 missing Vary dapat 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.

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 indexing

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:

Configurationsama URL?sama HTML?Utama sinyal digunakan
Responsive designYaYaCSS media kueri (tidak ada apa pun server-side)
Dynamic servingYaTidak (oleh pengguna-agent)Vary: User-Agent header
Terpisah URLs (m-dot)TidakTidakrel=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: 5710

jika 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 indexing

untuk 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.

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

Add an expert note

Pin an expert quote

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