Hướng dẫn về Sanity SEO
Sanity stores nội dung as JSON và emits zero HTML — của bạn frontend decides của bạn SEO. Kết xuất modes, Portable Text, đó SEO object, sitemaps, draft-chế độ noindex, JSON-LD, và plugin.
Ngôn ngữ
Sanity là một headless CMS đó stores nội dung as structured JSON trong của nó Nội dung Lake và produces không HTML — so của bạn frontend framework (Tiếp theo.js, Astro, Remix) decides mọi thứ về của bạn SEO. Đó single biggest lever là kết xuất: SSG và SSR ship hoàn tất HTML và là safe; CSR là risky vì LLM-crawler kết xuất contracts vary by provider. Portable Text là một JSON AST, không HTML, so đó frontend phải serialize điều này. Xây dựng một reusable SEO object trong đó nội dung model, generate sitemaps và JSON-LD programmatically, giữ drafts out of đó chỉ mục với an X-Robots-Tag: noindex header, và dùng sanity-plugin-seo (không đó deprecated Yoast pane). SEO success trong Sanity xuất hiện từ intentional structure, không plugin.
Tóm tắt — Sanity là place để store nội dung, không place đó publishes các trang web. nó hands của bạn nội dung out as dữ liệu (JSON), không as finished HTML — so tách biệt trang web được xây dựng với điều gì đó như tiếp theo.js hoặc Astro có để turn đó dữ liệu vào các trang. đó có nghĩ là none của thông thường SEO stuff (các tiêu đề, sitemaps, canonical tags) happens tự động way nó làm on WordPress. biggest rule: xây dựng của bạn các trang on máy chủ hoặc tại xây dựng time, không hoàn toàn trong khách truy cập trình duyệt, hoặc các công cụ tìm kiếm và AI tools có thể không bao giờ see của bạn nội dung.
Điều gì Sanity thực ra là
Mọi người sometimes assume Sanity là “a CMS like WordPress,” (bản dịch) «một CMS như WordPress,» và đó là nơi đó confusion bắt đầu. Sanity là một headless CMS. Điều này làm hai điều: điều này stores của bạn nội dung (trong điều gì đó Sanity calls đó Nội dung Lake) và điều này cho nội dung editors một place để ghi (Sanity Studio). Điều gì điều này làm không làm là produce một single line of HTML. Nội dung của bạn xuất hiện out as dữ liệu có cấu trúc — JSON — qua an API.
Evidence for this claim Sanity stores structured content in Content Lake and provides it to applications as data rather than finished site HTML. Scope: Sanity platform architecture; the frontend owns public rendering. Confidence: high · Verified: Sanity: Content Lakeđó có nghĩ là tách biệt trang web — được xây dựng với framework như tiếp theo.js, Astro, hoặc Remix — có để fetch đó JSON và xây dựng thực tế các trang mọi người và các công cụ tìm kiếm see. Sanity stores nội dung; của bạn frontend publishes nó. sau khi bạn internalize đó một sentence, gần như mọi thứ về Sanity SEO làm hợp lý.
một decision đó matters phần lớn: kết xuất
vì của bạn frontend xây dựng các trang, Cách nó xây dựng them decides của bạn SEO. Ở đó là hai safe ways và một risky way:
- Tại xây dựng time (SSG) — các trang là pre-được xây dựng vào đơn giản HTML files. Fast và tìm kiếm-friendly.
- On máy chủ, theo yêu cầu (SSR) — máy chủ xây dựng đầy đủ trang và gửi nó. cũng tìm kiếm-friendly, luôn fresh.
- Trong khách truy cập trình duyệt (CSR) — máy chủ gửi near-rỗng shell và JavaScript fills nó trong afterward. Đây là risky một.
Google có thể eventually chạy JavaScript và đọc CSR trang, nhưng nó chậm hơn và ít hơn reliable — và hôm nay các crawler behind ChatGPT, Claude, và Perplexity typically không render JavaScript tại all, so họ chỉ see rỗng shell. đó không fixed rule, though: Google Gemini các câu trả lời reuse Googlebot’s own kết xuất infrastructure, so behavior đã varies by provider và không phải guaranteed để stay giống nhau. So nếu bạn muốn để xuất hiện trên Google và nhận cited by AI tools, xây dựng của bạn HTML on máy chủ hoặc tại xây dựng time.
Evidence for this claim Google can render JavaScript pages, but browser-only content depends on a separate rendering stage. Scope: Google Search only; this record does not support claims about named AI crawlers. Confidence: high · Verified: Google: JavaScript SEO basicsĐó “where did my SEO settings go?” (bản dịch) «nơi đã làm my SEO settings go?» vấn đề
On WordPress, plugin như Yoast âm thầm handled của bạn các tiêu đề, meta các mô tả, sitemap, và canonical tags. Sanity có không such điều. So ai đó có để có chủ ý:
- Thêm SEO các trường (tiêu đề, mô tả, social image) để nội dung trong Sanity.
- Wire những điều đó các trường vào mỗi trang HTML trong frontend.
- Xây dựng sitemap, robots.txt, và dữ liệu có cấu trúc — all trong code.
None of này là hard. Điều này chỉ sẽ không happen on của nó own. MỘT lot of “my Sanity site has no SEO” (bản dịch) «my Sanity site có không SEO» stories là thực sự “nobody built the stuff a plugin used to do.” (bản dịch) «không ai được xây dựng đó stuff một plugin được dùng để làm.»
Hai điều đó âm thầm go sai
- Draft các trang getting vào Google. Sanity có thể phục vụ unpublished drafts qua của nó API. nếu ai đó chia sẻ preview link và crawler tìm thấy nó, đó draft có thể nhận được lập chỉ mục. bạn có để actively block đó.
- thân phản hồi text đó invisible. Sanity stores rich text trong special format được gọi là Portable Text — nó dữ liệu, không HTML. của bạn frontend có để convert nó. On CSR trang, đó conversion happens trong trình duyệt, so AI các crawler không bao giờ see của bạn bài viết text.
Muốn đầy đủ version — four kết xuất modes, reusable SEO trường setup, sitemaps, draft-chế độ protection, JSON-LD, và mà plugin để sử dụng? Chuyển để Nâng cao tab.
TL;DR — Sanity là nội dung-neutral: điều này stores structured JSON trong đó Nội dung Lake và emits zero HTML, so đó frontend kết xuất chế độ decides mọi thứ. SSG và SSR ship hoàn tất HTML và là safe; CSR là đó risky một vì LLM các crawler không execute JavaScript, và Google deprecated dynamic kết xuất as một workaround. Portable Text là một JSON AST đó frontend phải serialize. Xây dựng một reusable
seoobject trong đó nội dung model với overrides (không requirements) quacoalesce(), generate sitemaps và JSON-LD programmatically từ existing các trường, và giữ drafts out of đó chỉ mục với anX-Robots-Tag: noindexheader on mỗi preview phản hồi. Dùngsanity-plugin-seo— không bao giờ đó deprecated Yoast pane — nhưng remember “SEO success in Sanity comes from intentional structure, not plugins.” (bản dịch) «SEO success trong Sanity xuất hiện từ intentional structure, không plugin.»
Sanity là nội dung storage, không publisher
hữu ích đầu tiên principle: Sanity touches của bạn nội dung, không bao giờ của bạn kết xuất.
nội dung Lake stores mọi thứ as structured JSON, queried với GROQ
(Sanity query language) hoặc REST. Sanity Studio — editing UI — là React
single-trang app đó thường lives on của nó own .sanity.studio subdomain và không phải
điều gì đó bạn chỉ mục. Không có gì trong điều này stack produces HTML.
So đó entire SEO surface lives trong của bạn frontend framework. As Webstacks put điều này, “Sanity handles content storage and editing, while your frontend framework handles SEO output.” (bản dịch) «Sanity xử lý nội dung storage và editing, trong khi của bạn frontend framework xử lý SEO output.» đó là không một limitation — đây là đó toàn bộ headless model. Sanity own team frames điều này well: “When using Sanity as a CMS, you’re doing headless SEO. Although this approach requires thoughtful technical implementation, it can liberate your content to help you reach more users across all channels.” (bản dịch) «Khi dùng Sanity as một CMS, bạn là đang làm headless SEO. Although này approach requires thoughtful kỹ thuật implementation, điều này có thể liberate nội dung của bạn để help bạn reach hơn người dùng trên all channels.» Đó hoạt động là real, nhưng đây là đó giống nhau hoạt động as bất kỳ headless xây dựng (see SEO cho một Headless CMS).
Kết xuất chế độ là foundation
vì frontend xây dựng HTML, kết xuất decision là single phần lớn consequential SEO lựa chọn on Sanity trang web. Four modes:
SSG — Static trang web Generation. nội dung là fetched từ Sanity tại xây dựng time và baked vào static HTML phân phối từ CDN. Best-case SEO: fully-được kết xuất HTML on đầu tiên yêu cầu, fast TTFB. Ideal cho blog posts, marketing các trang, và sản phẩm/landing các trang. tradeoff là freshness — changed nội dung cần rebuild (ISR solves điều này).
SSR — máy chủ-Side Kết xuất. nội dung là fetched theo yêu cầu và đầy đủ HTML là được kết xuất on máy chủ. Excellent SEO, luôn fresh. sử dụng nó cho frequently đã cập nhật nội dung. Tradeoff là infrastructure cost và slightly cao hơn TTFB hơn static files.
ISR — Incremental Static Regeneration (Vercel/tiếp theo.js). Static các trang regenerate trong background, ideally triggered by Sanity webhook on publish so trang rebuilds moment editor hits publish. Đây là best của SSG speed và SSR freshness cho nội dung đó thay đổi on order của hours hoặc days.
CSR — Client-Side Kết xuất. HTML shell ships, sau đó JavaScript fetches từ Sanity và xây dựng DOM trong trình duyệt. Đây là worst SEO option: Googlebot có để queue trang cho sau đó render wave, timing là unpredictable, và AI các crawler và nhiều khác bots see chỉ shell. CSR là acceptable chỉ behind authentication cho nội dung bạn không muốn được lập chỉ mục anyway.
Và không reach cho đó old shortcut: Google có deprecated dynamic kết xuất (serving prerendered HTML để bots, CSR để người dùng). Officially, “dynamic rendering was a workaround and not a long-term solution,” (bản dịch) «dynamic kết xuất đã là một workaround và không một dài-term giải pháp,» và Google hiện tại khuyến nghị “server-side rendering, static rendering, or hydration.” (bản dịch) «máy chủ-side kết xuất, static kết xuất, hoặc hydration.» Cho một Sanity site, đó có nghĩa là SSG hoặc SSR — không một bot-detection hack. (Đầy đủ kết xuất treatment trong JavaScript SEO.)
Evidence for this claim Google describes dynamic rendering as a workaround rather than a recommended long-term solution and recommends server-side rendering, static rendering, or hydration. Scope: Google Search guidance for JavaScript sites. Confidence: high · Verified: Google: Dynamic renderingPortable Text — của bạn thân phản hồi copy là JSON AST
Đây là phần lớn Sanity-cụ thể điều on trang. Sanity stores rich text as
Portable Text: JSON abstract syntax tree, không HTML. thân phản hồi copy trong nội dung
Lake looks như array của typed chặn, không <p> tags. của bạn frontend có để
serialize nó vào HTML trước khi bất kỳ crawler có thể đọc nó:
@portabletext/react— cho React/tiếp theo.js.@portabletext/to-html— framework-agnostic (Astro, Remix, bất cứ điều gì).- old
@sanity/block-content-to-reactlà deprecated — không sử dụng nó.
nếu bạn render máy chủ-side hoặc tại xây dựng time, serialization happens trước khi trang là
được gửi và các crawler nhận đầy đủ HTML. nếu bạn render client-side, serialization chạy
trong trình duyệt. vì LLM-crawler kết xuất contracts vary by provider, CSR
Portable Text tạo coverage risk đó thô HTML tránh. có cũng handy GROQ
helper: pt::text(body) extracts all đơn giản text từ Portable Text trường as
string, mà là perfect cho feeding JSON-LD các mô tả không có tách biệt editor
trường.
nội dung modeling Đối với SEO — reusable SEO object
Đó sạch nhất pattern, và đó một Sanity own course teaches, là một single
reusable seo object đã thêm để mỗi document loại — không SEO các trường copy-pasted theo
loại. Đó key design principle từ Sanity Learn: “For the benefit of content
authors, fields relevant to SEO should not always be required. Instead, they should
be used to override some existing content, when provided.” (bản dịch) «Cho đó benefit of nội dung authors, các trường relevant để SEO không nên luôn là bắt buộc. Thay vì, they nên là được dùng để override some existing nội dung, khi provided.»
trên thực tế đó có nghĩ là SEO các trường là overrides với fallbacks, implemented với
GROQ coalesce():
"title": coalesce(seo.title, title, ""),
"description": coalesce(seo.description, excerpt, "")minimum viable seo object: metaTitle (≤65 chars), metaDescription
(≤155 chars), canonicalUrl, openGraphImage (1200×630), và noIndex boolean.
Thêm Sanity validation rules để enforce những điều đó character limits trước khi publish —
so editors catch các vấn đề nền tảng sẽ nếu không let qua. sử dụng slug
loại với custom generation function, và sử dụng references cho liên kết nội bộ so
URL thay đổi propagate tự động. Thêm hideFromSearch boolean và filter nó out
của cả hai sitemap GROQ query và trang robots metadata.
Metadata, sitemaps, và canonicals — all được xây dựng trong frontend
Metadata. Trong tiếp theo.js App Router, sử dụng exported generateMetadata() function
(không inline <head> tags) so metadata không duplicate trên nested layouts.
Xây dựng một máy chủ-side helper đó takes GROQ kết quả và trả về framework
metadata object — implement nó sau khi, sử dụng nó mọi nơi. Open Graph images có thể là
generated dynamically với tiếp theo.js Edge OG generation, pulling nội dung straight từ
Sanity.
Sitemaps. có không auto-sitemap. bạn xây dựng nó từ GROQ query → URL array →
XML (sitemap.ts trong tiếp theo.js, @astrojs/sitemap trong Astro). luôn filter drafts và
hidden các trang:
*[_type in ["page", "post"] && defined(slug.current) && hideFromSearch != true]sử dụng _updatedAt (không _createdAt hoặc manual date) cho lastModified, giữ
riêng lẻ sitemap files dưới 50 000 các URL với chỉ mục cho lớn hơn các trang, và
trigger regeneration qua Sanity webhook on publish/unpublish so nó không bao giờ goes stale.
Canonicals. đặt canonical các URL từ nội dung model, default để
self-referencing canonical, và xây dựng absolute các URL từ single SITE_URL so
canonical không bao giờ drifts. (Mechanics trong
Canonicalization.)
Dữ liệu có cấu trúc — generate nó, không tác giả nó
Đó right pattern là để generate JSON-LD programmatically từ existing nội dung các trường tại render time — không bao giờ xây dựng một tách biệt JSON-LD editor surface trong Studio, mà chỉ tạo drift giữa nội dung và markup. Roboto Studio rule là blunt: “Derive JSON-LD from existing fields, at render time, in code.” (bản dịch) «Derive JSON-LD từ existing các trường, tại render time, trong code.» Sanity agrees — “JSON-LD is a powerful way to provide structured data to search engines — fortunately structured data is what Sanity does best.” (bản dịch) «JSON-LD là một powerful way để cung cấp dữ liệu có cấu trúc để các công cụ tìm kiếm — fortunately dữ liệu có cấu trúc là điều gì Sanity làm best.»
Dùng pt::text(body) để pull đơn giản text cho schema các mô tả, đó TypeScript
package schema-dts cho loại safety, và render điều này với
<script type="application/ld+json">. Note đó “the JSON-LD markup can be
rendered anywhere in the page — it doesn’t need to be stored inside the
<head>.” (bản dịch) «đó JSON-LD markup có thể là được kết xuất anywhere trong đó trang — điều này không cần để là stored bên trong đó .» Priority types cho nội dung các trang: Bài viết/BlogPosting,
BreadcrumbList, FAQPage, Organization, WebSite.
Giữ drafts out của Google — thực-incident pitfall
Sanity perspective hệ thống controls draft visibility: published trả về chỉ
production nội dung; drafts trả về draft documents cho preview. Luôn dùng đó
published perspective trong production API calls. Nhưng đó alone không đủ,
vì draft URLs leak. As một nhà phát triển recounted, đó danger là
“a client panicking because an unpublished landing page showed up in Google Search
Console. If a content editor shares that URL in Slack, and someone clicks it from a
browser that’s then crawled (it happens), the draft content can end up indexed.” (bản dịch) «một client panicking vì an unpublished landing trang showed lên trong Google Search Console. Nếu một nội dung editor chia sẻ đó URL trong Slack, và ai đó clicks điều này từ một trình duyệt đó là thì được crawl (điều này happens), đó draft nội dung có thể end lên được lập chỉ mục.»
reliable defense là multi-layer một:
- sử dụng
publishedperspective trong production; không bao giờ expose unprotected preview điểm cuối. - Thêm
X-Robots-Tag: noindexHTTP header để mỗi draft-chế độ/preview phản hồi — ngay cả nếu draft URL leaks và nhận được crawl, Googlebot respects header và sẽ không chỉ mục nó. (không rely on robots.txt cho điều này; header là nhiều hơn reliable hơn disallow cho preview các trang.) - Validate preview secret máy chủ-side; không bao giờ reflect nó trong chuyển hướng URL, và phạm vi preview-enable điểm cuối để của bạn Studio origin.
Robots, các chuyển hướng, image SEO, và hreflang
robots.txt là static frontend file (app/robots.ts trong tiếp theo.js). Block Studio
paths chỉ nếu họ’re on giống nhau domain (Disallow: /studio/); không try để block
preview các trang với nó.
Các chuyển hướng là genuine workflow win: store them as Sanity documents (from,
to, statusCode) so nội dung team có thể manage các chuyển hướng không có nhà phát triển
deploy, sau đó implement them trong tiếp theo.js middleware.ts hoặc CDN/Worker layer (không bao giờ
trong Sanity itself). Thêm validation rules để ngăn loops và không hợp lệ paths.
Image SEO: sử dụng Sanity image CDN với ?auto=format cho tự động WebP/AVIF,
manage alt text tại asset cấp độ với document-cấp độ overrides, sử dụng vanity
filenames thay vì hashed các URL, và đặt hotspot/crop so tự động crops giữ
subject — mà matters phần lớn cho OG images.
Hreflang: model locale variants as tách biệt Sanity documents referencing canonical version, generate hreflang từ GROQ query returning all locale slugs, và cho mỗi locale trang self-referencing canonical — không bao giờ canonical non-English trang để English một.
Plugin — helpful, không substitute
sanity-plugin-seo— chính khuyến nghị (22k+ downloads). Trực tiếp SEO score, meta/OG preview, social cards, robots control, hreflang, readability. AI tier adds từ khóa suggestions và meta generation.sanity-plugin-seofields— alternative: 39 schema.org types, SEO Health Dashboard, và tiếp theo.js helper functions (buildSeoMeta()).sanity-plugin-seo-pane— DEPRECATED. Đây là old Yoast integration, đã xóa due để outdated dependency. nó vẫn hiển thị lên trong old tutorials. không sử dụng nó.
Đó honest cách diễn đạt, từ Yanatiev: “SEO success in Sanity comes from intentional structure, not plugins.” (bản dịch) «SEO success trong Sanity xuất hiện từ intentional structure, không plugin.» Plugin surface các trường và cho editorial feedback — they không replace proper nội dung modeling.
AI tìm kiếm và AEO
Đó 2026 wrinkle: LLM training và retrieval các crawler (Anthropic, OpenAI, Phổ biến
Crawl) typically không execute JavaScript hôm nay, so CSR Portable Text là largely
invisible để them regardless of liệu Googlebot có thể render điều này — nhưng này là
provider-cụ thể và không một guaranteed contract. Google Gemini pipeline là đó
notable exception, since điều này reuses Googlebot’s own kết xuất infrastructure, và
other providers’ behavior có thể thay đổi. Treat “no rendering” (bản dịch) «không kết xuất» as đó safe assumption để
xây dựng cho, không một vĩnh viễn law. Beyond kết xuất, hai Sanity-friendly
tactics: serve sạch markdown qua nội dung negotiation khi Accept: text/markdown
là present (Sanity @portabletext/markdown package converts Portable Text với không
extra authoring), và monitor Bing cụ thể since Bing chỉ mục feeds
ChatGPT’s browse các phản hồi. On llms.txt, Sanity own Knut Melvær là skeptical —
“Probably don’t do llms.txt” (bản dịch) «Probably không làm llms.txt» đối với các trang web lớn, vì đó all-hoặc-không có gì phạm vi và
file-size limits làm điều này impractical; theo-trang nội dung negotiation là hơn granular.
Roboto Studio summary là đó right mindset: “AEO and SEO live on the same plumbing,
so we treat them as one job.” (bản dịch) «AEO và SEO trực tiếp on đó giống nhau plumbing, so we treat them as một job.» (Hơn trong AI Tìm kiếm.)
myths worth killing
- “Sanity does SEO automatically like WordPress + Yoast.” (bản dịch) «Sanity làm SEO tự động như WordPress + Yoast.» Không. Zero HTML, zero tự động bất cứ điều gì.
- “Any rendering mode is fine if the content’s in Sanity.” (bản dịch) «Bất kỳ kết xuất chế độ là fine nếu đó nội dung trong Sanity.» Không. CSR breaks lập chỉ mục và AI visibility; dynamic kết xuất là deprecated.
- “Drafts can’t be indexed.” (bản dịch) «Drafts không thể là được lập chỉ mục.» They có thể, nếu một preview URL leaks. Dùng một
noindexheader. - “Portable Text is HTML.” (bản dịch) «Portable Text là HTML.» đây là một JSON AST đó frontend phải serialize.
- “You need a JSON-LD editor in Studio.” (bản dịch) «Bạn cần một JSON-LD editor trong Studio.» Không — generate điều này từ existing các trường.
AI summary
condensed take on Nâng cao version:
- Sanity là nội dung-neutral. Điều này stores structured JSON trong đó Nội dung Lake (queried qua GROQ/REST) và emits zero HTML. Đó frontend (Tiếp theo.js, Astro, Remix) produces all SEO output. “Sanity does SEO like WordPress” (bản dịch) «Sanity làm SEO như WordPress» là một myth.
- Kết xuất chế độ là đó foundation. SSG và SSR ship hoàn tất HTML và là safe; ISR (webhook-triggered on publish) adds freshness; CSR là risky. Google deprecated dynamic kết xuất — dùng SSR/static/hydration.
- LLM-crawler kết xuất varies by provider — thô HTML maximizes Portable Text coverage.
- Portable Text là một JSON AST, không HTML. Serialize điều này với
@portabletext/reacthoặc@portabletext/to-html;@sanity/block-content-to-reactlà deprecated. Dùngpt::text(body)để extract đơn giản text cho JSON-LD. - Nội dung modeling: một reusable
seoobject trên all types, các trường as overrides không requirements quacoalesce(), validation rules enforcing limits, và mộthideFromSearchflag filtered từ cả hai sitemap và robots metadata. - Sitemaps, metadata, canonicals, robots.txt là all được xây dựng trong đó frontend.
Filter drafts từ đó sitemap GROQ query, dùng
_updatedAtcholastModified, và regenerate qua Sanity webhooks. - Generate JSON-LD programmatically từ existing các trường tại render time — không bao giờ một
tách biệt Studio editor. Dùng
schema-dts; điều này có thể render anywhere, không chỉ<head>. - Giữ drafts out of đó chỉ mục: dùng đó
publishedperspective trong production và thêm anX-Robots-Tag: noindexheader để mỗi preview phản hồi. MỘT leaked draft URL có gây ra real lập chỉ mục incidents. - Plugin:
sanity-plugin-seo(chính) hoặcsanity-plugin-seofields. Đó Yoastsanity-plugin-seo-panelà deprecated. “SEO success in Sanity comes from intentional structure, not plugins.” (bản dịch) «SEO success trong Sanity xuất hiện từ intentional structure, không plugin.» - AEO: monitor Bing (feeds ChatGPT browse); serve markdown qua nội dung
negotiation; Sanity advises so với
llms.txtđối với các trang web lớn.
Tài liệu chính thức
Chính-nguồn tài liệu từ các công cụ tìm kiếm và Sanity.
- Understand JavaScript SEO Basics — crawl → render → chỉ mục pipeline, JS canonicals, và Vì sao blocked files không nhận được kết xuất. cốt lõi reference cho bất kỳ Sanity frontend.
- Dynamic Kết xuất (deprecated workaround) — Vì sao Google deprecated nó và Điều gì để sử dụng thay vì (SSR, static kết xuất, hydration).
- Kết xuất cho nội dung-Driven Web Apps — SSR so với. SSG so với. CSR tradeoffs cho chính xác kind của nội dung các trang Sanity powers.
- Robots meta tag, dữ liệu-nosnippet, và X-Robots-Tag —
X-Robots-Tag: noindexHTTP header được sử dụng để giữ draft/preview các phản hồi out của chỉ mục. - Intro để robots.txt — Điều gì robots.txt làm và không làm (nó controls crawling, không lập chỉ mục của leaked drafts).
Bing / Microsoft
- new evergreen Bingbot (Microsoft Edge) — Bingbot kết xuất JavaScript qua Edge; relevant since Bing chỉ mục feeds ChatGPT browse.
- IndexNow / indexnow.org — push giao thức để wire để của bạn Sanity publish webhook.
Sanity
- SEO với Sanity — Sanity own master SEO hướng dẫn.
- SEO Optimization course — đầy đủ tiếp theo.js SEO course (schema types, dynamic sitemaps, JSON-LD).
- Presenting và previewing nội dung (perspectives) —
publishedso với.draftsperspectives, basis của draft-chế độ safety.
Quotes từ nguồn
On—record statements relevant để Sanity SEO. mỗi link là deep link đó jumps để quoted passage on nguồn trang.
Sanity — headless SEO model
- “When using Sanity as a CMS, you’re doing headless SEO. Although this approach requires thoughtful technical implementation, it can liberate your content to help you reach more users across all channels.” (bản dịch) «Khi dùng Sanity as một CMS, bạn là đang làm headless SEO. Although này approach requires thoughtful kỹ thuật implementation, điều này có thể liberate nội dung của bạn để help bạn reach hơn người dùng trên all channels.» — Sanity, SEO với Sanity. Nhảy đến trích dẫn
- “SEO doesn’t have to be complicated. It’s a matter of taking content you’ve already responsibly structured with Sanity and rendering it in the format and places that search engines expect.” (bản dịch) «SEO không có để là complicated. đây là một quan trọng of taking nội dung bạn đã responsibly structured với Sanity và kết xuất điều này trong đó format và places đó các công cụ tìm kiếm expect.» — Sanity Learn, SEO Optimization course. Nhảy đến trích dẫn
- “For the benefit of content authors, fields relevant to SEO should not always be required. Instead, they should be used to override some existing content, when provided.” (bản dịch) «Cho đó benefit of nội dung authors, các trường relevant để SEO không nên luôn là bắt buộc. Thay vì, they nên là được dùng để override some existing nội dung, khi provided.» — Sanity Learn, SEO schema types và metadata. Nhảy đến trích dẫn
- “JSON-LD is a powerful way to provide structured data to search engines—fortunately structured data is what Sanity does best.” (bản dịch) «JSON-LD là một powerful way để cung cấp dữ liệu có cấu trúc để các công cụ tìm kiếm—fortunately dữ liệu có cấu trúc là điều gì Sanity làm best.» — Sanity Learn, Generating JSON-LD dynamically. Nhảy đến trích dẫn
Google — dynamic kết xuất là deprecated
- “Dynamic rendering was a workaround and not a long-term solution for problems with JavaScript-generated content in search engines.” (bản dịch) «Dynamic kết xuất đã là một workaround và không một dài-term giải pháp cho các vấn đề với JavaScript-generated nội dung trong các công cụ tìm kiếm.» — Google Search Central tài liệu. Nhảy đến trích dẫn
- Được khuyến nghị thay vì: “server-side rendering, static rendering, or hydration.” (bản dịch) «máy chủ-side kết xuất, static kết xuất, hoặc hydration.» Nhảy đến trích dẫn
Ngành — frontend owns SEO; structure beats plugin
- “Sanity handles content storage and editing, while your frontend framework handles SEO output.” (bản dịch) «Sanity xử lý nội dung storage và editing, trong khi của bạn frontend framework xử lý SEO output.» — Webstacks, Sanity SEO. Đọc đó hướng dẫn
- “AEO and SEO live on the same plumbing, so we treat them as one job.” (bản dịch) «AEO và SEO trực tiếp on đó giống nhau plumbing, so we treat them as một job.» — Roboto Studio / Jono Alford, AEO & SEO thực hành tốt nhất cho Sanity. Đọc đó post
- “SEO success in Sanity comes from intentional structure, not plugins.” (bản dịch) «SEO success trong Sanity xuất hiện từ intentional structure, không plugin.» — Yanatiev, SEO thực hành tốt nhất cho Sanity CMS. Đọc đó post
- “Probably don’t do llms.txt.” (bản dịch) «Probably không làm llms.txt.» — Knut Melvær, Sanity, Cách serve nội dung để agents. Đọc đó trường hướng dẫn
Sanity SEO checklist
truyền được xây dựng khoảng Cách Sanity thực ra hoạt động — xây dựng điều nền tảng leaves để của bạn frontend, và lock xuống điều đó âm thầm break.
Kết xuất & nội dung ( foundation)
- các trang render của họ nội dung trong HTML on đầu tiên yêu cầu (SSG hoặc SSR), không chỉ sau khi client-side JavaScript chạy.
- Không SEO-cốt yếu trang phụ thuộc vào CSR (thô HTML maximizes LLM-crawler coverage).
- ISR (nếu được sử dụng) regenerates on Sanity publish webhook, không chỉ timer.
- Portable Text là serialized máy chủ-side với
@portabletext/reacthoặc@portabletext/to-html(không deprecatedblock-content-to-react).
nội dung model
- Một reusable
seoobject on mỗi document loại — không theo-loại duplication. - SEO các trường là overrides qua
coalesce(), với validation rules enforcing tiêu đề/mô tả length trước khi publish. -
hideFromSearch(hoặcnoIndex) boolean tồn tại và là filtered từ cả hai sitemap GROQ query và trang robots metadata.
Frontend outputs
- Metadata wired từ GROQ vào
generateMetadata()(hoặc framework tương đương) — một reusable helper. - Sitemap generated từ GROQ, drafts/hidden filtered,
_updatedAtđược sử dụng cholastModified, regenerated on webhook. - Canonicals là absolute các URL từ single
SITE_URL, theo-trang và self-referencing theo mặc định. - robots.txt tồn tại trong frontend;
.js/.csskhông phải blocked. - JSON-LD generated programmatically từ existing các trường (Bài viết, Breadcrumb, FAQ, Organization), verified với Rich Kết quả Kiểm thử.
Draft / preview safety
- Production API calls sử dụng
publishedperspective. - mỗi draft/preview phản hồi gửi
X-Robots-Tag: noindexheader. - Preview secret validated máy chủ-side và scoped để Studio origin.
AEO & monitoring
- Bing Quản trị viên web Tools thiết lập (Bing feeds ChatGPT browse); IndexNow on publish.
- (Tùy chọn) markdown phân phối qua nội dung negotiation cho AI các crawler.
mental models
1. Sanity stores, frontend publishes. nội dung Lake holds JSON; của bạn framework produces mỗi byte của HTML và mỗi SEO tín hiệu. trước khi gỡ lỗi bất kỳ Sanity SEO vấn đề, ask: Điều gì là frontend thực ra sending các crawler? Gần như mọi thứ resolves để đó.
2. Kết xuất chế độ là sản phẩm. Pick by Cách nội dung thay đổi:
- Mostly static (blog, tài liệu, marketing) → SSG (rebuild hoặc ISR on publish).
- Frequently thay đổi, phải là fresh → SSR.
- Hours/days cadence, muốn static speed → ISR (webhook-triggered).
- Behind login, không meant để là được lập chỉ mục → CSR là acceptable.
- Công khai nội dung bạn muốn được xếp hạng hoặc cited by AI → không bao giờ CSR.
3. Overrides, không requirements.
SEO các trường default để chính nội dung và chỉ override Khi editor fills them
trong — implemented với coalesce(). điều này giữ editing experience sạch và
bảo đảm mỗi trang có điều gì đó cho của nó tiêu đề và mô tả.
4. Generate, không tác giả, đó markup. Sitemaps, JSON-LD, hreflang, và canonicals là all derived từ existing các trường trong code tại render time. MỘT tách biệt editor surface cho bất kỳ of them chỉ tạo drift. “Derive from existing fields, at render time, in code.” (bản dịch) «Derive từ existing các trường, tại render time, trong code.»
5. Defense trong depth cho drafts.
published perspective trong production là layer một; X-Robots-Tag: noindex header
on mỗi preview phản hồi là layer hai. không bao giờ rely on single control để giữ
unpublished nội dung out của chỉ mục.
Sanity SEO — bảng tra nhanh
Kết xuất modes tại glance
| Chế độ | nơi HTML là được xây dựng | SEO | Best cho | Watch out cho |
|---|---|---|---|---|
| SSG | Xây dựng time → static files | ✅ Best | Blogs, tài liệu, marketing | Stale cho đến khi rebuild |
| SSR | máy chủ, theo yêu cầu | ✅ Best | Frequently-đã cập nhật nội dung | Cao hơn infra cost |
| ISR | Static + webhook regen | ✅ Good | Hourly/daily nội dung | Configure publish webhook |
| CSR | Trong trình duyệt | ⚠️ Risky | Logged-trong dashboards | Invisible để AI các crawler |
Điều gì được xây dựng trong frontend (không trong Sanity)
| Output | Cách |
|---|---|
| thân phản hồi copy HTML | Serialize Portable Text (@portabletext/react / -to-html) |
| Meta tags | generateMetadata() từ GROQ kết quả |
| Sitemap | GROQ query → XML; filter drafts; _updatedAt cho lastmod |
| Canonicals | Absolute các URL từ một SITE_URL, theo-trang |
| robots.txt | Static frontend file (robots.ts trong tiếp theo.js) |
| JSON-LD | Generated từ existing các trường; schema-dts cho types |
| Các chuyển hướng | Sanity documents → frontend middleware / Worker |
GROQ snippets worth memorizing
- Override với fallback:
coalesce(seo.title, title, "") - Đơn giản text từ Portable Text:
pt::text(body) - Sitemap filter:
*[... && defined(slug.current) && hideFromSearch != true]
Fast rules
- LLM-crawler kết xuất varies by provider → tránh CSR-chỉ công khai nội dung.
- Dynamic kết xuất là deprecated — dùng SSR/static/hydration.
- Drafts:
publishedperspective +X-Robots-Tag: noindexheader. - Plugin:
sanity-plugin-seo✅ /sanity-plugin-seo-pane(Yoast) ❌ deprecated. - “SEO success in Sanity comes from intentional structure, not plugins.” (bản dịch) «SEO success trong Sanity xuất hiện từ intentional structure, không plugin.»
Draft hoặc preview nội dung appeared trong Search Console
sử dụng điều này runbook Khi unpublished Sanity document có discoverable preview URL hoặc hiển thị lên trong Google Search Console.
- xác nhận mà phản hồi leaked. Fetch reported URL không có Studio
credentials và inspect cả hai status và
X-Robots-Tagheader. nếu nó trả về published nội dung, continue để step 2. nếu nó exposes draft, disable preview entry point trong khi bạn continue. - kiểm tra production perspective. Trace trang GROQ yêu cầu và xác nhận
production dùng
publishedperspective. nếu nó dùngdrafts, khắc phục đó query đầu tiên; nếu nó đã dùngpublished, continue để phản hồi layer. - Thêm lập chỉ mục backstop. gửi
X-Robots-Tag: noindexon mỗi preview và draft-chế độ phản hồi. nếu header là bị thiếu on bất kỳ preview route, khắc phục shared preview middleware thay vì patching một trang. - Validate preview access. xác nhận preview secret là checked máy chủ-side, không phải reflected vào đích URL, và accepts các yêu cầu chỉ từ dự kiến Studio origin. nếu công khai preview URL vẫn hoạt động, rotate secret và close đó route.
- Xóa được lập chỉ mục copy. sau khi phản hồi là safe, sử dụng Search Console’s
removal workflow Khi exposure là urgent, sau đó yêu cầu fresh crawl. nếu
URL nên không bao giờ exist publicly, giữ
noindexphản hồi khả dụng dài đủ cho các crawler để see nó thay vì blocking nó trong robots.txt. - Verify khắc phục. Fetch URL trong khi logged out và chạy URL Inspection.
draft phải là absent từ thân phản hồi và preview phản hồi phải carry
noindex.
Sanity SEO mistakes để tránh
Expecting Sanity để emit SEO HTML
Vì sao nó sai: Sanity stores JSON; nó không publish các tiêu đề, canonicals, sitemaps, hoặc trang HTML. Làm điều này thay vì: làm frontend responsible cho mỗi output và verify generated phản hồi thay vì Studio các trường.
Chọn CSR cho công khai nội dung
Vì sao nó sai: ban đầu phản hồi là rỗng shell, và nhiều AI các crawler làm không execute JavaScript tại all. Làm điều này thay vì: ship công khai nội dung với SSG, SSR, hoặc webhook-triggered ISR.
Assuming unpublished có nghĩ là unindexable
Vì sao nó sai: shared preview URL có thể leak và là được crawl. Làm điều này thay vì:
sử dụng published perspective trong production và gửi X-Robots-Tag: noindex
header on mỗi preview phản hồi.
Treating Portable Text as HTML
Vì sao nó sai: Portable Text là JSON AST, so un-serialized nội dung không bao giờ
becomes crawlable thân phản hồi copy. Làm điều này thay vì: serialize nó on máy chủ với
@portabletext/react hoặc @portabletext/to-html.
Maintaining JSON-LD trong tách biệt editor
Vì sao nó sai: thứ hai copy của sản phẩm, bài viết, hoặc organization facts drifts từ visible trang. Làm điều này thay vì: derive JSON-LD từ giống nhau Sanity các trường tại render time và validate được kết xuất output.
kiểm tra liệu Sanity trang ships thực HTML
Chạy điều này sau khi thay đổi kết xuất chế độ, Portable Text serialization, hoặc trang dữ liệu loading. nó kiểm tra ban đầu phản hồi, trước khi client-side JavaScript có thể fill gaps.
macOS / Linux — so sánh thông thường và Googlebot các phản hồi
URL="https://example.com/article-slug"
curl -sL "$URL" -o /tmp/sanity-page.html
curl -sL -A "Googlebot" "$URL" -o /tmp/sanity-googlebot.html
grep -Ei '<title>|rel="canonical"|<h1|application/ld\+json' /tmp/sanity-page.html
diff -u /tmp/sanity-page.html /tmp/sanity-googlebot.htmlđầu tiên command nên tìm trang thực tiêu đề, canonical, H1, và JSON-LD trong
thô HTML. có ý nghĩa nội dung khác biệt trong diff deserves investigation;
các crawler và người dùng nên không nhận khác canonical nội dung.
Windows PowerShell — inspect ban đầu phản hồi
$url = "https://example.com/article-slug"
$html = (Invoke-WebRequest -Uri $url).Content
$html | Select-String -Pattern '<title>|rel="canonical"|<h1|application/ld\+json'DevTools Console — xác nhận Portable Text trở thành semantic elements
[...document.querySelectorAll('main article p, main article h2, main article li')]
.map((node) => node.textContent.trim())
.filter(Boolean)
.slice(0, 20)Chạy snippet trong trình duyệt Console. nó là được kết xuất-DOM kiểm tra, so pair nó với
curl kiểm thử: nội dung appearing chỉ ở đây nhưng không trong ban đầu phản hồi là vẫn
client-được kết xuất.
Tools cho Sanity SEO
- URL Inspection (Google Search Console) — see Cách single URL là được crawl và được kết xuất. được kết xuất HTML tells bạn liệu của bạn Portable Text thực ra đã làm nó trong — essential cho catching CSR gaps on Sanity frontend.
- Rich Kết quả Kiểm thử — xác nhận của bạn programmatic JSON-LD là present trong được kết xuất output sau khi bất kỳ kết xuất hoặc template thay đổi.
- Screaming Frog SEO Spider — crawl với JavaScript kết xuất on/off để so sánh thô HTML so với. được kết xuất HTML; Đây là Cách bạn prove liệu của bạn nội dung là máy chủ- được kết xuất hoặc client-được kết xuất.
- Ahrefs trang web Audit — surfaces bị thiếu metadata, hỏng canonicals, chuyển hướng chains, và indexability các vấn đề trên toàn bộ frontend.
- Bing Quản trị viên web Tools — submit của bạn sitemap và monitor Bing lập chỉ mục (nó feeds ChatGPT browse), plus nơi IndexNow submissions hiển thị lên.
sanity-plugin-seo— trong-Studio trực tiếp SEO score, meta/OG preview, và robots control so editors nhận feedback tại authoring time.
Tự kiểm tra: Sanity SEO
Five nhanh các câu hỏi on Cách SEO hoạt động on Sanity-được hỗ trợ trang web. 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
- JavaScript SEO Các vấn đề & Thực hành tốt nhất — my chính reference on kết xuất modes, mà quyết định mọi thứ on Sanity frontend.
- Người mới bắt đầu Hướng dẫn để kỹ thuật SEO — nơi kết xuất và crawling fit trong bigger picture.
My speaking
- JavaScript SEO — Ungagged 2019 (SlideShare) — my walkthrough của Cách headless/decoupled CMSes split frontend từ backend, plus Googlebot’s stateless kết xuất. (Standing disclaimer: dynamic-kết xuất khuyến nghị trong đó deck là hiện tại outdated — Google deprecated nó.)
On điều này trang web
- SEO cho Headless CMS — sibling hướng dẫn; Sanity là cụ thể application của giống nhau headless rules.
- JavaScript SEO — kết xuất deep dive.
- Canonicalization — consolidation mechanics behind của bạn frontend canonical tags.
- AI Tìm kiếm — Cách AI các crawler và câu trả lời engines behave.
Từ khoảng đó ngành
- SEO với Sanity (Sanity) — Sanity own master SEO hướng dẫn; bắt đầu ở đây cho nền tảng-hiện tại behavior.
- SEO Optimization course (Sanity Learn) — đó hands-on Tiếp theo.js course covering đó SEO object, dynamic sitemaps, và JSON-LD.
- Sanity SEO (Webstacks, Devon Wood) — agency hướng dẫn đang làm đó “frontend handles SEO output” (bản dịch) «frontend xử lý SEO output» point rõ ràng.
- AEO & SEO thực hành tốt nhất cho Sanity (Roboto Studio, Jono Alford) — đó AEO angle và đó “derive JSON-LD from existing fields” (bản dịch) «derive JSON-LD từ existing các trường» rule.
- SEO thực hành tốt nhất cho Sanity CMS (Yanatiev) — đó “structure, not plugins” (bản dịch) «structure, không plugin» cách diễn đạt.
- Cách serve nội dung để agents: một trường hướng dẫn (Knut Melvær, Sanity) — nội dung negotiation và đó case so với llms.txt đối với các trang web lớn.
- Headless CMS SEO (Ahrefs, Despina Gavoyannis) — đó rộng hơn headless playbook (nội dung/code/design optimized independently) đó Sanity sits bên trong.
- turbo-bắt đầu-sanity (Roboto Studio, GitHub) — an open-nguồn Sanity SEO starter với real
query.ts,seo-fields.ts, vàseo.tsimplementations.
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 19 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.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.