Panduan Strapi SEO
Strapi adalah sebuah CMS headless dengan no frontend, so Anda SEO adalah decided oleh how frontend renders — plus konten modeling, SEO plugin, sitemaps, drafts, dan preview hygiene.
Bahasa
Strapi adalah sebuah open-source CMS headless dengan no rendering layer, so ini adalah SEO-neutral — setiap outcome adalah decided oleh frontend (Next.js, Nuxt, Astro) itu consumes -nya API. Render di HTML di bangun atau permintaan time (SSG/SSR), not di browser (CSR). Model SEO fields di Anda konten jenis (gunakan community SEO plugin), pertahankan drafts dan preview/staging deployments out dari indeks, block /admin panel dan raw /api JSON, dan bangun sitemap.xml dan robots.txt di frontend. Get rendering right dan sebuah Strapi situs dapat beat sebuah traditional CMS pada Core Web Vitals.
TL;DR — Strapi adalah sebuah “headless” (terjemahan) “headless” CMS — ini stores Anda konten dan hands ini out melalui sebuah API, tetapi ini memiliki no situs web attached. itu berarti Strapi itself doesn’t decide Anda SEO; frontend itu turns Strapi’s konten ke halaman melakukan. big aturan adalah yang sama sebagai untuk apa pun headless setup: bangun Anda HTML pada sebuah server atau di bangun time (SSR atau SSG), not entirely di pengunjung’s browser. dan semua SEO stuff WordPress + Yoast melakukan untuk Anda — judul, sitemaps, robots.txt — Anda now set up yourself.
What Strapi actually adalah
Strapi adalah sebuah open-source, Node.js-based CMS headless. “Headless” (terjemahan) “Headless” berarti ini adalah hanya back half dari sebuah situs web — place Anda write dan store konten — dengan no front half (no theme, no halaman, no rendering). Anda get Anda konten out melalui sebuah REST atau GraphQL API. Anda dapat run Strapi pada Anda own server atau gunakan Strapi Cloud untuk memiliki them host ini.
Evidence for this claim Strapi is a headless CMS that exposes content through APIs and leaves presentation to a separate frontend. Scope: Current Strapi architecture. Confidence: high · Verified: Strapi documentationBecause there’s no dibangun-di situs web, Strapi pairs dengan sebuah separate frontend framework — Next.js, Nuxt, Astro, atau Gatsby adalah umum ones — itu fetches konten dari Strapi dan membangun actual halaman people (dan Googlebot) see.
one thing untuk memahami
Strapi adalah neutral untuk SEO. ini adalah not baik atau buruk pada -nya own. What penting adalah how frontend membangun halaman. ada two safe cara dan one risky cara:
- di bangun time (SSG) — halaman adalah pre-dibangun ke plain HTML files. Fast dan search-friendly.
- pada sebuah server, per permintaan (SSR) — server membangun full halaman dan mengirim ini. juga search-friendly.
- di pengunjung’s browser (CSR) — server mengirim sebuah near-empty shell dan JavaScript fills ini di later. ini adalah risky one.
Google dapat eventually read browser-rendered halaman, tetapi ini adalah slower dan less reliable. AI crawler rendering perilaku varies oleh vendor — there’s no single shared standard — tetapi sebuah crawler itu fetches hanya initial HTML (several dari bot behind ChatGPT dan Perplexity currently berfungsi ini cara) sees exactly what CSR ships: sebuah empty shell. bangun Anda HTML pada server atau di bangun time so konten adalah di raw HTML no penting who’s fetching ini.
Evidence for this claim Google renders JavaScript after crawling, so browser-only content depends on the rendering stage. Scope: Google Search only; no claim about all AI crawlers is sourced here. Confidence: high · Verified: Google: JavaScript SEO basics”where did my SEO settings go?” (terjemahan) “where melakukan my SEO settings go?” masalah
Switching dari WordPress + Yoast untuk Strapi, people adalah shocked itu judul, meta deskripsi, sitemaps, dan tag canonical don’t appear oleh themselves. There’s no plugin layer doing ini quietly di background. dengan Strapi Anda memiliki untuk:
- tambahkan SEO fields (judul, deskripsi, canonical, social image) untuk Anda konten jenis — there’s sebuah official-ish community SEO plugin itu menambahkan ini untuk Anda.
- Wire itu fields ke halaman’s HTML di frontend.
- bangun sitemap dan sebuah robots.txt.
None dari ini adalah hard; ini hanya won’t happen pada -nya own.
sebuah few things itu quietly break
- Drafts getting terindeks. Strapi memiliki sebuah draft/publish workflow. pertahankan unpublished konten out dari search — don’t expose ini melalui public API.
- Preview situs getting terindeks. Teams spin up preview/staging URLs untuk review drafts. jika Google menemukan one, ini dapat indeks sebuah whole duplicate copy. Block them.
- ** admin panel dan raw API.** Anda
/adminlogin dan/api/...JSON feed shouldn’t tampilkan up di search.
ingin full versi — four rendering modes, SEO plugin, sitemaps, draft dan preview hygiene, Strapi Cloud vs. self-hosted, dan migrations? Switch untuk Advanced tab.
TL;DR — Strapi adalah sebuah backend-hanya CMS headless (REST + GraphQL, self-hosted atau Strapi Cloud) dengan no rendering layer, so ini adalah SEO-neutral — frontend’s rendering mode decides everything. SSG/SSR ship fully-rendered HTML dan adalah safe; CSR adalah risky (sebuah crawler itu fetches hanya initial HTML sees sebuah empty shell — itu’s how several major AI crawler currently behave); ISR memiliki stale-pada-pertama-permintaan trap. Model SEO fields di Anda konten jenis ( community
@strapi/plugin-seostores dan previews them tetapi melakukan not output HTML, sitemaps, atau robots.txt — itu’s frontend’s job). pertahankan drafts out via publish workflow (tidak pernah pass auth tokens di public permintaan), noindex preview/staging di host tingkat, pertahankan/admindan raw/api/*JSON out dari search, dan bangunsitemap.xml+ robots.txt di frontend. Strapi adalah neutral; Anda architecture adalah product.
Strapi adalah not SEO decision — frontend adalah
single sebagian besar penting concept di Strapi SEO: Strapi memiliki no rendering layer. ini adalah konten storage, sebuah konten model, sebuah editing UI, dan sebuah API. setiap SEO outcome — indexability, metadata, speed, data terstruktur — adalah determined oleh frontend framework consuming Strapi’s API. Strapi’s job adalah purely untuk store dan sajikan right fields.
Evidence for this claim Strapi provides REST and GraphQL content APIs rather than rendering a public website. Scope: GraphQL requires Strapi's GraphQL plugin; REST is available for content types. Confidence: high · Verified: Strapi: REST APIitu membuat “Strapi is bad for SEO” (terjemahan) “Strapi adalah buruk untuk SEO” wrong frame. Strapi adalah neutral. sebagai Strapi’s own team puts ini, “headless architectures require developers to take ownership of SEO aspects that traditional content management systems handle automatically.” (terjemahan) “headless architectures memerlukan developers untuk take ownership dari SEO aspects itu traditional sistem manajemen konten handle automatically.” sebuah Strapi + Next.js situs rendering pada SSG, dengan sebuah disciplined metadata layer, akan outperform sebuah neglected WordPress install. sebuah Strapi situs fronted oleh sebuah client-rendered React SPA dengan no metadata wiring akan quietly fall apart. sama backend, opposite outcomes — because rendering decisions differ. ini adalah yang sama poin I membuat tentang JavaScript SEO umumnya: pertanyaan untuk start dengan adalah selalu how adalah frontend rendering ini konten?
four rendering modes (paling critical decision)
- SSG — Static situs Generation. HTML dibangun di bangun time, disajikan sebagai static files. Best-case SEO: fully-rendered HTML pada pertama fetch, fast TTFB dan Core Web Vitals. Tradeoff: baru/changed konten perlu sebuah rebuild. Gatsby dan Astro adalah SSG-pertama; Next.js melakukan ini per route.
- SSR — rendering sisi server. HTML rendered per permintaan pada sebuah server atau edge. selalu-fresh, fully-rendered HTML. Tradeoff: Strapi API latency lands directly di Anda TTFB pada setiap permintaan. Next.js, Nuxt, SvelteKit, Remix.
- ISR — Incremental Static Regeneration. Static halaman regenerated di background setelah sebuah revalidation window. sebuah baik middle ground dengan one trap (below).
- CSR — rendering sisi klien. sebuah near-empty shell ships dan browser fetches dari Strapi dan membangun DOM. Worst SEO option: Google harus queue halaman untuk sebuah later render wave — “Googlebot queues all pages with a 200 HTTP status code for rendering, unless a robots meta tag or header tells Google not to index the page” (terjemahan) “Googlebot queues semua halaman dengan sebuah 200 HTTP kode status untuk rendering, unless sebuah robots meta tag atau header tells Google not untuk indeks halaman” — so Anda konten doesn’t exist until itu wave runs. AI crawler dan Bing handle ini far worse daripada Google. Acceptable hanya untuk logged-di dashboards Anda tidak ingin terindeks anyway. sebuah raw React/Vue SPA di atas Strapi lands here oleh default — hindari ini untuk public konten.
** ISR trap:** when revalidation window expires, next permintaan — which dapat menjadi Googlebot — masih gets stale cached halaman; fresh one menyajikan hanya pada following permintaan. untuk volatile data (prices, stock), prefer SSR. ISR adalah ideal untuk konten itu perubahan pada order dari hours atau days.
konten modeling untuk SEO di Strapi
Strapi gives frontend nothing untuk render unless Anda put fields di konten model. untuk setiap public konten jenis, tambahkan sebuah SEO component dengan di minimum:
metaTitle,metaDescriptioncanonicalURLogImage(dan Open Graph / Twitter fields)- sebuah robots directive — e.g. sebuah
preventIndexingBoolean untuk per-entry noindex control
gunakan Strapi’s UID field untuk slugs — ini auto-generates dari judul dan enforces
uniqueness. untuk multilingual situs, enable Strapi’s dibangun-di i18n per konten
jenis, localize slug dan SEO fields per locale, lalu output
<link rel="alternate" hreflang="..."> di frontend menggunakan localizations
relationship setiap entry exposes. sebagai SALT.agency notes, judul “can either be
populated with the Strapi SEO Plugin or by creating a text field where the title tag
will be stored, with conditions added such as not being shorter than or not
exceeding a set amount of characters.” (terjemahan) “dapat either menjadi
populated dengan Strapi SEO Plugin atau oleh membuat sebuah text field where tag judul
akan menjadi stored, dengan conditions ditambahkan such sebagai not menjadi shorter daripada atau not
exceeding sebuah set amount dari characters.”
frontend lalu reads itu fields dari API dan populates <head> —
Next.js generateMetadata, Nuxt useSeoMeta, Astro’s layout <head>.
reliability aturan adalah yang sama sebagai semua headless SEO: HTML-tingkat metadata beats
JS-injected metadata, because Google sees ini pada pertama fetch.
Strapi SEO plugin — what ini melakukan dan doesn’t melakukan
community SEO plugin (@strapi/plugin-seo, formerly @strapi-community/plugin-seo,
listed pada Strapi Market) adalah standard alat. ini “embeds a side panel in every
Content-Type edit view where you can set meta titles, descriptions, canonical URLs,
and social share images,” (terjemahan) “embeds sebuah side panel di setiap
konten-jenis edit view where Anda dapat set meta judul, deskripsi, canonical URLs,
dan social share images,” menambahkan sebuah SERP preview, dan runs di-konten analysis — green,
orange, atau red indicators untuk readability, keyword distribution, dan schema
compliance.
What ini melakukan not melakukan, dan ini adalah paling umum misconception:
- ini melakukan not generate
<head>HTML — frontend renders fields. - ini melakukan not generate sebuah sitemap — itu’s sebuah separate plugin (pada Strapi 5,
Webtools sitemap tambahkan-pada atau
strapi-5-sitemap-plugin). - ini melakukan not write robots.txt atau implement data terstruktur — frontend’s job.
dengan kata lain, plugin gives editors sebuah baik authoring UX dan stores clean fields. frontend masih memiliki untuk melakukan actual SEO output.
Drafts, preview, /admin, dan /api — keeping wrong things out dari indeks
ini adalah where Strapi memiliki more failure modes daripada sebuah hosted platform like Shopify.
- Draft/Publish. Strapi marks drafts dengan
publishedAt: null; API mengembalikan hanya published entries untuk unauthenticated permintaan. critical discipline: tidak pernah pass sebuah authenticated API token di public frontend permintaan, atau semua draft konten becomes fetchable. sitemap plugin/tambahkan-pada respects publish state dan hanya mencakup published URLs. - Preview / staging environments. Vercel branch deploys, Netlify deploy
previews, dan dedicated preview hosts consuming Strapi drafts adalah biasanya
publicly reachable. Block them dengan sebuah layered approach: sebuah
X-Robots-Tag: noindexheader di host tingkat (not hanya sebuah meta tag sebuah CSR halaman injects late),Disallow: /di robots.txt, sebuahnoindexmeta tag pada setiap halaman, dan HTTP authentication where mungkin. Watch Search Console untuk unexpected hostnames — itu’s Anda early warning. - **
/adminpanel.** Strapi’s admin adalah sebuah React SPA; confirm ini carries<meta name="robots" content="noindex">(Strapi v4+ melakukan), pertahankan ini off public tautan, dan password-protect ini — sebuah unprotected/adminadalah discoverable via Google dorking. - ** raw
/api/*JSON.** ini won’t peringkat sebagai sebuah halaman, tetapi ini wastes anggaran crawling dan dapat leak data. sebagian besar production setups put API pada -nya own subdomain (cms.example.com/api.example.com); block itu subdomain entirely di robots.txt dan pertahankan ini off sitemap. jika API dan frontend share sebuah domain,Disallow: /api/.
Sitemaps dan robots.txt — dibangun di frontend
There’s no Yoast, so both adalah explicit. Two sitemap routes:
- sebuah sitemap plugin inside Strapi — generates XML dan hanya mencakup published
entries. pada Strapi 5 maintained option adalah Webtools sitemap
tambahkan-pada (
strapi-plugin-webtools+webtools-addon-sitemap) untuk larger, multilingual situs, ataustrapi-5-sitemap-pluginuntuk simpler ones. older standalonestrapi-plugin-sitemap(pluginpal) tops out di Strapi 4 — -nya own docs poin v5 pengguna untuk Webtools instead, so don’t install ini pada sebuah v5 project. Quoting plugin docs: when draft/publish adalah pada, “this setting will make sure that all draft pages are excluded from the sitemap.” (terjemahan) “ini setting akan pastikan itu semua draft halaman adalah excluded dari sitemap.” - Frontend-generated — Next.js
sitemap.ts, Astro@astrojs/sitemap, Nuxt sitemap modules, fetching published URLs dari Strapi API. More control di atas canonical URLs,lastmod, danchangefreq.
robots.txt adalah disajikan dari frontend (Next.js robots.ts, Astro public/robots.txt).
sertakan sebuah Sitemap: directive, block preview hosts dengan Disallow: /, dan — sebagai dengan
apa pun headless stack — tidak pernah disallow .js atau .css (ini blocks rendering).
tinggi-nilai pattern adalah webhook workflow: Strapi fires sebuah webhook pada publish → triggers sebuah Vercel/Netlify rebuild atau pada-demand revalidation → regenerates sitemap → pings Google Search Console dan IndexNow. Because headless konten updates flow melalui sebuah API alih-alih sebuah plugin itu pings mesin pencari, IndexNow (Bing, Yandex, dan others) adalah terutama valuable wired untuk itu publish webhook.
Strapi Cloud vs. self-hosted — SEO implications
Strapi’s hosting affects API respons time, which penting differently oleh rendering mode:
- SSG/ISR: Strapi API speed penting di bangun time, not runtime — halaman adalah pre-dibangun, so API latency doesn’t touch pengguna’s TTFB.
- SSR: Strapi API latency menambahkan directly untuk TTFB pada setiap permintaan → affects LCP → sebuah nyata peringkat input. ini adalah case untuk mengoptimalkan.
Strapi Cloud adalah managed infrastructure dengan sebuah asset CDN — baik untuk teams without DevOps. Self-hosted gives Anda full control dari caching (Redis), database pengindeksan, dan geographic proximity untuk frontend. Either cara: cache Strapi API respons di CDN layer, atau gunakan ISR dengan pendek revalidation, untuk decouple frontend runtime dari Strapi latency. One caveat worth stating plainly — Strapi Cloud’s CDN menyajikan Strapi API dan assets, not Anda frontend situs web; Anda Core Web Vitals adalah diukur terhadap frontend, which adalah hosted separately (Vercel, Netlify, Cloudflare halaman).
Migrating untuk atau dari Strapi
WordPress → Strapi adalah umum path, dan migrations adalah where headless SEO actually goes wrong:
- Map setiap existing slug exactly onto Strapi’s UID field; apa pun slug perubahan perlu sebuah
301 redirect (gunakan
strapi-plugin-redirect-urlsatau Smart Redirect Manager, read oleh frontend/middleware). - Migrate meta judul, deskripsi, dan
og:imagedariwp_postmetake SEO component fields, dan image teks alt ke Media LibraryalternativeTextfield. - Inventory setiap URL — not hanya posts: tag halaman, paginated archives, parameter URLs — dan bangun peta pengalihan sebelum go-live.
- Migrate canonicals explicitly; don’t assume frontend auto-generates them right.
- Post-launch: run sebuah Screaming Frog crawl comparison, re-verify data terstruktur dengan Rich hasil Test, resubmit sitemaps untuk GSC dan Bing, dan stand up IndexNow.
Strapi SEO adalah really sebuah specialized application dari JavaScript SEO dan rendering — sibling CMS headless SEO write-up covers platform-agnostic versi dari semua dari ini.
AI summary
sebuah condensed take pada Advanced versi:
- Strapi adalah SEO-neutral. ini adalah sebuah backend-hanya CMS headless (REST + GraphQL, self-hosted atau Strapi Cloud) dengan no rendering layer — frontend decides everything. “Strapi is bad for SEO” (terjemahan) “Strapi adalah buruk untuk SEO” adalah sebuah myth.
- rendering mode adalah product: SSG/SSR ship fully-rendered HTML dan adalah safe; CSR adalah risky (konten hanya exists setelah sebuah later render wave, dan AI crawler/Bing handle ini poorly); ISR adalah sebuah baik middle ground dengan sebuah stale-pada-pertama-permintaan trap — gunakan SSR untuk volatile data.
- Model SEO fields di konten jenis:
metaTitle,metaDescription,canonicalURL,ogImage, sebuahpreventIndexingBoolean; UID field untuk slugs; i18n +localizationsuntuk hreflang. - ** SEO plugin stores dan previews fields** tetapi melakukan not output
<head>HTML, sitemaps, atau robots.txt — itu’s frontend’s job. sitemap adalah sebuah separate plugin — pada Strapi 5 itu’s Webtools sitemap tambahkan-pada ataustrapi-5-sitemap-plugin; older standalonestrapi-plugin-sitemapadalah Strapi-4-hanya. - pertahankan wrong things out dari indeks: drafts (publish workflow; tidak pernah pass
auth tokens publicly), preview/staging (host-tingkat
noindex+ robotsDisallow: /
- auth),
/admin(noindex + password), dan raw/api/*JSON (block, ideally pada -nya own subdomain).
- bangun sitemap.xml dan robots.txt di frontend; tidak pernah block
.js/.css; wire sebuah publish webhook → rebuild → sitemap → GSC + IndexNow. - Hosting: di SSR, Strapi API latency hits TTFB/LCP directly — cache ini atau gunakan ISR. Strapi Cloud’s CDN adalah untuk API/assets, not Anda frontend’s Core Web Vitals.
- Migrations fail pada broken 301s, lost metadata, dan accidental CSR — full URL inventory + peta pengalihan sebelum go-live.
Official documentation
Primary-source documentation dari mesin pencari (Strapi adalah rendering-agnostic, so SEO-relevant docs adalah JavaScript/rendering ones).
- memahami JavaScript SEO Basics — crawl → render → indeks pipeline itu governs how sebuah Strapi frontend’s konten gets terindeks.
- Dynamic rendering (deprecated workaround) — why Google deprecated ini; gunakan SSR, static rendering, atau hydration alih-alih prerendering sebuah CSR Strapi frontend.
- rendering untuk konten-Driven Web Apps — SSR vs. SSG vs. CSR tradeoffs untuk konten situs like Strapi-powered editorial.
- Fix Search-Related JavaScript masalah — diagnosing rendered-DOM gaps di sebuah JS frontend.
- Block Search pengindeksan dengan noindex — meta tag /
X-Robots-Tagheader digunakan untuk pertahankan drafts, preview hosts, dan/adminout dari indeks. - Introduction untuk robots.txt — what robots.txt melakukan dan doesn’t melakukan (relevant untuk blocking API subdomain dan preview hosts).
Bing / Microsoft
- baru evergreen Bingbot (Microsoft Edge) — Bingbot renders JS, tetapi less consistently daripada Google — lainnya alasan SSR/SSG penting pada Strapi.
- IndexNow / indexnow.org — push protocol untuk wire untuk Anda Strapi publish webhook.
Quotes dari source
pada—record statements pada JavaScript rendering (Google), plus Strapi team dan practitioners pada headless SEO. setiap tautan adalah sebuah deep tautan itu jumps untuk quoted passage where source mendukung ini.
Google — how JavaScript halaman adalah processed
- “Googlebot queues all pages with a 200 HTTP status code for rendering, unless a robots meta tag or header tells Google not to index the page.” (terjemahan) “Googlebot queues semua halaman dengan sebuah 200 HTTP kode status untuk rendering, unless sebuah robots meta tag atau header tells Google not untuk indeks halaman.” — Google Search Central docs. Jump untuk quote
Google — dynamic rendering adalah deprecated
- “Dynamic rendering was a workaround and not a long-term solution for problems with JavaScript-generated content in search engines.” (terjemahan) “Dynamic rendering adalah sebuah workaround dan not sebuah panjang-istilah solusi untuk masalah dengan JavaScript-generated konten di mesin pencari.” — Google Search Central docs. Recommended instead: “server-side rendering, static rendering, or hydration.” (terjemahan) “rendering sisi server, static rendering, atau hydration.” Jump untuk quote
Strapi — headless shifts SEO ownership untuk developers
- “SEO in headless CMS architectures is a more technical challenge that requires careful implementation, as headless architectures require developers to take ownership of SEO aspects that traditional content management systems handle automatically.” (terjemahan) “SEO di CMS headless architectures adalah sebuah more technical challenge itu memerlukan careful implementation, sebagai headless architectures memerlukan developers untuk take ownership dari SEO aspects itu traditional sistem manajemen konten handle automatically.” — Strapi Blog, CMS headless & Strapi SEO best practices. Read post
- “When using the draft/publish functionality in Strapi, this setting will make sure that all draft pages are excluded from the sitemap. This ensures that only published content appears in search engine sitemaps.” (terjemahan) “When menggunakan draft/publish functionality di Strapi, ini setting akan pastikan itu semua draft halaman adalah excluded dari sitemap. ini ensures itu hanya published konten appears di mesin pencari sitemaps.” — Strapi Blog, Strapi SEO Plugins: Complete Guide untuk Strapi 5. Read post
- “The official SEO plugin embeds a side panel in every Content-Type edit view where you can set meta titles, descriptions, canonical URLs, and social share images.” (terjemahan) “ official SEO plugin embeds sebuah side panel di setiap konten-jenis edit view where Anda dapat set meta judul, deskripsi, canonical URLs, dan social share images.” — Strapi Blog, Strapi SEO Plugins: Complete Guide untuk Strapi 5. Read post
Practitioners — headless menghapus defaults
- “Headless CMS platforms remove a lot of the defaults that traditional CMS platforms handle automatically — meta tags, canonical URLs, structured data, sitemaps, none of these come out of the box in a headless setup.” (terjemahan) “CMS headless platforms hapus sebuah lot dari defaults itu traditional CMS platforms handle automatically — meta tags, canonical URLs, data terstruktur, sitemaps, none dari ini come out dari box di sebuah headless setup.” — Successive Digital, CMS headless SEO: hindari ini umum Pitfalls. Read post
- “The title can either be populated with the Strapi SEO Plugin or by creating a text field where the title tag will be stored, with conditions added such as not being shorter than or not exceeding a set amount of characters.” (terjemahan) “ judul dapat either menjadi populated dengan Strapi SEO Plugin atau oleh membuat sebuah text field where tag judul akan menjadi stored, dengan conditions ditambahkan such sebagai not menjadi shorter daripada atau not exceeding sebuah set amount dari characters.” — SALT.agency, * SEO guide untuk Strapi*. Read post
Two checklists: Strapi SEO health + migration
Strapi SEO health periksa
- frontend renders konten di HTML pada pertama permintaan (SSR atau SSG), not hanya setelah client-side JavaScript runs.
- No public konten jenis relies pada CSR untuk -nya main konten (banyak AI crawler fetch hanya initial HTML dan tidak pernah execute JavaScript).
- sebuah SEO component (metaTitle, metaDescription, canonicalURL, ogImage,
preventIndexing) exists pada setiap public konten jenis dan adalah mapped ke<head>. - Slugs gunakan UID field; canonicals adalah absolute URLs dibangun dari one
SITE_URL, set di rendering layer. - frontend tidak pernah mengirim sebuah authenticated API token di public permintaan (atau drafts leak).
- Preview/staging hosts mengembalikan host-tingkat
X-Robots-Tag: noindexplusDisallow: /di robots.txt (dan HTTP auth where mungkin). -
/adminadalah noindexed dan password-protected; not ditautkan publicly. - raw
/api/*JSON adalah blocked di robots.txt (ideally pada -nya own subdomain, dipertahankan off sitemap). -
sitemap.xmladalah generated (sitemap plugin atau frontend) dan lists hanya published, canonical URLs. - robots.txt exists, mencakup sebuah
Sitemap:directive, dan melakukan not block.js/.css. - sebuah publish webhook triggers sebuah rebuild/revalidate → sitemap regen → GSC + IndexNow ping.
Migration checklist (WordPress → Strapi)
- Full URL inventory — posts, halaman, tag/category halaman, paginated archives, parameter URLs.
- Slugs mapped exactly onto Strapi UID fields; 301 peta pengalihan dibangun
sebelum go-live (
strapi-plugin-redirect-urls/ Smart Redirect Manager). - Meta judul, deskripsi,
og:imagemigrated ke SEO component. - Image teks alt migrated ke Media Library
alternativeTextfield. - Canonicals verified pada baru frontend (not assumed).
- rendering mode confirmed sebagai SSR/SSG (not sebuah accidental CSR default).
- data terstruktur re-verified dengan Rich hasil Test.
- Sitemaps resubmitted untuk Google Search Console dan Bing Webmaster alat; IndexNow stood up.
mental models
1. Strapi adalah not SEO decision — frontend adalah. Strapi memiliki no rendering layer. sebelum debugging anything, jawaban one pertanyaan: how adalah frontend rendering ini konten? Almost setiap Strapi SEO masalah resolves untuk itu.
2. rendering-mode decision aturan. Pick oleh how sering konten perubahan:
- Mostly static (blogs, docs, marketing) → SSG.
- selalu-fresh / volatile (prices, stock) → SSR.
- Hourly/daily, ingin static speed → ISR (mind stale-pertama-permintaan trap).
- Logged-di, not dimaksudkan untuk menjadi terindeks → CSR adalah acceptable.
- Public konten Anda ingin diperingkatkan atau cited oleh AI → tidak pernah CSR.
3. “Rebuild what the plugin did.” (terjemahan) “Rebuild what plugin melakukan.”
setiap automatic Yoast perilaku adalah now sebuah deliberate langkah di Strapi + frontend:
SEO fields di konten model → mapped untuk <head> → sitemap → robots.txt →
canonicals → data terstruktur. jika something’s “missing,” (terjemahan) “missing,” sebuah plugin perilaku adalah tidak pernah
re-implemented.
4. plugin stores; frontend renders. SEO plugin gives editors fields dan previews — ini melakukan not emit HTML, sitemaps, atau robots.txt. pertahankan itu two responsibilities separate di Anda head dan Anda won’t expect plugin untuk melakukan frontend’s job.
5. Four things harus tidak pernah reach indeks.
Drafts, preview/staging deployments, /admin, dan raw /api/* JSON. setiap memiliki sebuah
berbeda control (publish workflow, host-tingkat noindex, password + noindex, robots
block pada -nya own subdomain). Audit semua four explicitly.
Strapi SEO — cheat sheet
rendering modes di sebuah glance
| Mode | Where HTML adalah dibangun | SEO | Best untuk | Watch out untuk |
|---|---|---|---|---|
| SSG | bangun time → static files | ✅ Best | Mostly-static konten | Stale until rebuild; slow membangun di scale |
| SSR | server, per permintaan | ✅ Best | selalu-fresh konten | Strapi API latency lands di TTFB |
| ISR | Static + timed background regen | ✅ baik | Hourly/daily konten | pertama permintaan post-revalidation gets stale halaman |
| CSR | di browser | ⚠️ Risky | Logged-di dashboards | Empty shell untuk HTML-hanya fetchers (banyak AI crawler); render-wave delay |
What Strapi/plugins melakukan vs. what frontend melakukan
| Strapi + SEO plugin | frontend |
|---|---|
| Stores SEO fields (judul, desc, canonical, OG) | Renders itu fields ke <head> |
| SERP preview + di-konten analysis di admin | membangun sitemap.xml |
| Sitemap plugin generates XML (published hanya) | Writes robots.txt |
| Draft/publish gates public API | Implements JSON-LD data terstruktur |
pertahankan out dari indeks — four controls
| Thing | Control |
|---|---|
| Drafts | Publish workflow; tidak pernah gunakan auth tokens di public permintaan |
| Preview/staging | Host-tingkat X-Robots-Tag: noindex + robots Disallow: / + auth |
/admin panel | noindex (default v4+) + password; no public tautan |
Raw /api/* JSON | Block di robots.txt; ideally -nya own subdomain, off sitemap |
Fast aturan
- Strapi adalah SEO-neutral — rendering mode adalah product.
- gunakan UID field untuk slugs; canonicals = absolute URLs dari one
SITE_URL. - SEO plugin stores fields; ini melakukan not output HTML/sitemap/robots.
- tidak pernah disallow
.js/.cssdi robots.txt. - Wire sebuah publish webhook → rebuild → sitemap → GSC + IndexNow.
- di SSR, cache Strapi API (atau gunakan ISR) so latency doesn’t tank LCP.
How seharusnya sebuah Strapi halaman render?
Choose the delivery model
Incident playbook: published Strapi halaman disappear dari search
- Confirm public respons. periksa status, redirects, raw HTML, canonical, dan robots directives. Fix sebuah fetch atau indexability failure sebelum konten analysis.
- Trace publication. Match Strapi publish event untuk webhook, bangun/revalidation, dan cache logs. jika live halaman adalah stale, repair itu chain.
- periksa template scope. Compare affected dan healthy konten jenis. jika one template fails, inspect -nya frontend field mapping dan route generation.
- periksa exposure. Ensure drafts, preview hosts,
/admin, dan raw API routes adalah excluded while public HTML routes remain dapat di-crawl. - Validate recovery. Confirm complete source HTML dan sebuah clean canonical/indexability state, lalu monitor normal recrawl alih-alih repeatedly resubmitting unchanged halaman.
Strapi SEO mistakes
- Treating sebuah SEO plugin sebagai sebuah rendering layer. ini membuat fields; frontend harus output dan validate them.
- Fetching essential konten hanya di browser. gunakan SSG, regeneration, atau SSR untuk halaman itu perlu untuk peringkat.
- Exposing drafts dan preview deployments. memerlukan access dan kirim server-terlihat
noindexsignals. - Putting raw API URLs di sitemaps. Sitemaps seharusnya list canonical public HTML routes, not
/apiresources. - Blocking semua API access without memeriksa architecture. Protect private endpoints, tetapi melakukan not break server membangun atau rendering itu legitimately depends pada Strapi.
konten adalah published di Strapi tetapi halaman stays stale
mungkin cause: webhook, bangun, revalidation, atau cache failure. Fix: trace konten ID melalui setiap langkah dan purge affected route. Confirm: raw production HTML berisi published revision.
SEO fields adalah filled tetapi tags adalah absent
mungkin cause: frontend kueri omits SEO component atau head template melakukan not map ini. Fix: sertakan fields dan render them selama SSG/SSR. Confirm: curl mengembalikan expected judul, canonical, dan robots tags.
Draft atau preview konten adalah dapat diindeks
mungkin cause: sebuah public preview host atau client-hanya noindex logic. Fix: tambahkan authentication dan server-tingkat exclusion. Confirm: unauthenticated permintaan cannot access sebuah dapat diindeks respons.
sebuah konten jenis adalah missing dari sitemap
mungkin cause: frontend sitemap kueri, publication filter, locale relation, atau route mapping excludes ini. Fix: correct kueri dan sertakan canonical published routes hanya. Confirm: sitemap entries resolve untuk dapat diindeks 200 halaman.
Compare Strapi API data dengan production HTML
curl -fsS 'https://cms.example.com/api/articles/SLUG' > strapi.json
curl -fsSL 'https://www.example.com/SLUG/' > page.html
grep -Eio '<title>[^<]+|<link[^>]+rel="canonical"[^>]*|<meta[^>]+name="robots"[^>]*' page.htmlgunakan API respons hanya dari sebuah authorized environment dan melakukan not print tokens ke logs. comparison memeriksa delivery; ini melakukan not prove Google’s pengindeksan decision.
Inspect rendered head nilai
Run di DevTools Console:
({title: document.title, canonical: document.querySelector('link[rel="canonical"]')?.href, robots: document.querySelector('meta[name="robots" i]')?.content}); Prove sebuah Strapi SEO perubahan
konten-delivery test
Test untuk run: publish sebuah controlled revision dan trace Strapi, webhook, bangun/revalidation, cache, dan live source. Expected hasil: one canonical production route menyajikan yang sama published revision. Failure interpretation: delivery atau invalidation adalah stale. Monitoring window: normal publishing SLA. Rollback trigger: mixed konten dan metadata versi reach production.
Source-rendering test
Test untuk run: compare raw dan rendered HTML pada representative konten jenis. Expected hasil: primary konten, tautan, metadata, dan canonicals adalah present dan agree. Failure interpretation: essential output depends pada browser JavaScript. Monitoring window: setiap frontend release. Rollback trigger: sebuah key template loses source konten atau indexability signals.
Exposure test
Test untuk run: permintaan preview, draft, admin, API, dan public routes without credentials. Expected hasil: sensitive routes adalah protected atau excluded while canonical public halaman remain dapat di-crawl. Failure interpretation: access dan SEO controls adalah di atas- atau di bawah-scoped. Monitoring window: setiap routing atau security perubahan. Rollback trigger: drafts become public atau public halaman become blocked.
alat untuk Strapi SEO
@strapi/plugin-seo(community SEO plugin) — menambahkan SEO component, SERP preview, dan di-konten analysis untuk Strapi admin. Install viayarn add @strapi/plugin-seo. Stores fields; doesn’t render them.- Webtools sitemap tambahkan-pada (
strapi-plugin-webtools+webtools-addon-sitemap, pluginpal) — maintained Strapi 5 sitemap option; generatessitemap.xmldari published konten dan auto-splits ke sebuah sitemap indeks di scale.strapi-5-sitemap-pluginadalah sebuah lighter alternative untuk simpler situs. Pluginpal’s older standalonestrapi-plugin-sitemaphanya mendukung Strapi 4 — -nya README redirects v5 pengguna untuk Webtools. strapi-plugin-redirect-urls/ Smart Redirect Manager — manage 301/302 redirects di admin untuk migrations dan slug perubahan.- pemeriksaan URL (Google Search Console) — see how sebuah single frontend URL adalah di-crawl dan rendered; rendered HTML tells Anda whether CSR left konten out.
- Rich hasil Test — confirm JSON-LD adalah present di rendered output setelah apa pun rendering perubahan.
- Screaming Frog SEO Spider — crawl dengan JS rendering pada/off untuk compare raw vs. rendered HTML; bangun pre/post crawl comparison untuk migrations; surface accidentally-dapat diindeks preview/admin/API URLs.
- Ahrefs situs Audit — surfaces broken canonicals, missing metadata, redirect chains, dan indexability issues di seluruh whole frontend.
- Bing Webmaster alat — Bing’s rendering/pengindeksan view dan where IndexNow submissions tampilkan up.
Test yourself: Strapi SEO
Five quick pertanyaan pada how SEO berfungsi pada sebuah Strapi-powered situs. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
- JavaScript SEO Issues & Best Practices — my primary reference pada rendering; core dari how sebuah Strapi frontend gets di-crawl dan terindeks.
- Beginner’s Guide untuk SEO teknis — where rendering dan crawling fit di bigger picture.
My speaking
- JavaScript SEO — Ungagged 2019 (SlideShare) — my walkthrough dari how headless/decoupled CMSes split frontend dari backend, plus Googlebot’s stateless rendering. (Standing disclaimer: dynamic-rendering recommendation di itu deck adalah now outdated — Google deprecated ini.)
pada ini situs
- SEO untuk sebuah CMS headless — platform-agnostic versi dari everything here.
- JavaScript SEO — rendering pillar Strapi SEO sits pada top dari.
dari sekitar industry
- React SEO: Best Practices (Sam Underwood, Ahrefs) — React adalah paling umum frontend paired dengan Strapi dan directly applicable; authored oleh Patrick’s Ahrefs colleague alih-alih Patrick.
- CMS headless & Strapi SEO best practices (Strapi Blog) — Strapi’s own overview dari where SEO ownership shifts di sebuah headless setup.
- Strapi SEO Plugins: Complete Guide untuk Strapi 5 (Strapi Blog) — what SEO dan sitemap plugins melakukan, including draft/publish-di-sitemap perilaku.
- SEO guide untuk Strapi (SALT.agency) — sebuah independent technical-SEO-agency walkthrough dari modeling SEO fields di Strapi.
- Strapi SEO Tips dan Tricks (Notum Tech) — dari team behind original SEO plugin.
- CMS headless SEO: hindari ini umum Pitfalls (Successive Digital) — duplicate-environment dan missing-defaults masalah itu hit Strapi stacks.
- Webtools Sitemap tambahkan-pada (docs) — maintained Strapi 5 sitemap solusi; older strapi-plugin-sitemap (GitHub) hanya mendukung Strapi 4.
- @strapi/plugin-seo (npm) — SEO plugin package dan component reference.
Stats worth citing
- Strapi adalah open-source dan dual-deploy. ini adalah sebuah Node.js CMS headless dengan REST + GraphQL APIs, runnable self-hosted atau pada Strapi Cloud — deployment choice affects API latency, which hanya touches Core Web Vitals di SSR (not SSG/ISR). Source
- ** sitemap tambahkan-pada auto-splits past 50 000 URLs** ke sebuah sitemap indeks dan excludes drafts when draft/publish adalah enabled — practical scale limit untuk sebuah Strapi-generated sitemap. untuk Strapi 5, itu’s Webtools sitemap tambahkan-pada, not older standalone plugin (below). Source
- rendering perilaku isn’t uniform di seluruh AI crawler, tetapi safe assumption adalah HTML-hanya. There’s no single shared spec — beberapa fetchers execute JavaScript, sebagian besar today don’t — so sebuah crawler itu reads hanya initial HTML respons sees sebuah empty shell pada sebuah CSR halaman. SSR/SSG puts konten di raw HTML dan menghapus guesswork, which adalah why ini adalah safer default untuk AI visibilitas serta Google/Bing. Context
- Google deprecated dynamic rendering. Prerendering sebuah CSR Strapi frontend adalah no longer recommended workaround — Google now poin untuk SSR, static rendering, atau hydration. Source
Log perubahan
Diperbarui 21 Jul 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 19 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.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.