Panduan Jekyll SEO
cara mengoptimalkan Jekyll situs untuk search — why -nya static HTML adalah crawler-friendly oleh default, plus jekyll-seo-tag dan jekyll-sitemap plugins, permalinks, collections, robots.txt, dan GitHub halaman plugin whitelist.
Bahasa
1 sinyal bukti di halaman ini
- Data sumber tertautdependency list
Jekyll outputs flat, static HTML — crawler get complete konten pada pertama fetch, dengan no JavaScript rendering delay. So SEO berfungsi isn't fighting framework; ini adalah configuration. Install jekyll-seo-tag (judul, deskripsi, canonical, Open Graph, Twitter Card, JSON-LD) dan jekyll-sitemap (sitemap.xml), dan set url: di _config.yml atau both produce broken output. Pick clean permalinks (/:judul/, not date-based) untuk evergreen konten. buat robots.txt yourself — Jekyll won't. Watch two GitHub halaman traps: plugin whitelist (hanya sebuah fixed set runs without sebuah GitHub tindakan bangun) dan baseurl misconfiguration pada project situs, which breaks setiap canonical URL.
TL;DR — Jekyll membangun Anda whole situs ke plain HTML files ahead dari time, so Google sees Anda konten pada pertama visit — no waiting untuk JavaScript. itu’s sebuah great starting poin untuk SEO. berfungsi adalah di setup: install two plugins (
jekyll-seo-taguntuk meta tags,jekyll-sitemapuntuk Anda sitemap), set Anda situs URL di config, pick clean URLs, dan tambahkan sebuahrobots.txtyourself.
What Jekyll adalah
Jekyll adalah sebuah static situs generator — sebuah alat itu turns Anda konten (written di
Markdown) dan templates ke finished HTML files sebelum anyone visits. ini adalah
written di Ruby, dan ini adalah mesin behind GitHub halaman, so jika Anda’ve ever
pushed sebuah project’s docs atau sebuah personal blog untuk sebuah github.io address, Anda’ve
probably digunakan Jekyll without thinking tentang ini. Evidence for this claim Jekyll transforms source content and templates into a static website and is supported by GitHub Pages. Scope: Jekyll and GitHub Pages. Confidence: high · Verified: Jekyll documentation GitHub Pages: Jekyll
penting bagian untuk SEO: because Jekyll produces plain HTML files, sebuah search mesin gets Anda complete konten moment ini fetches halaman. There’s no JavaScript itu memiliki untuk run pertama. itu menghapus one entire failure mode dari table — ini doesn’t guarantee pengindeksan atau rankings oleh itself, since itu masih depends pada Anda konten, configuration, dan metadata covered below.
What Jekyll melakukan not melakukan untuk Anda
Here’s catch beginners hit: Jekyll adalah crawler-friendly, tetapi ini isn’t “SEO-friendly” (terjemahan) “SEO-friendly” out dari box. sebuah default Jekyll theme sering ships dengan no judul tags, deskripsi meta, atau data terstruktur di semua. Anda memiliki untuk tambahkan itu. baik news adalah two official plugins melakukan almost semua dari ini:
jekyll-seo-tag— menambahkan Anda tag judul, deskripsi meta, canonical URL, dan social-sharing tags automatically.jekyll-sitemap— membangun Andasitemap.xmlautomatically. Evidence for this claim The jekyll-seo-tag and jekyll-sitemap plugins generate SEO tags and sitemap files for Jekyll sites. Scope: Named Jekyll plugins. Confidence: high · Verified: Jekyll SEO Tag Jekyll Sitemap
five things untuk get right
- Install
jekyll-seo-tagdan put{% seo %}di Anda layout’s<head>. - Install
jekyll-sitemapso mesin pencari get sebuah list dari Anda halaman. - Set
url:di_config.ymluntuk Anda nyata domain — both plugins perlu ini, atau Anda canonical URLs dan sitemap poin dilocalhostdan break. - gunakan custom domain, not free
username.github.io/repoaddress, untuk apa pun situs where peringkat penting. - tambahkan sebuah
robots.txtyourself — Jekyll doesn’t buat one.
GitHub halaman surprise
jika Anda host pada GitHub halaman, Anda dapat’t hanya install apa pun plugin Anda ingin. GitHub
runs Jekyll di sebuah locked-down mode itu hanya allows sebuah pendek list dari plugins.
Thankfully jekyll-seo-tag dan jekyll-sitemap adalah both pada itu list — so
essentials berfungsi. untuk anything fancier Anda’d perlu sebuah berbeda bangun setup (covered
di Advanced tab).
ingin full versi — plugin whitelist, baseurl bug itu breaks
canonical URLs, permalinks, collections, dan custom data terstruktur? Switch untuk
Advanced tab.
TL;DR — Jekyll emits flat static HTML di bangun time, so konten adalah di raw respons pada pertama crawl — no Web rendering Service, no Wave 2 delay. SEO berfungsi adalah configuration, not architecture. Install
jekyll-seo-tag(judul, deskripsi, canonical, OG, Twitter Card, JSON-LD) danjekyll-sitemap(sitemap.xml); both memerlukanurl:di_config.ymlatau mereka produce broken output. gunakan clean permalinks (/:title/) di atas date-based ones untuk evergreen konten. Two GitHub halaman traps dominate: plugin whitelist (GitHub membangun dengan--safe; non-whitelisted plugins perlu sebuah GitHub tindakan bangun) dan sebuah missingbaseurlpada project situs, which breaks setiap generated canonical URL. GitHub halaman juga pins spesifik plugin versi (3.10.0 core, olderjekyll-seo-tag/jekyll-sitemapreleases), not hanya which plugins run. Collections perluoutput: trueatau mereka’re tidak pernah rendered. Drafts, future-dated posts, danpublished: falsedocuments adalah excluded dari sebuah normal bangun, dan--incrementaladalah experimental — don’t gunakan ini untuk production deploys. danrobots.txtadalah not auto-generated — membuat ini yourself.
Why Jekyll’s static output adalah baik untuk SEO
Jekyll adalah sebuah static situs generator: ini runs Anda Markdown dan Liquid templates melalui sebuah bangun langkah dan emits finished HTML, once, sebelum apa pun permintaan. itu timing adalah whole SEO advantage. Evidence for this claim Jekyll processes text and templates into static files during a build. Scope: Jekyll build architecture. Confidence: high · Verified: Jekyll documentation
Google’s pipeline adalah crawl → render → indeks, dan rendering JavaScript adalah “a separate step” (terjemahan) “sebuah separate langkah” itu sits di sebuah queue — what people loosely panggil “two-wave” (terjemahan) “two-wave” process. Wave 1 fetches raw HTML dan indeks text dan tautan immediately; Wave 2 queues halaman untuk Web rendering Service untuk run JavaScript, “a few seconds to weeks” (terjemahan) “sebuah few seconds untuk weeks” later depending pada anggaran crawling. dengan Jekyll, Wave 1 sudah berisi semua Anda konten — there’s no JavaScript diperlukan untuk render body. Wave 1 = Wave 2. No rendering delay, no rendering budget spent. ini adalah yang sama argument itu membuat apa pun static situs generator lowest-risk architecture untuk indexability.
downstream benefits ikuti:
- Faster TTFB. Pre-dibangun files disajikan dari sebuah CDN (GitHub halaman sits behind Fastly; Netlify/Vercel memiliki mereka own edges) berarti no database kueri dan no server processing — baik untuk LCP dan rest dari Core Web Vitals.
- No diperlukan JS payload untuk konten → better FCP dan LCP daripada sebuah hydrating SPA.
- Proper HTTP kode status di CDN layer, not client-side error handling.
tetapi none dari itu perubahan fundamentals: static situs masih perlu meta tags, sitemaps, canonical URLs, data terstruktur, dan baik konten. Jekyll’s output adalah crawler-friendly; metadata adalah pada Anda.
GitHub halaman dan Jekyll SEO
paling umum Jekyll deployment adalah GitHub halaman — push untuk sebuah branch dengan halaman enabled dan GitHub auto-membangun situs. itu convenience comes dengan SEO-relevant constraints.
Project situs vs. pengguna/org situs — URL decision
username.github.io/repo-name(sebuah project situs) lives pada sebuah shared subdomain dengan thousands dari lainnya unrelated situs. ini berfungsi fine untuk docs, demos, dan personal projects where URL itself doesn’t perlu untuk carry Anda brand.- sebuah custom domain (poin sebuah
CNAMEdi GitHub halaman) puts situs pada sebuah URL Anda control, dengan HTTPS auto-provisioned oleh GitHub. untuk sebuah situs where domain itself penting — sebuah business situs, sebuah blog Anda’re membangun sebuah audience sekitar — sebuah custom domain dari start menghindari sebuah domain migration later.
jika Anda expect untuk move untuk sebuah custom domain eventually, set ini up early. apa pun
domain migration berarti 301 redirects (jekyll-redirect-from handles ini) dan sebuah
period where inbound tautan dan apa pun accumulated signals poin di old URL —
avoidable churn jika Anda pick akhir domain up front alih-alih switching
later. ini adalah sebuah migration-planning argument, not sebuah claim itu sebuah github.io
subdomain adalah penalized pada -nya own.
baseurl — #1 canonical bug pada project situs
Project situs live di bawah sebuah subfolder (/repo-name/). jika Anda tidak set
baseurl: /repo-name di _config.yml, setiap canonical URL jekyll-seo-tag
generates — dan Anda tautan internal — akan menjadi wrong, missing subfolder. ini adalah
single sebagian besar umum canonical-URL bug pada Jekyll project situs. (pengguna/org situs
disajikan di domain root don’t perlu baseurl.)
plugin whitelist
GitHub halaman runs Jekyll dengan --safe flag dan hanya allows sebuah fixed set dari
plugins. Evidence for this claim GitHub Pages builds Jekyll in safe mode and supports a documented set of plugins. Scope: GitHub Pages hosted builds. Confidence: high · Verified: GitHub Pages: Jekyll plugins SEO-relevant whitelisted ones:
jekyll-seo-tag✓jekyll-sitemap✓jekyll-redirect-from✓ (untuk 301s when Anda perubahan URLs)jekyll-paginate✓
Not whitelisted (dan silently won’t run, atau akan error):
jekyll-last-modified-at— needed untuk accurate sitemap<lastmod>dari file timestamps- Custom structured-data plugins
- Anything dropped di sebuah
_plugins/folder
ini adalah not hanya which plugins — ini adalah which versi
GitHub halaman doesn’t hanya restrict which plugins run; ini pins exact versi
dari setiap one, dan itu bangun environment itself adalah pinned untuk sebuah older Jekyll.
sebagai dari dependency list’s last
update, hosted bangun runs Jekyll 3.10.0 dengan jekyll-seo-tag 2.8.0,
jekyll-sitemap 1.4.0, dan jekyll-feed 0.17.0 — while jekyllrb.com’s own
docs describe saat ini upstream release, 4.4.1. sebuah perilaku documented di sebuah
plugin’s latest README isn’t guaranteed untuk exist di versi GitHub halaman
actually runs; periksa pages.github.com/versions.json untuk pinned versi
sebelum relying pada sebuah spesifik flag atau output. sebuah GitHub tindakan bangun sidesteps
ini too — Anda control Gemfile, so Anda get versi Anda pin, not
GitHub’s.
GitHub tindakan workaround
fix untuk whitelist isn’t “add more gems” (terjemahan) “tambahkan more gems” — ini adalah untuk stop letting GitHub melakukan
bangun. Run Jekyll yourself di CI (actions/jekyll-build-pages, atau bangun
locally dan push _site/ untuk deploy branch dengan peaceiris/actions-gh-pages)
dan whitelist no longer applies. Now apa pun plugin runs, dan Anda pick
Jekyll dan plugin versi alih-alih inheriting GitHub’s pinned set.
jekyll-seo-tag plugin
ini adalah official, maintained plugin itu covers sebagian besar dari core metadata
Jekyll doesn’t tambahkan pada -nya own. Exactly what ini emits depends pada which versi
Anda memiliki installed, Anda _config.yml dan front penting, dan whether Anda
layout actually panggilan {% seo %} — GitHub halaman, misalnya, pins sebuah spesifik
versi alih-alih selalu shipping latest release (more pada itu below).
periksa advanced usage guide
untuk Anda versi’s exact output, dan confirm what actually landed oleh grepping
Anda own dibangun HTML alih-alih assuming ini adalah complete.
Install:
# Gemfile
gem 'jekyll-seo-tag'# _config.yml
plugins:
- jekyll-seo-tag<!-- _layouts/default.html, before </head> -->
{% seo %}What ini generates automatically:
<title>— halaman judul dengan situs name appended (Page Title | Site Name)<meta name="description">— daridescription:front penting atau situs deskripsi<link rel="canonical">— dibangun darisite.url+page.url- Open Graph tags (
og:title,og:description,og:url,og:site_name,og:image) - Twitter Card tags (
twitter:card,twitter:title,twitter:description,twitter:creator,twitter:image) - JSON-LD data terstruktur (
BlogPostinguntuk posts,WebSiteuntuk home halaman) - Pagination meta (next/prev URLs)
diperlukan _config.yml settings — without ini plugin produces broken
output:
title: Your Site Title
description: Your site description
url: "https://yourdomain.com" # CRITICAL — drives canonical URL generation
author:
name: Patrick Stox
twitter: patrickstox
url: https://patrickstox.com # author disambiguation
twitter:
username: patrickstox
card: summary_large_imagePer-halaman front penting overrides:
---
title: "Jekyll SEO Guide"
description: "How to optimize Jekyll sites for search engines."
image:
path: /assets/jekyll-seo-og.png
width: 1200
height: 630
alt: "Jekyll SEO diagram"
canonical_url: "https://example.com/jekyll-seo/" # override if needed
robots: noindex # per-page noindex
seo:
type: BlogPosting # schema.org type override
date_modified: 2025-01-15 # dateModified override for JSON-LD
---Suppression (when Anda layout sudah outputs -nya own):
{% seo title=false %} <!-- suppress the <title> -->
{% seo canonical=false %} <!-- suppress the canonical link -->One gotcha worth flagging: banyak minimal themes (including minima) ship without
jekyll-seo-tag wired di. menambahkan gem untuk Anda Gemfile melakukan nothing unless
theme’s layout actually panggilan {% seo %}.
Sitemaps dengan jekyll-sitemap
sama install pattern (Gemfile + _config.yml). ini generates sebuah sitemaps.org-
compliant sitemap.xml di /sitemap.xml pada setiap bangun.
ini memerlukan url: di _config.yml — without ini, sitemap entries memiliki no
domain.
Controlling <lastmod>, di priority order:
last_modified_at:di front penting (best — explicit control)- Post creation date (fallback — sering wrong untuk evergreen konten updated later)
- Filesystem modification date (perlu non-whitelisted
jekyll-last-modified-at)
Best practice: tambahkan last_modified_at: YYYY-MM-DD untuk setiap post, dan bump ini
when Anda update konten — itu’s freshness signal recrawl prioritization leans
pada.
Excluding halaman:
# Per-page front matter
sitemap: false
# Global pattern (in _config.yml)
defaults:
- scope:
path: "assets/**/*.pdf"
values:
sitemap: falsePermalink configuration
Permalinks adalah set globally di _config.yml atau overridden per halaman di front penting.
| Style | Pattern | SEO notes |
|---|---|---|
date (default) | /:categories/:year/:month/:day/:title.html | Date-heavy, fragile jika post date perubahan |
pretty | /:categories/:year/:month/:day/:title/ | Trailing slash, no .html |
none | /:categories/:title.html | No date burial |
| Custom | /:title/ atau /:categories/:title/ | sebagian besar control — recommended untuk evergreen konten |
Recommended untuk sebagian besar situs:
permalink: /:title/
# or
permalink: /:categories/:title/Why hindari date-based URLs untuk evergreen posts:
- Changing sebuah post’s
date:front penting perubahan -nya URL → inbound tautan break. - Deep hierarchy (
/2019/03/14/post-title/) buries konten untuk no alasan. - (untuk news dan journalism, date URLs adalah fine dan expected — ini adalah sebuah per-context panggil, not sebuah universal aturan.)
Collections perlu mereka own permalink config:
collections:
case_studies:
output: true
permalink: /case-studies/:name/sebuah warning pada changing patterns: once URLs adalah terindeks, switching permalink
styles memerlukan 301 redirects (gunakan jekyll-redirect-from). Skip redirects dan
Anda break tautan equity dan generate 404s di Search Console.
Collections dan SEO
Collections adalah Jekyll’s custom konten jenis beyond posts dan halaman — docs bagian, portfolio items, team members, case studies, FAQs. Two requirements membuat atau break mereka SEO:
-
output: trueharus menjadi set. Without ini, collection documents adalah tidak pernah rendered sebagai individual HTML files dan therefore dapat’t menjadi terindeks. ini adalah sebuah silent pengindeksan killer — konten exists di Anda repo tetapi tidak pernah becomes sebuah dapat di-crawl halaman.collections: docs: output: true # REQUIRED for indexable pages permalink: /docs/:name/ -
setiap document perlu front penting — bahkan sebuah empty
---block. Without ini, Jekyll treats file sebagai sebuah binary static file: no Liquid processing, no metadata, nojekyll-seo-tagintegration.
Note itu collections aren’t disertakan di RSS feeds (hanya posts adalah). untuk besar documentation situs, collections adalah biasanya right structure anyway.
Publishing states dan incremental membangun
Jekyll memiliki several independent switches itu control what actually ends up di dibangun situs. Mixing them up produces either halaman itu silently tidak pernah get dibangun, atau draft/future konten itu ships untuk production oleh accident:
- Drafts (
_drafts/) adalah excluded dari sebuah normal bangun entirely. mereka hanya appear when Anda runbundle exec jekyll serve --drafts(ataubuild --drafts) locally — moving sebuah post ke_posts/dengan sebuah nyata date adalah what actually publishes ini. - Future-dated posts (sebuah
date:later daripada saat ini time) adalah excluded oleh default.future: truedi_config.yml, atau--futureflag, mencakup them — handy untuk local preview, tetapi leaving ini pada di sebuah production config berarti scheduled posts go live moment Anda bangun, not pada mereka intended date. published: falsedi front penting excludes sebuah document dari bangun regardless dari -nya date — sebuah separate switch dari drafts dan future posts, dan easy untuk leave set setelah testing sebuah halaman Anda dimaksudkan untuk ship.- Incremental regeneration (
--incremental) adalah documented oleh Jekyll sebagai experimental, dan ini tracks sebuah limited dependency graph — mainly mencakup dan layouts. sebuah halaman itu iteratessite.postsatau lainnya collection data (sebuah tag indeks, sebuah archive, related-posts logic) dapat go stale di bawah--incrementalwithout Jekyll detecting itu underlying posts changed. Don’t run ini sebagai bagian dari sebuah production deploy; gunakan fullbundle exec jekyll builduntuk anything Anda’re pushing live.
sebelum trusting apa pun dari ini, bangun without flags Anda gunakan locally
(--drafts, --future, --incremental) dan confirm output di _site/
matches what Anda intend untuk publish — safest default untuk sebuah deploy pipeline
adalah sebuah clean, full, non-incremental bangun.
Custom head partials dengan Liquid
When jekyll-seo-tag isn’t enough, Anda bangun Anda own _includes/head.html:
<head>
<meta charset="UTF-8">
<title>
{% if page.title %}{{ page.title }} | {{ site.title }}
{% else %}{{ site.title }}{% endif %}
</title>
<meta name="description" content="
{%- if page.description -%}{{ page.description }}
{%- elsif page.excerpt -%}{{ page.excerpt | strip_html | strip_newlines }}
{%- else -%}{{ site.description }}
{%- endif -%}">
<link rel="canonical" href="{{ page.url | prepend: site.url }}">
{% seo %}
</head>Key Liquid filters untuk SEO:
| strip_html— menghapus tags dari sebuah auto-excerpt (essential untuk clean deskripsi)| strip_newlines— menghapus line breaks dari excerpts| truncate: 160— sebuah optional template-side character cap, not sebuah Google limit. Prefer sebuah authored, halaman-spesifik deskripsi dan preview rendered snippet; fit varies oleh kueri, device, language, dan script.| prepend: site.url— membangun absolute URLs untuk canonical dan OG tags| date_to_xmlschema— ISO 8601 dates untuk JSON-LDdatePublished/dateModified| default: fallback— fallback when sebuah variable adalah nil
Custom JSON-LD beyond what jekyll-seo-tag emits:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": {{ page.title | jsonify }},
"datePublished": "{{ page.date | date_to_xmlschema }}",
"dateModified": "{{ page.last_modified_at | default: page.date | date_to_xmlschema }}",
"author": {
"@type": "Person",
"name": "{{ page.author.name | default: site.author.name }}",
"url": "{{ page.author.url | default: site.author.url }}"
}
}
</script>robots.txt adalah not auto-generated
Jekyll melakukan not buat robots.txt. Anda membuat ini yourself di situs root.
sertakan sebuah empty front-penting block so Liquid processes file (so {{ site.url }}
resolves):
---
---
User-agent: *
Allow: /
Sitemap: {{ site.url }}/sitemap.xmlWithout ini, there’s no sitemap reference di robots.txt — dan beberapa crawler gunakan
itu sebagai sebuah penemuan mechanism. (robots.txt controls crawling, not pengindeksan —
untuk full picture see crawling.)
umum Jekyll SEO myths
“Jekyll handles SEO automatically.” (terjemahan) “Jekyll handles SEO automatically.” static output adalah crawler-friendly, tetapi metadata memerlukan explicit setup. Default themes sering ship dengan no SEO tags di semua.
“GitHub Pages is fine for SEO — it’s free.” (terjemahan) “GitHub halaman adalah fine untuk SEO — ini adalah free.” GitHub halaman itself adalah fine —
static output adalah crawler-friendly regardless dari host. catches adalah plugin
whitelist (dan spesifik versi ini pins, not hanya which plugins) dan,
jika Anda brand depends pada URL, deciding pada sebuah custom domain sebelum Anda bangun
sebuah audience pada github.io.
“Static sites don’t need sitemaps.” (terjemahan) “Static situs don’t perlu sitemaps.” Google dapat temukan halaman via tautan, tetapi sebuah
sitemap speeds penemuan dan carries <lastmod> signals. jekyll-sitemap membuat ini
trivial.
“Jekyll is dead.” (terjemahan) “Jekyll adalah dead.” ini adalah di mature maintenance mode — v4.4,1 shipped di January 2025. Minimal baru fitur, tetapi maintained dan secure, dan GitHub halaman akan mendukung ini indefinitely. untuk sederhana blogs dan docs, ini adalah sebuah solid, boring choice.
“I can use any plugin on GitHub Pages.” (terjemahan) “I dapat gunakan apa pun plugin pada GitHub halaman.” No — --safe plus sebuah fixed whitelist.
fix adalah GitHub tindakan, not more gems.
Where ini fits
Jekyll adalah one dari six generators di static situs generators cluster — GitHub halaman default dan one sebagian besar developers meet pertama. untuk broader context pada how Google renders JavaScript dan when Anda actually perlu ini, see JavaScript SEO hub. bangun-freshness discipline itu applies untuk setiap SSG — sebuah static situs adalah hanya sebagai saat ini sebagai -nya last bangun — applies untuk Jekyll too: edits don’t reach mesin pencari until Anda rebuild dan redeploy.
AI summary
sebuah condensed take pada Advanced versi:
- Jekyll adalah sebuah Ruby static situs generator dan mesin behind GitHub halaman. ini emits flat HTML di bangun time, so konten adalah di raw respons pada pertama crawl — no JavaScript rendering langkah, no Wave 2 delay. itu’s core SEO advantage, shared oleh semua static situs generators.
- ** SEO berfungsi adalah configuration, not architecture.** Default themes sering memiliki no SEO metadata di semua.
jekyll-seo-tag(official plugin) auto-generates judul, deskripsi, canonical, Open Graph, Twitter Card, dan JSON-LD (BlogPosting/WebSite). tambahkan{% seo %}untuk Anda layout’s<head>. Overridable per halaman di front penting.jekyll-sitemapauto-generatessitemap.xml. Both plugins memerlukanurl:di_config.ymlatau output adalah broken (canonical/sitemap poin di localhost).- Permalinks: prefer
/:title/atau/:categories/:title/di atas date-based URLs untuk evergreen konten (date URLs break jika post date perubahan). - Collections perlu
output: true(atau mereka’re tidak pernah rendered sebagai halaman) dan front penting pada setiap document (atau no metadata processing). - Publishing states: drafts (
_drafts/), future-dated posts, danpublished: falsedocuments adalah semua excluded dari sebuah normal bangun unless Anda explicitly opt di (--drafts,--future).--incrementaladalah experimental dan dapat miss halaman itu depend padasite.posts— don’t gunakan ini untuk sebuah production deploy. robots.txtadalah NOT auto-generated — buat ini manually (dengan empty front penting so Liquid resolves{{ site.url }}diSitemap:line).- Two GitHub halaman traps: plugin whitelist (
--safebangun; hanyajekyll-seo-tag,jekyll-sitemap,jekyll-redirect-from,jekyll-paginateamong SEO plugins — others perlu sebuah GitHub tindakan bangun), dan missingbaseurlpada project situs, which breaks setiap canonical URL. GitHub halaman juga pins spesifik plugin versi (e.g. Jekyll 3.10.0 core), which dapat trail latest upstream release. - jika sebuah custom domain penting untuk Anda brand, set ini up early alih-alih pada
username.github.io/repo— moving domains later berarti 301s dan sebuah period where inbound tautan poin di old URL. GitHub halaman juga pins spesifik plugin versi (not hanya which plugins), which dapat trail latest upstream release. - bangun freshness applies sebagai untuk apa pun SSG: perubahan hanya reach search setelah sebuah rebuild + redeploy.
Official documentation
Primary-source documentation — dari Jekyll, -nya plugins, GitHub halaman, dan mesin pencari.
Jekyll
- Jekyll docs — documentation hub.
- Permalinks — dibangun-di styles dan custom patterns.
- Front penting — YAML block itu drives per-halaman metadata.
- Collections — custom konten jenis dan
output: truerequirement. - Plugins — how Jekyll’s plugin sistem berfungsi.
- Variables —
site/pagevariables dan Liquid filters digunakan di head partials.
Official plugins
- jekyll-seo-tag — metadata plugin, plus -nya advanced usage guide.
- jekyll-sitemap — automatic
sitemap.xml. - jekyll-redirect-dari — 301 redirects when Anda perubahan URLs.
GitHub halaman
- tentang GitHub halaman dan Jekyll — how auto-bangun berfungsi.
- tentang custom domains dan GitHub halaman — custom-domain setup.
- halaman.github.com/versi.json — live plugin whitelist dan locked dependency versi.
- Jekyll releases dan endoflife.date/jekyll — versi dan maintenance status.
mesin pencari
- JavaScript SEO basics — crawl → render → indeks phases (two-wave rendering) itu sebuah static bangun lets Anda skip untuk konten.
- di-Depth Guide untuk How Google Search berfungsi — where rendering sits di pipeline.
- Core Web Vitals (web.dev) — performa metrics sebuah fast static situs benefits dari structurally.
Quotes dari source
ada no pada-record quotes dari Google atau Bing reps specifically tentang Jekyll. Google doesn’t comment pada individual static situs generators. SEO case untuk Jekyll rests pada Google’s umum rendering dan static-HTML guidance, which applies untuk apa pun static situs.
Google — rendering adalah sebuah separate, queued langkah ( thing Jekyll’s static output menghapus dari critical path)
- “During the crawl, Google renders the page and runs any JavaScript it finds using a recent version of Chrome.” (terjemahan) “selama crawl, Google renders halaman dan runs apa pun JavaScript ini menemukan menggunakan sebuah recent versi dari Chrome.” — Google Search Central docs. dengan Jekyll, there’s no JavaScript needed untuk render body, so ini langkah costs Anda nothing. Jump untuk quote
- “Rendering is important because websites often rely on JavaScript to bring content to the page, and without rendering Google might not see that content.” (terjemahan) “rendering adalah penting because situs web sering rely pada JavaScript untuk bring konten untuk halaman, dan without rendering Google mungkin not see itu konten.” — i.e., jika Anda konten adalah sudah di static HTML (sebagai ini adalah dengan Jekyll), rendering dapat’t cost Anda visibilitas. Jump untuk quote
Jekyll SEO checklist
sebuah scannable pass untuk confirm Anda Jekyll situs adalah siapkan untuk peringkat:
-
url:adalah set di_config.ymluntuk Anda nyata production domain (notlocalhost:4000). - untuk sebuah GitHub halaman project situs,
baseurl: /repo-nameadalah set (skip pada pengguna/org root situs). -
jekyll-seo-tagadalah installed dan theme layout actually panggilan{% seo %}di<head>. -
jekyll-sitemapadalah installed dan/sitemap.xmladalah generating. - Sitemap adalah submitted di Google Search Console dan Bing Webmaster alat.
-
title:,description:, danauthor:adalah set di_config.yml. - setiap post/halaman memiliki sebuah explicit
description:(don’t rely pada auto-excerpt). -
last_modified_at:adalah pada posts dan bumped when konten perubahan. - Permalinks gunakan
/:title/atau/:categories/:title/untuk evergreen konten (not date default). - sebuah
robots.txtexists (dengan empty front penting) dan references sitemap. - setiap collection itu seharusnya menjadi terindeks memiliki
output: true. - setiap collection document memiliki front penting (bahkan sebuah empty
---). - sebuah custom domain adalah configured (HTTPS auto-provisioned), not bare
github.iosubdomain. - URL/permalink perubahan adalah paired dengan
jekyll-redirect-from301s. - Images adalah compressed sebelum commit (Jekyll doesn’t mengoptimalkan them di bangun).
- One trailing-slash convention adalah enforced via permalink style (no
/page/vs/pageduplicates). - Production membangun run without
--draftsatau--future, dan no halaman Anda intend untuk ship masih memilikipublished: false. - Production deploys gunakan full
bundle exec jekyll build, not--incremental(experimental, dan dapat misssite.posts-dependent halaman).
Jekyll SEO — cheat sheet
** two essential plugins**
| Plugin | melakukan | Whitelisted pada GitHub halaman? | perlu |
|---|---|---|---|
jekyll-seo-tag | judul, deskripsi, canonical, OG, Twitter Card, JSON-LD | Yes ✓ | url:, {% seo %} di <head> |
jekyll-sitemap | Auto sitemap.xml | Yes ✓ | url: |
jekyll-redirect-from | 301 redirects | Yes ✓ | redirect_from: di front penting |
jekyll-last-modified-at | Filesystem <lastmod> | No ✗ | GitHub tindakan bangun |
diperlukan _config.yml keys (atau output breaks)
| Key | Why |
|---|---|
url: | Canonical URLs + sitemap entries; without ini → localhost |
baseurl: | Project situs di bawah /repo/ — without ini → broken canonicals |
title: / description: | Defaults untuk jekyll-seo-tag |
author: | Author info di JSON-LD |
Permalink styles
permalink: nilai | Output | gunakan untuk |
|---|---|---|
date (default) | /cat/2019/03/14/title.html | hindari untuk evergreen |
pretty | /cat/2019/03/14/title/ | Date-relevant konten |
none | /cat/title.html | No date burial |
/:title/ | /title/ | sebagian besar evergreen situs |
Fast facts
- Jekyll output adalah static HTML → no Wave 2 rendering delay; konten di pertama fetch.
robots.txtadalah NOT auto-generated — buat ini (dengan empty front penting).- Collections perlu
output: truedan front penting, atau mereka don’t indeks. - GitHub halaman membangun dengan
--safe+ sebuah plugin whitelist — non-whitelisted plugins perlu sebuah GitHub tindakan bangun. - saat ini upstream Jekyll: v4.4,1 (Jan 2025); GitHub halaman runs sebuah locked
v3.10,0 dengan -nya own pinned plugin versi (
jekyll-seo-tag2.8.0,jekyll-sitemap1.4.0,jekyll-feed0.17.0) — periksa halaman.github.com/versi.json untuk saat ini list. - jika sebuah custom domain penting untuk Anda brand, set ini up sebelum membangun sebuah
audience pada
username.github.io/repo— menghindari sebuah later domain migration.
bangun dan periksa Anda Jekyll situs locally
sebelum trusting production, bangun locally dan verify Anda metadata adalah actually di HTML.
macOS / Linux
# Install dependencies and serve locally (defaults to http://localhost:4000)
bundle install
bundle exec jekyll serve
# Build the production site into _site/ (override the dev url)
JEKYLL_ENV=production bundle exec jekyll build
# Confirm jekyll-seo-tag actually emitted a canonical + title into a built page
grep -i 'rel="canonical"' _site/index.html
grep -i "<title>" _site/index.html
# Confirm the sitemap was generated and points at your real domain (not localhost)
grep -i "<loc>" _site/sitemap.xml | headWindows (PowerShell)
# Install dependencies and serve locally
bundle install
bundle exec jekyll serve
# Build the production site (set the env var for this command)
$env:JEKYLL_ENV="production"; bundle exec jekyll build
# Confirm canonical + title made it into the built HTML
Select-String -Path _site\index.html -Pattern 'rel="canonical"'
Select-String -Path _site\index.html -Pattern "<title>"
# Confirm the sitemap was generated with your real domain
Select-String -Path _site\sitemap.xml -Pattern "<loc>" | Select-Object -First 10jika <loc> entries atau canonical tampilkan localhost:4000, Anda url: isn’t set (atau
JEKYLL_ENV=production wasn’t applied) — fix _config.yml sebelum deploying.
sebuah starter robots.txt untuk Jekyll
Save ini sebagai robots.txt di Anda situs root. empty front-penting block adalah what
membuat Liquid process file so {{ site.url }} resolves:
---
---
User-agent: *
Allow: /
Sitemap: {{ site.url }}/sitemap.xml alat untuk Jekyll SEO
jekyll-seo-tag— official metadata plugin (judul, deskripsi, canonical, OG, Twitter Card, JSON-LD). single biggest SEO win untuk sebuah Jekyll situs.jekyll-sitemap— official automaticsitemap.xml.jekyll-redirect-from— generate 301 redirects di front penting when Anda perubahan permalinks.- GitHub tindakan (
actions/jekyll-build-pages,peaceiris/actions-gh-pages) — bangun Jekyll yourself untuk escape GitHub halaman plugin whitelist dan run apa pun plugin. - Google Search Console — verify situs, submit sitemap, dan watch pengindeksan/coverage. Essential untuk sebuah baru Jekyll situs.
- Bing Webmaster alat — submit sitemap (Anda dapat import credentials dari GSC).
- View Source / pemeriksaan URL — confirm Anda judul, deskripsi meta, dan canonical adalah di raw HTML (mereka seharusnya menjadi, since Jekyll adalah static).
- PageSpeed Insights / web.dev — periksa Core Web Vitals; sebuah static Jekyll situs seharusnya score well, tetapi unoptimized images adalah umum drag.
Jekyll SEO mistakes untuk hindari
Concrete mistakes people actually membuat setting up Jekyll untuk search — prevention, not diagnosis.
Leaving url: unset di _config.yml
Both jekyll-seo-tag dan jekyll-sitemap bangun absolute URLs dari site.url.
Skip ini dan Anda tag canonical dan sitemap <loc> entries either poin di
localhost:4000 ( dev default) atau come out dengan no domain di semua — itu’s
canonical URLs dan sebuah sitemap itu actively mislead crawler alih-alih helping
them. melakukan ini instead: set url: untuk Anda nyata production domain di
_config.yml sebelum pertama deploy, dan grep dibangun _site/ output untuk
localhost untuk confirm ini didn’t leak melalui.
Skipping baseurl pada sebuah GitHub halaman project situs
username.github.io/repo-name situs live di bawah sebuah /repo-name/ subfolder. jika
baseurl: /repo-name isn’t set, setiap canonical URL jekyll-seo-tag generates —
dan Anda tautan internal — adalah missing itu subfolder, pointing di sebuah URL itu
doesn’t exist. ini adalah single sebagian besar umum canonical-URL bug pada Jekyll project
situs. melakukan ini instead: set baseurl: pada project situs (pengguna/org situs di
domain root don’t perlu ini), dan spot-periksa sebuah dibangun halaman’s canonical terhadap
-nya nyata, live URL.
Assuming sebuah collection adalah dapat diindeks without output: true
Collections (docs bagian, case studies, team bios) adalah Jekyll’s custom konten
jenis, tetapi without output: true di _config.yml, documents adalah tidak pernah
rendered sebagai individual HTML files — konten sits di Anda repo dan simply
tidak pernah becomes sebuah dapat di-crawl halaman. There’s no error, no warning, hanya halaman itu
tidak pernah exist. melakukan ini instead: set output: true pada setiap collection dimaksudkan
untuk menjadi public, dan setelah sebuah bangun, confirm expected HTML files actually landed
di _site/.
menggunakan date-based permalinks untuk evergreen konten
Jekyll default permalink style (/:categories/:year/:month/:day/:title.html)
bakes publish date ke URL. perubahan post’s date: front penting later
— which people melakukan, sering hanya untuk bump ini untuk sebuah re-publish — dan URL perubahan
dengan ini, breaking setiap inbound tautan dan forcing sebuah redirect cleanup Anda didn’t
plan untuk. melakukan ini instead: gunakan /:title/ atau /:categories/:title/ untuk
evergreen posts; reserve date-based permalinks untuk genuinely date-relevant
konten like news, where date belongs di URL.
Trying untuk install sebuah non-whitelisted plugin pada GitHub halaman dan expecting ini untuk run
GitHub membangun Jekyll dengan --safe flag, which silently skips atau errors pada
apa pun plugin outside sebuah fixed whitelist — dropping sebuah gem like
jekyll-last-modified-at atau sebuah custom structured-data plugin ke _plugins/
dan pushing ini melakukan not membuat ini run pada default GitHub halaman bangun. melakukan ini
instead: periksa plugin terhadap
halaman.github.com/versi.json pertama;
jika ini adalah not listed, bangun dengan GitHub tindakan (actions/jekyll-build-pages atau sebuah
local bangun pushed via peaceiris/actions-gh-pages) alih-alih fighting
whitelist.
Assuming Jekyll ships sebuah robots.txt
Jekyll melakukan not generate robots.txt — there’s no plugin toggle, no default
file, nothing. sebuah situs dengan no robots.txt di semua isn’t broken untuk pengindeksan, tetapi
ini juga memiliki no Sitemap: reference untuk crawler itu gunakan robots.txt sebagai sebuah
penemuan mechanism. melakukan ini instead: buat robots.txt yourself di
situs root dengan sebuah empty front-penting block (--- ---) so Liquid processes ini
dan {{ site.url }} resolves di Sitemap: line.
Test yourself: Jekyll SEO
Five quick pertanyaan pada optimizing Jekyll situs untuk search. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My writing
- JavaScript SEO: sebuah Definitive Guide — rendering, DOM parity, dan why static/prerendered output (like Jekyll’s) adalah rendah-risk end dari spectrum.
- Beginner’s Guide untuk SEO teknis — where rendering architecture dan sitemaps fit di bigger picture.
My speaking
- How Search berfungsi (SlideShare) — my walkthrough dari crawling, rendering, pengindeksan, dan peringkat. (My standing disclaimer applies: “This is my understanding of systems… not going to be 100% complete or accurate.” (terjemahan) “ini adalah my understanding dari sistem… not going untuk menjadi 100% complete atau accurate.”)
dari sekitar industry
- Jekyll docs — official documentation, including permalinks dan collections.
- jekyll-seo-tag — official metadata plugin dan -nya advanced usage guide.
- jekyll-sitemap — official sitemap plugin.
- tentang GitHub halaman dan Jekyll — GitHub’s own docs pada bangun process dan constraints.
- halaman.github.com/versi.json — authoritative GitHub halaman plugin whitelist dan locked versi.
- Google Search Central — JavaScript SEO basics — rendering phases sebuah static bangun lets Anda skip.
- CloudCannon — jekyll-seo-tag showcase — sebuah practitioner walkthrough dari plugin.
Log perubahan
Diperbarui 27 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 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.