Panduan Eleventy SEO
Eleventy (11ty) ships zero client-side JavaScript oleh default, so Anda konten adalah di mentah HTML pada pertama fetch. catch — ini generates Tidak tag judul, deskripsi meta, canonicals, atau sitemaps. Di sini's cara configure SEO pada sebuah Eleventy situs, dibangun sekitar data cascade.
Bahasa
1 sinyal bukti di halaman ini
- Alat aktif terkaitHTTP Status & Redirect Checker
Eleventy outputs plain HTML dengan zero client-side JavaScript oleh default, yang adalah safest mungkin starting poin untuk indexability — konten adalah di pertama byte, tidak ada apa pun untuk render. trade-off: Eleventy generates Tidak SEO markup di semua. setiap judul, deskripsi meta, canonical, sitemap, dan bit dari data terstruktur adalah sesuatu Anda implement yourself. data cascade (_data/situs.js → directory data → front penting → eleventyComputed) adalah architecture itu membuat itu scalable: declare defaults setelah, derive canonicals secara otomatis. Plugins like eleventy-plugin-seo dan @11ty/eleventy-img tambahkan convenience, tidak kemampuan. Pick apa pun template language — ini tidak memengaruhi SEO.
TL;DR — Eleventy membangun Anda situs ke plain HTML files ahead dari time, dan — unlike sebagian besar JavaScript alat — ini mengirim Tidak JavaScript untuk browser oleh default. itu’s tentang sebagai friendly sebagai ini mendapatkan untuk Google. catch: Eleventy tidak akan tulis Anda tag judul, deskripsi meta, atau sitemap untuk Anda. Anda memiliki untuk tambahkan itu yourself.
Apa Eleventy adalah
Eleventy (Anda’ll juga see ini ditulis 11ty) adalah sebuah static situs generator. Anda tulis Anda konten di Markdown dan Anda halaman templates di sesuatu like Nunjucks atau Liquid, dan Eleventy turns semua dari ini ke finished HTML files sebelum anyone visits. Anda upload itu files untuk sebuah host, dan ketika Google atau sebuah reader permintaan sebuah halaman, mereka mendapatkan menyelesaikan HTML straight away. Evidence for this claim Eleventy transforms templates and data into static output files during a build. Scope: Eleventy static site generation. Confidence: high · Verified: Eleventy documentation
hal itu sets Eleventy apart dari sebagian besar JavaScript-based alat adalah itu ini ships zero JavaScript untuk browser oleh default. Evidence for this claim Eleventy does not require a client-side JavaScript runtime and ships only the browser JavaScript a developer adds. Scope: Eleventy core output; site code can add JavaScript. Confidence: high · Verified: Eleventy documentation halaman sebuah pengunjung mendapatkan adalah plain HTML — tidak ada apa pun memiliki untuk jalankan di browser untuk bangun ini. untuk SEO itu’s ideal: ada Tidak rendering langkah untuk Google untuk tunggu pada, dan halaman muat fast.
Mengapa itu helps SEO
- Anda konten adalah di mentah HTML. Google sees Anda text dan tautan pada pertama fetch — Tidak JavaScript memiliki untuk jalankan successfully pertama.
- ini adalah fast. Plain HTML dengan Tidak script payload adalah great untuk Core Web Vitals.
- Lebih sedikit dapat break. Fewer moving bagian berarti fewer cara untuk konten untuk go missing dari penelusuran.
big catch: Eleventy melakukan tidak melakukan SEO untuk Anda
ini adalah bagian orang mendapatkan wrong. Eleventy memberikan Anda bersih HTML, tetapi ini menambahkan none dari SEO markup secara otomatis:
- Tidak
<title>tag - Tidak deskripsi meta
- Tidak canonical tautan
- Tidak sitemap
- Tidak data terstruktur
semua dari itu adalah yours untuk tambahkan — biasanya di sebuah shared layout file itu wraps setiap
halaman, so Anda tulis ini setelah dan setiap halaman inherits ini. ada plugins itu help
( popular satu adalah eleventy-plugin-seo), tetapi mereka’re conveniences, tidak magic.
berfungsi masih memiliki untuk happen.
mental model: data cascade
Eleventy’s clever trick untuk melakukan ini tanpa hand-editing setiap halaman adalah data cascade. Anda set sitewide defaults setelah di sebuah global data file (Anda situs name, base URL, default social image), dan Eleventy applies them di mana-mana. Override them per bagian atau per halaman hanya di mana Anda perlu. ini bahkan lets Anda compute nilai — like membangun setiap halaman’s canonical URL secara otomatis dari Anda domain plus halaman’s path.
ingin teknis versi — penuh data cascade, code untuk meta tags dan canonicals, plugin perbandingan, sitemaps, image optimization, dan pagination SEO? Switch untuk Advanced tab.
TL;DR — Eleventy emits plain HTML di bangun time dengan zero client-side JS oleh default, so konten adalah di respons sebelum pertama crawler permintaan — lowest-risk indexability setup ada. tetapi Eleventy ships Tidak SEO markup: judul, deskripsi, canonical, robots, OG, sitemap, dan JSON-LD adalah semua yours untuk bangun. data cascade (
_data/site.js→ directory data files → front penting →eleventyComputed) adalah architecture itu membuat ini scale — declare defaults setelah, derive canonicals dieleventyComputed. Plugins (eleventy-plugin-seo,@11ty/eleventy-img,@quasibit/eleventy-plugin-sitemap) tambahkan convenience, tidak kemampuan.robots.txtadalah sebuah passthrough file. Template language adalah sebuah SEO non-issue — pick oleh team familiarity. v3 adalah ESM-pertama dan membuat Image Transform plugin default path untuk CWV-bersih images. Watch three edge cases:eleventyComputeddependency ordering dapat fail silently, collection membership tidak jaminan sebuah URL adalah emitted, dan sebuah local bangun adalah tidak proof dari apa production sebenarnya menyajikan — verify deployed artifact secara langsung.
Mengapa Eleventy adalah sebuah strong SEO baseline
Eleventy membangun setiap route untuk static HTML di bangun time dan, unlike Berikutnya.js, Nuxt, Gatsby, atau Astro, ships Tidak JavaScript untuk browser unless Anda tambahkan ini. Evidence for this claim Eleventy compiles templates to static output and adds no client-side framework runtime by default. Scope: Eleventy core behavior. Confidence: high · Verified: Eleventy documentation ada Tidak rendering sisi klien untuk sebuah crawler untuk tunggu pada, Tidak rendering budget impact, dan Tidak hydration bundle taxing Core Web Vitals. nyata production Eleventy situs routinely report Lighthouse scores dari 99–100 di seluruh board dan homepages itu ship 0 KB dari JavaScript.
ini adalah juga fast untuk bangun, yang penting lebih untuk SEO daripada ini looks: lebih cepat membangun
berarti tighter deploy cycles, so konten memperbaiki reach mesin pencari sooner. pada sebuah
4 000-Markdown-file benchmark Eleventy membangun di ~1,93s versus ~22,9s untuk Astro,
~29s untuk Gatsby, dan ~70,6s untuk Berikutnya.js, dengan sebuah fraction dari node_modules
footprint (34 MB vs Gatsby’s 583 MB).
tetapi — dan ini adalah seluruh poin dari halaman — none dari itu buys Anda SEO
markup. Eleventy generates bersih HTML dan berhenti di sana. setiap <title>, meta
deskripsi, canonical, sitemap entry, dan JSON-LD block adalah sesuatu Anda
implement. baik news adalah itu Eleventy’s data model membuat implementing them
setelah-dan-di mana-mana genuinely pleasant.
data cascade: Anda SEO architecture foundation
single sebagian besar penting concept untuk scalable Eleventy SEO adalah data cascade — order di yang Eleventy resolves sebuah nilai, lowest priority untuk highest: Evidence for this claim Eleventy's data cascade resolves data from multiple sources according to a documented priority order. Scope: Eleventy data cascade. Confidence: high · Verified: Eleventy: Data cascade
- Eleventy-supplied global data
- Global data files di
_data/(e.g._data/site.jsdengantitle,description,url,author) - Directory data files (e.g.
blog/blog.11tydata.js— memberikan setiap blog postog:type: article) - Template front penting (per-halaman overrides)
eleventyComputed(highest — derive nilai dari lainnya data)
dalam praktik:
- Declare Anda SEO defaults setelah di
_data/site.js. - Override di directory tingkat untuk sebuah konten jenis (semua posts mendapatkan artikel
OG jenis, sebuah
noindexbagian mendapatkannoindex, dan seterusnya.). - Override per halaman di front penting di mana sebuah halaman adalah special.
- gunakan
eleventyComputeduntuk derived nilai — canonical menjadi canonical contoh:
// _data/eleventyComputed.js (or eleventyComputed in a layout data file)
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};Now setiap halaman memiliki sebuah correct self-referencing canonical dengan zero per-halaman berfungsi. itu’s leverage cascade memberikan Anda.
Satu edge case worth testing alih-alih assuming: eleventyComputed nilai dapat
bergantung pada lainnya computed nilai (sebuah judul itu feeds ke sebuah computed deskripsi,
say), dan Eleventy memiliki untuk resolve itu dependency graph sebelum ini dapat render
apa pun. Straightforward chains berfungsi fine, tetapi sebuah computed nilai itu
accidentally bergantung pada itself — secara langsung atau melalui lainnya computed field —
adalah sebuah circular reference, dan ordering issues di sini fail silently sebagai sebuah missing atau
wrong nilai alih-alih sebuah loud bangun error. jika Anda lean pada multiple layered
eleventyComputed fields, periksa dirender output untuk tepat nilai Anda
expect, tidak hanya itu bangun succeeded. Evidence for this claim Computed Data values can derive from other computed values, so dependency ordering and circular references need testing against the rendered output. Scope: Eleventy eleventyComputed resolution. Confidence: high · Verified: Eleventy: Computed Data
Meta tags di base layout
Standard architecture adalah sebuah base layout itu owns <head>, dengan konten
layouts extending ini:
_includes/
layouts/
base.njk ← <head> with all SEO meta tags
post.njk ← extends base, adds BlogPosting schema
_data/
site.js ← sitewide SEO defaultsmeta tags Anda perlu implement yourself, di minimum:
<title>— unique per halaman<meta name="description">— unique per halaman<link rel="canonical">— Eleventy memiliki Tidak dibangun-di canonical; tambahkan ini explicitly<meta name="robots">—noindexuntuk draft/preview halaman (dan thin paginated halaman, jika apa pun)- Open Graph —
og:title,og:description,og:image,og:url,og:type - Twitter/X Cards —
twitter:card,twitter:title,twitter:description,twitter:image
sebuah minimal Nunjucks <head> pulling dari cascade:
<title>{{ title }} | {{ site.title }}</title>
<meta name="description" content="{{ description or site.description }}">
<link rel="canonical" href="{{ canonical }}">
<meta property="og:title" content="{{ title }}">
<meta property="og:image" content="{{ ogImage or site.defaultImage }}">
<meta name="twitter:card" content="summary_large_image">SEO plugins, compared
Anda tidak perlu sebuah plugin — sebuah manual base layout plus data cascade memberikan Anda penuh control dengan Tidak dependencies, dan banyak practitioners prefer persis itu. tetapi dua plugins adalah worth knowing:
eleventy-plugin-seo(artstorm) — paling mature dan widely digunakan. sebuah single{% seo %}shortcode (Liquid) /{% seo "" %}(Nunjucks) emits judul, deskripsi, canonical, robots, Open Graph, Twitter Card, dan author dari sebuah config block (situs judul, deskripsi, URL, author, Twitter tangani, default image). ini juga menangani robot directives pada paginated halaman, sebuah judul divider, dan sebuah minimalistic mode. Install:npm install eleventy-plugin-seo.eleventy-plugin-metagen(tannerdolby) — lebih granular, dengan named shortcode parameters; generates charset, viewport, judul, author, deskripsi, generator, OG, Twitter Card, canonical, dan CSS/JS tags.
aturan dari thumb: plugins tambahkan convenience, tidak kemampuan. Apa pun mereka melakukan, Anda dapat melakukan di base layout. Reach untuk satu jika Anda’d rather tidak maintain boilerplate.
robots.txt
Eleventy melakukan tidak auto-generate robots.txt. Dua approaches:
1 — Static passthrough (simplest). Drop sebuah robots.txt di Anda sumber dan copy
ini verbatim:
eleventyConfig.addPassthroughCopy("src/robots.txt");2 — Template-generated (untuk environment-spesifik output — block semuanya pada staging, izinkan pada production):
---
permalink: /robots.txt
eleventyExcludeFromCollections: true
---
User-agent: *
{% if environment == "production" %}
Allow: /
Sitemap: {{ site.url }}/sitemap.xml
{% else %}
Disallow: /
{% endif %}Remember universal aturan: Disallow blocks crawling, tidak pengindeksan — dan sebuah
noindex tag pada sebuah crawl-blocked URL adalah tidak pernah seen.
Sitemap generation
juga tidak dibangun di. paling-control option adalah sebuah manual template — buat
sitemap.xml.njk dengan permalink: /sitemap.xml dan
eleventyExcludeFromCollections: true, loop di atas collections.all, skip excluded
halaman, dan emit <loc> / <lastmod> entries:
---
permalink: /sitemap.xml
eleventyExcludeFromCollections: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for page in collections.all %}
{% if not page.data.excludeFromSitemap %}
<url>
<loc>{{ site.url }}{{ page.url }}</loc>
<lastmod>{{ page.date | dateToISO }}</lastmod>
</url>
{% endif %}
{% endfor %}
</urlset>atau gunakan @quasibit/eleventy-plugin-sitemap (configure dengan hostname; ini juga
mendukung multilingual alternate tautan). Either cara, mark utility halaman dengan
eleventyExcludeFromCollections: true so mereka jangan leak di.
Satu hal worth menjadi precise tentang: looping di atas collections.all walks
collection membership, tidak guaranteed output. sebuah template dapat belong untuk sebuah
collection dan masih tidak emit sebuah URL — sebagian besar commonly karena -nya permalink
adalah atur ke false, atau karena sebuah data-hanya file adalah tidak pernah dimaksudkan untuk render sebuah
halaman di pertama place. Membership di collections.all adalah tidak proof sebuah item
belongs di sitemap; periksa dirender <loc> entries terhadap halaman
Anda sebenarnya expect untuk menjadi dapat di-crawl. Evidence for this claim Collection membership does not by itself guarantee that an item emits a URL or belongs in the sitemap. Scope: Eleventy collections and permalink interaction. Confidence: high · Verified: Eleventy: Collections
Image optimization untuk Core Web Vitals
sebuah static situs’s HTML adalah fast, tetapi unoptimized images akan masih tank LCP dan CLS.
perbaiki adalah @11ty/eleventy-img, dan di v3 recommended path adalah
Image Transform plugin, yang post-memproses setiap <img> tag di Anda dibangun
HTML secara otomatis — Tidak per-image shortcode needed:
const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
formats: ["avif", "webp", "jpeg"],
defaultAttributes: {
loading: "lazy",
decoding: "async",
},
});Apa itu buys Anda untuk SEO:
- Auto-stamped
widthdanheight→ mencegah layout shift (CLS) srcsetdengan multiple widths → responsive images<picture>dengan AVIF + WebP + JPEG fallback- Tidak upscaling
untuk di atas—fold hero images, override lazy default so mereka muat eagerly:
<img src="hero.jpg" loading="eager" fetchpriority="high" eleventy:widths="800,1200">Permalinks dan bersih URLs
Eleventy’s default adalah bersih URLs dengan sebuah trailing slash: about.njk →
_site/about/index.html → /about/. Override di front penting:
permalink: "/blog/{{ title | slugify }}/"berguna flags: permalink: false memproses sebuah template untuk collections tetapi skips
writing ini untuk disk (handy untuk data-hanya templates), dan dynamicPermalink: false
memperlakukan permalink string secara harfiah. satu SEO hal untuk stay disciplined tentang:
trailing-slash consistency — mixing /page dan /page/ adalah sebuah duplicate-konten
own-goal.
Worth stating plainly karena ini trips orang up: permalink: false suppresses
output entirely — sumber file compiles dan dapat masih feed collections dan
data, tetapi Tidak HTML halaman adalah ditulis dan Tidak URL ada untuk crawl. sebuah sumber file
sitting di Anda konten directory adalah tidak proof itu sebuah corresponding halaman shipped;
jika sebuah halaman adalah missing dari penelusuran, periksa dibangun _site output untuk file
sebelum assuming ini adalah sebuah pengindeksan masalah alih-alih sebuah permalink
satu. Evidence for this claim A permalink value of false suppresses page output entirely, so a source file's existence is not proof of a crawlable page. Scope: Eleventy permalink output control. Confidence: high · Verified: Eleventy: Permalinks
Pagination SEO
Eleventy’s pagination splits sebuah collection di seluruh output files. pertama halaman adalah
/blog/, lalu /blog/1/, /blog/2/, dan so pada (customizable melalui permalink). setiap
halaman di set perlu sebuah unique URL dan pagination.alias untuk expose per-halaman
data. SEO decisions:
- Canonicals. Dua schools: poin setiap halaman di halaman 1 (consolidates sinyal tetapi buries legitimate deep-halaman konten), atau self-referencing canonicals di mana setiap halaman’s canonical adalah -nya own URL — Google’s preferred approach di saat ini documentation. I default untuk self-referencing unless deeper halaman truly memiliki tidak ada apa pun worth pengindeksan.
rel="prev"/rel="next". Google confirmed back di 2019 ini Tidak lebih lama menggunakan ini sebagai sinyal peringkat. beberapa masih tambahkan them untuk help crawler memahami series structure; jika Anda melakukan, wire them daripagination.href.previous/pagination.href.next.noindexpada thin halaman. jika kemudian halaman memiliki insufficient konten, tambahkannoindex(melaluinoindexfield jika Anda’re menggunakaneleventy-plugin-seo, atau manually di head).
data terstruktur / JSON-LD
Manual adalah paling flexible: define sebuah schema object di eleventyComputed atau sebuah
directory data file dan serialize ini di layout. paling bersih jenis untuk sebuah
konten situs adalah Organization / WebSite sitewide di base layout,
BlogPosting / Article per post, BreadcrumbList jika Anda memiliki breadcrumbs, dan
FAQPage pada FAQ bagian. @quasibit/eleventy-plugin-schema offers sebuah shortcode
untuk BlogPosting dan WebPage jika Anda’d rather tidak hand-roll ini (ini expects ISO
8601 dates, so register sebuah date filter).
Eleventy v2 vs v3 — apa changed untuk SEO
v3 (saat ini stable) adalah ESM-pertama: sebuah config file itu menggunakan require() now perlu
.cjs extension, atau Anda set "type": "module" di package.json dan gunakan
import. CommonJS adalah masih fully didukung — hanya menjadi deliberate tentang ini. dua
SEO-relevant wins:
- ~38% lebih cepat cold membangun pada situs di atas 500 halaman → lebih cepat deploys, fresher indeks.
- ** Image Transform plugin adalah default path** — declarative post-processing
dari setiap
<img>, yang membuat shipping responsive, CLS-safe images path dari least resistance alih-alih sebuah per-image chore.
Verify production artifact, tidak hanya local bangun
Semuanya di atas adalah tentang getting sumber right — data cascade,
layout, plugins. None dari ini proves apa sebenarnya ships. sebuah local _site
bangun (atau eleventy --serve) tidak tell Anda apa production menyajikan:
host dan path Anda deploy platform sebenarnya menggunakan, redirects ini injects, headers
ini sets, atau apakah sebuah CDN/proxy rewrites apa pun pada cara out. Konfirmasi
installed Eleventy versi matches apa Anda’re testing terhadap, lalu periksa
deployed situs secara langsung, tidak hanya bangun output:
- Mentah HTML — view-sumber langsung URL, tidak hanya
_site/index.html; konfirmasi judul, deskripsi meta, dan canonical adalah di sana dan correct. - Absolute canonical host — sebuah canonical dibangun dari sebuah staging atau
localhostsite.urlakan silently ship wrong di production jika itu nilai tidak overridden per environment. - Sitemap XML — fetch langsung
/sitemap.xmldan konfirmasi ini resolves, menggunakan production host, dan lists URLs Anda expect (see sitemap bagian di atas pada collection membership tidak guaranteeing sebuah entry). - Suppressed/utility halaman — spot-periksa bahwa
permalink: falsedaneleventyExcludeFromCollections: truehalaman adalah sebenarnya absent dari langsung situs, tidak hanya dari Anda local bangun. - Assets — CSS, JS, dan images referenced di dibangun HTML resolve pada production host (sebuah relative-vs-absolute path mismatch adalah easy untuk miss locally).
- kode status dan redirects — permintaan langsung URLs secara langsung dan konfirmasi 200s di mana Anda expect 200s; sebuah deploy platform’s redirect aturan dapat silently turn sebuah canonical halaman ke sebuah 301 chain itu tidak pernah menampilkan up di sebuah local bangun.
ketiga-party plugin installation adalah tidak proof dari correct output either — ini perubahan apa mendapatkan generated, tidak apa sebuah spesifik deploy environment melakukan dengan ini. Treat ini sebagai sebuah rilis-checklist item, tidak sebuah satu-time setup. Evidence for this claim Local build output does not by itself prove production hostnames, redirects, headers, or canonical behavior; the deployed artifact needs its own verification pass. Scope: Eleventy production deployment verification. Confidence: medium · Verified: Patrick Stox: Eleventy SEO
umum Eleventy SEO mistakes
- Assuming Eleventy “handles SEO” (terjemahan) “menangani SEO” — ini menangani HTML; SEO markup adalah semua yours.
- Forgetting canonical entirely (ada Tidak dibangun-di satu).
- Shipping Tidak sitemap karena Anda assumed ini terasa otomatis.
- Letting unoptimized images undo speed advantage.
- Inconsistent trailing slashes membuat duplicate URLs.
- menggunakan
Disallowdirobots.txtuntuk try untuk deindex sebuah halaman (gunakannoindexalih-alih). - Leaving draft/preview halaman dapat diindeks karena Tidak
noindexadalah set pada bagian.
untuk di mana Eleventy sits among lainnya generators, see Static situs Generators hub; untuk rendering theory behind mengapa static output adalah rendah-risk, parent JavaScript SEO hub.
AI summary
sebuah condensed take pada Advanced versi:
- Eleventy outputs plain HTML di bangun time dengan zero client-side JavaScript oleh default — konten adalah di pertama byte, tidak ada apa pun untuk render. lowest-risk architecture untuk indexability, dengan Lighthouse 99–100 dan 0 KB JS homepages umum.
- Eleventy generates Tidak SEO markup. Tidak judul, deskripsi, canonical, robots, Open Graph, sitemap, atau JSON-LD. setiap satu dari itu adalah sesuatu Anda implement.
- ** data cascade adalah scaling architecture:** global
_data/site.js→ directory data files → front penting →eleventyComputed. Declare defaults setelah; derive canonical denganeleventyComputed(${site.url}${page.url}). - Meta tags langsung di sebuah shared base layout — either hand-ditulis, atau melalui
eleventy-plugin-seo(artstorm, leading plugin: satu{% seo %}shortcode untuk judul/deskripsi/canonical/robots/OG/Twitter). robots.txtadalah sebuah passthrough file (addPassthroughCopy) atau sebuah template untuk env-spesifik output — tidak auto-generated.- Sitemap = sebuah Nunjucks template di atas
collections.all, atau@quasibit/eleventy-plugin-sitemap. Exclude utility halaman denganeleventyExcludeFromCollections: true. - Images:
@11ty/eleventy-img; v3’s Image Transform plugin post-memproses setiap<img>(autowidth/height→ Tidak CLS,srcset, AVIF/WebP). Override heroes untukloading="eager"fetchpriority="high". - Pagination: setiap halaman sebuah unique URL +
pagination.alias; default untuk self-referencing canonicals;rel=prev/nextTidak lebih lama sebuah sinyal peringkat. - Template language tidak memengaruhi SEO — pick oleh familiarity. v3 adalah ESM-pertama
(
require()perlu.cjsatau"type":"module") dan membuat Image Transform default. - Plugins tambahkan convenience, tidak kemampuan — manual base-layout approach melakukan semuanya mereka melakukan.
- Three edge cases untuk test, tidak assume: layered
eleventyComputednilai dapat bergantung pada setiap lainnya dan fail silently jika ordering breaks;collections.allmembership tidak jaminan sebuah URL adalah sebenarnya emitted (periksa untukpermalink: false); dan sebuah local_sitebangun proves tidak ada apa pun tentang production — verify langsung canonical host, sitemap, suppressed halaman, assets, dan kode status secara langsung pada deployed situs.
Dokumentasi resmi
Utama-sumber documentation — dari Eleventy, SEO plugins, dan penelusuran mesin.
Eleventy
- Eleventy docs home — starting poin.
- Image plugin (
@11ty/eleventy-img) — Image Transform, responsive images,width/height. - Permalinks — bersih URLs,
slugify,permalink: false, trailing slashes. - Pagination — splitting collections,
pagination.alias, per-halaman URLs. - performa — Eleventy’s bangun-speed dan zero-JS benchmarks.
- Passthrough copy — cara ship sebuah static
robots.txt. - Community plugins — SEO/sitemap/schema plugin indeks.
- Eleventy v3 announcement — ESM-pertama, lebih cepat membangun, Image Transform.
SEO / sitemap / schema plugins
- eleventy-plugin-seo (artstorm) — judul, deskripsi, canonical, robots, OG, Twitter Card.
- eleventy-plugin-metagen (tannerdolby) — granular meta-tag generation.
- @quasibit/eleventy-plugin-sitemap — sitemap dengan multilingual alternates.
- @quasibit/eleventy-plugin-schema — JSON-LD (BlogPosting, WebPage).
- Consolidate duplicate URLs (canonicals + pagination) — canonical dan pagination guidance itu informs SEO decisions di atas.
Quotes dari sumber
tidak ada pada—record statements dari Google atau Bing reps secara khusus tentang Eleventy — mesin pencari jangan comment pada individual static situs generators. applicable guidance adalah umum principle itu pre-dirender HTML adalah lowest-risk hal Anda dapat sajikan, yang adalah persis apa Eleventy outputs.
Google — pre-dirender HTML adalah simplest
- John Mueller memiliki repeatedly dibuat umum poin itu sementara Google dapat render JavaScript, serving HTML secara langsung adalah simpler dan lebih cepat. tepat wording varies di seluruh Penelusuran Central office-hours dan threads, dan Tidak statement secara khusus referencing Eleventy adalah ditemukan — so I’m tidak quoting sebuah verbatim line di sini. takeaway holds regardless: Eleventy’s default output adalah “just serve the HTML” (terjemahan) “hanya sajikan HTML” case.
Eleventy SEO checklist
sebuah lulus untuk konfirmasi Anda Eleventy situs adalah sebenarnya configured untuk penelusuran — karena Eleventy melakukan none dari ini untuk Anda:
- SEO defaults declared setelah di
_data/site.js(judul, deskripsi,url, author, default OG image). - sebuah base layout owns
<head>dengan<title>, deskripsi meta, OG, dan Twitter Card tags pulling dari cascade. - sebuah canonical adalah set pada setiap halaman (Eleventy memiliki none dibangun di) — ideally
derived di
eleventyComputeddarisite.url+page.url. - Draft/preview/bagian halaman itu tidak seharusnya peringkat carry
noindex(set di directory data file di mana mungkin). - sebuah sitemap adalah generated — template di atas
collections.allatau@quasibit/eleventy-plugin-sitemap— dan utility halaman adalah excluded denganeleventyExcludeFromCollections: true. -
robots.txtada (passthrough copy atau template), references sitemap, dan melakukan tidak block JS/CSS atau halaman Anda ingin terindeks. - Images jalankan melalui
@11ty/eleventy-img(Image Transform di v3) sowidth,height,srcset, dan modern formats adalah emitted — heroes overridden untukloading="eager"fetchpriority="high". - Permalinks adalah bersih dan trailing-slash consistent sitewide.
- Paginated sets memberikan setiap halaman sebuah unique URL dan sebuah self-referencing canonical
(unless deep halaman adalah genuinely thin →
noindex). - data terstruktur (
Organization/WebSitesitewide,BlogPosting/Articleper post) adalah emitted di layout atau melalui sebuah schema plugin. - konten edits trigger sebuah rebuild + redeploy — sebuah static situs hanya reflects -nya terakhir bangun.
- langsung, deployed situs adalah diperiksa secara langsung — mentah HTML, canonical host,
/sitemap.xml, suppressed/utility halaman, asset paths, dan kode status — tidak hanya local_sitebangun. sebuah local bangun tidak prove apa production menyajikan.
data → template → artifact kerangka kerja
Eleventy SEO masalah biasanya enter di satu dari three stages:
- data: frontmatter dan data cascade define judul, deskripsi, canonicals, language, publication state, dan structured-data nilai.
- Template: layouts transform itu data ke consistent head markup dan tautan.
- Artifact: generated
_siteHTML, sitemap, dan robots file adalah apa crawler menerima.
Validate di itu order ketika diagnosing sumber dari sebuah buruk nilai, tetapi validate dibangun artifact sebelum rilis. sebuah correct frontmatter field adalah irrelevant jika sebuah layout melakukan tidak render ini atau sebuah collection masih publishes sebuah draft route.
Eleventy SEO — cheat sheet
Siapa generates apa
| SEO element | Eleventy dibangun-di? | Bagaimana Anda mendapatkan ini |
|---|---|---|
| Bersih HTML, zero JS | Ya (default) | Tidak ada apa pun untuk melakukan |
<title> / deskripsi meta | Tidak | Base layout + cascade |
| Canonical | Tidak | eleventyComputed: ${site.url}${page.url} |
robots meta / noindex | Tidak | Front penting / directory data |
| Open Graph / Twitter Card | Tidak | Base layout (atau eleventy-plugin-seo) |
robots.txt | Tidak | addPassthroughCopy atau template |
| Sitemap | Tidak | Template di atas collections.all atau @quasibit/...sitemap |
| Responsive images | Plugin | @11ty/eleventy-img (v3 Image Transform) |
| JSON-LD | Tidak | Layout / @quasibit/...schema |
** data cascade (rendah → tinggi priority)**
- Eleventy global data
_data/global files (site.js)- Directory data files (
blog.11tydata.js) - Template front penting
eleventyComputed(derive canonical di sini)
Plugin shortlist
eleventy-plugin-seo(artstorm) — leading meta-tag plugin;{% seo %}shortcode.eleventy-plugin-metagen— granular meta tags.@quasibit/eleventy-plugin-sitemap— sitemap + multilingual alternates.@quasibit/eleventy-plugin-schema— JSON-LD.@11ty/eleventy-img— images.
Fast facts
- Template language (Nunjucks / Liquid / Markdown / WebC / HTML / JS) → Tidak SEO perbedaan; pick oleh familiarity.
- v3 adalah ESM-pertama:
require()config → rename untuk.cjsatau set"type": "module". - Exclude utility halaman:
eleventyExcludeFromCollections: true. - Pagination: self-referencing canonicals oleh default;
rel=prev/nextTidak lebih lama sebuah sinyal peringkat. - Plugins = convenience, tidak kemampuan.
Scaffold sebuah SEO-ready Eleventy situs
sebuah starting poin: buat global data file dan sebuah base-layout <head> so setiap
halaman inherits correct meta tags dari cascade.
macOS / Linux
# In your Eleventy project root
mkdir -p src/_data src/_includes/layouts
cat > src/_data/site.js <<'EOF'
module.exports = {
title: "Your Site",
description: "Your default site description.",
url: "https://example.com",
author: "Your Name",
};
EOF
# Derive a self-referencing canonical for every page via the data cascade
cat > src/_data/eleventyComputed.js <<'EOF'
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};
EOFWindows (PowerShell)
# In your Eleventy project root
New-Item -ItemType Directory -Force -Path src\_data, src\_includes\layouts | Out-Null
@'
module.exports = {
title: "Your Site",
description: "Your default site description.",
url: "https://example.com",
author: "Your Name",
};
'@ | Set-Content src\_data\site.js
@'
module.exports = {
canonical: (data) => `${data.site.url}${data.page.url}`,
};
'@ | Set-Content src\_data\eleventyComputed.jsKonfirmasi Anda dibangun HTML memiliki SEO markup
setelah sebuah bangun, konten (dan Anda meta tags) seharusnya menjadi di mentah HTML — Tidak JS diperlukan. periksa output directory secara langsung.
macOS / Linux
# Build, then grep the output for the tags Eleventy does NOT add for you
npx @11ty/eleventy
grep -o '<link rel="canonical"[^>]*>' _site/index.html
grep -o '<title>[^<]*</title>' _site/index.html
# Confirm robots.txt and sitemap.xml actually shipped
ls -l _site/robots.txt _site/sitemap.xmlWindows (PowerShell)
npx @11ty/eleventy
Select-String -Path _site\index.html -Pattern '<link rel="canonical"'
Select-String -Path _site\index.html -Pattern '<title>'
Get-Item _site\robots.txt, _site\sitemap.xmljika grep/Select-String menemukan tidak ada apa pun, markup tidak di sana — remember Eleventy
tidak akan tambahkan ini pada -nya own.
alat untuk Eleventy SEO
eleventy-plugin-seo(artstorm) — leading meta-tag plugin: judul, deskripsi, canonical, robots, OG, dan Twitter Card dari satu{% seo %}shortcode.eleventy-plugin-metagen(tannerdolby) — granular, parameterized meta-tag generation ketika Anda ingin fine control.@11ty/eleventy-img— image optimization; v3 Image Transform plugin auto-stampswidth/height, membangunsrcset, dan emits AVIF/WebP.@quasibit/eleventy-plugin-sitemap— sitemap generation dengan multilingual alternate tautan.@quasibit/eleventy-plugin-schema— JSON-LD (BlogPosting,WebPage).@11ty/eleventy-plugin-rss— RSS/Atom feeds (diperbarui untuk v3).- Lighthouse / PageSpeed Insights — verify Core Web Vitals Anda static output seharusnya menjadi acing.
- Google Search Console pemeriksaan URL — konfirmasi dirender HTML matches Anda dibangun HTML (ini seharusnya, since ada tidak ada apa pun untuk render) dan itu canonicals resolve.
- Screaming Frog / Ahrefs situs Audit — crawl dibangun situs untuk catch missing judul, missing canonicals, trailing-slash duplicates, dan orphaned output files.
Eleventy SEO anti-patterns
Concrete mistakes I see pada nyata Eleventy situs — setiap satu dari them muncul dari treating Eleventy’s bersih HTML output sebagai jika ini adalah finished SEO berfungsi, ketika ini adalah hanya starting poin.
Assuming Eleventy “handles SEO” (terjemahan) “menangani SEO”
** mistake:** Shipping sebuah situs pada strength dari Eleventy’s zero-JS output dan Lighthouse 99–100 scores, tanpa ever menambahkan sebuah judul, deskripsi meta, atau canonical.
Mengapa ini adalah wrong: Eleventy hanya menangani rendering — ini membangun bersih HTML dan
berhenti di sana. Fast, dapat di-crawl HTML dengan Tidak <title> tag masih tidak going untuk peringkat
untuk apa pun spesifik; Google perlu sebenarnya pada-halaman sinyal, dan none dari them
adalah generated untuk Anda.
Apa untuk melakukan alih-alih: bangun SEO meta tags ke Anda base layout pada day satu, sebelum Anda tulis sebuah single konten halaman — see Advanced tab’s “Meta tags di itu base layout” (terjemahan) “Meta tags di base layout” bagian. setiap halaman seharusnya inherit judul, deskripsi, dan canonical dari data cascade secara otomatis.
Forgetting canonical entirely
** mistake:** Leaving <link rel="canonical"> out dari layout karena ini
“felt automatic” (terjemahan) “terasa otomatis”* — ini tidak.
Mengapa ini adalah wrong: Eleventy memiliki Tidak dibangun-di canonical. Tanpa satu, Anda’re
relying pada Google untuk guess preferred URL, yang penting lebih daripada ini seems
setelah trailing-slash variants, ?utm_ params, atau paginated halaman enter
picture.
Apa untuk melakukan alih-alih: Derive ini setelah di eleventyComputed —
canonical: (data) => `${data.site.url}${data.page.url}` — so setiap halaman mendapatkan
sebuah correct self-referencing canonical dengan zero per-halaman effort.
Shipping tanpa sebuah sitemap
** mistake:** Assuming sebuah sitemap mendapatkan generated sebagai bagian dari bangun, yang sama cara Eleventy generates HTML files.
Mengapa ini adalah wrong: ini tidak. sebuah missing sitemap tidak break crawling pada sebuah kecil situs, tetapi pada apa pun dengan lebih daripada sebuah handful dari halaman ini slows penemuan dari baru dan diperbarui konten.
Apa untuk melakukan alih-alih: tambahkan sebuah sitemap.xml.njk template itu loops di atas
collections.all, atau install @quasibit/eleventy-plugin-sitemap. Either cara,
tag utility halaman eleventyExcludeFromCollections: true so mereka jangan leak ke
ini.
Letting unoptimized images undo speed advantage
** mistake:** Dropping mentah JPEGs/PNGs straight ke templates karena “itu site adalah sudah fast” (terjemahan) “ situs adalah sudah fast” thanks untuk zero JS.
Mengapa ini adalah wrong: sebuah zero-JS homepage dengan sebuah 4 MB hero image masih fails LCP dan
CLS — JS advantage tidak touch image weight atau missing width/height
attributes.
Apa untuk melakukan alih-alih: Jalankan images melalui @11ty/eleventy-img ( Image
Transform plugin di v3), yang auto-stamps width/height, membangun srcset, dan
emits AVIF/WebP — lalu override di atas—fold heroes untuk
loading="eager" fetchpriority="high" so mereka jangan mendapatkan lazy-dimuat out dari Anda
LCP window.
Inconsistent trailing slashes
** mistake:** Linking untuk /about di beberapa templates dan /about/ di others,
atau letting sebuah redirect layer paper di atas keduanya existing.
Mengapa ini adalah wrong: Eleventy’s default output adalah /about/ (sebuah directory dengan sebuah
index.html). Mixed tautan internal split tautan equity dan anggaran crawling di seluruh dua
URLs itu render yang sama konten — sebuah duplicate-konten own-goal Anda dibuat
yourself, tidak satu Eleventy dibuat untuk Anda.
Apa untuk melakukan alih-alih: Pick satu form (Eleventy’s default trailing slash adalah
path dari least resistance) dan enforce ini di setiap internal tautan dan di
permalink overrides. Spot-periksa dengan sebuah crawl — my
Redirect Checker akan surface rantai pengalihan jika sebuah
slash mismatch adalah menjadi papered di atas dengan 301s alih-alih fixed di sumber.
menggunakan Disallow untuk try untuk deindex sebuah halaman
** mistake:** menambahkan sebuah Disallow aturan di robots.txt untuk hapus sebuah halaman itu’s
sudah terindeks.
Mengapa ini adalah wrong: Disallow blocks crawling, tidak pengindeksan. jika halaman adalah
sudah terindeks, blocking crawl hanya berarti Google dapat Tidak lebih lama see sebuah
noindex tag Anda tambahkan kemudian — URL dapat persist di indeks dengan Tidak snippet.
Apa untuk melakukan alih-alih: tambahkan <meta name="robots" content="noindex"> untuk halaman
(melalui front penting atau sebuah directory data file) dan let Google crawl ini panjang cukup
untuk see dan honor itu tag. hanya tambahkan Disallow untuk konten Anda tidak pernah ingin di-crawl
di pertama place.
Uji pemahaman Anda: Eleventy SEO
Five quick pertanyaan pada optimizing sebuah Eleventy (11ty) situs untuk penelusuran. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
- JavaScript SEO: sebuah Definitive Guide — rendering, DOM parity, dan mengapa static/prerendered output (Eleventy’s default) adalah rendah-risk end dari spectrum.
- Beginner’s Guide untuk SEO teknis — di mana rendering architecture dan pada-halaman configuration fit di bigger picture.
My speaking
- Bagaimana Penelusuran berfungsi (SlideShare) — my walkthrough dari crawling, rendering, pengindeksan, dan peringkat. (My standing disclaimer applies: “Ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.” (terjemahan) “ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.”)
dari sekitar industry
- Eleventy docs — utama sumber untuk semuanya di ini guide.
- Eleventy Image plugin — v3 Image Transform path untuk responsive, CLS-safe images.
- eleventy-plugin-seo (artstorm) — leading meta-tag plugin’s README dan config reference.
- @quasibit/eleventy-plugin-sitemap — sitemap generation dengan multilingual alternates.
- buat sitemap untuk Anda Eleventy situs web (DEV.untuk) — sebuah jelas walkthrough dari manual
collections.alltemplate approach. - menambahkan robots.txt untuk sebuah Eleventy situs (Mike Fallows) — passthrough vs. environment-spesifik template generation.
- tambahkan data terstruktur untuk sebuah Eleventy blog (Maxi Vanov) — manual JSON-LD patterns beyond BlogPosting.
Log perubahan
Diperbarui 8 Agu 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 17 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.