Panduan Jekyll SEO
cara mengoptimalkan Jekyll situs untuk penelusuran — mengapa -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.
1 sinyal bukti di halaman ini
- Data sumber tertautdependency list
Jekyll outputs flat, static HTML — crawler mendapatkan menyelesaikan konten pada pertama fetch, dengan Tidak JavaScript rendering delay. So SEO berfungsi tidak fighting kerangka kerja; 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 keduanya produce rusak output. Pick bersih permalinks (/:judul/, tidak date-based) untuk evergreen konten. buat robots.txt yourself — Jekyll tidak akan. Watch dua GitHub halaman traps: plugin whitelist (hanya sebuah fixed set berjalan tanpa sebuah GitHub tindakan bangun) dan baseurl misconfiguration pada project situs, yang breaks setiap canonical URL.
TL;DR — Jekyll membangun Anda seluruh situs ke plain HTML files ahead dari time, so Google sees Anda konten pada pertama visit — Tidak menunggu untuk JavaScript. itu’s sebuah great starting poin untuk SEO. berfungsi adalah di setup: install dua plugins (
jekyll-seo-taguntuk meta tags,jekyll-sitemapuntuk Anda sitemap), set Anda situs URL di config, pick bersih URLs, dan tambahkan sebuahrobots.txtyourself.
Apa Jekyll adalah
Jekyll adalah sebuah static situs generator — sebuah alat itu turns Anda konten (ditulis di
Markdown) dan templates ke finished HTML files sebelum anyone visits. ini adalah
ditulis 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 tanpa thinking tentang ini. Bukti untuk klaim ini Jekyll transforms source content and templates into a static website and is supported by GitHub Pages. Cakupan: Jekyll and GitHub Pages. Tingkat keyakinan: tinggi · Diverifikasi: Jekyll documentation GitHub Pages: Jekyll
penting bagian untuk SEO: karena Jekyll produces plain HTML files, sebuah penelusuran mesin mendapatkan Anda menyelesaikan konten moment ini fetches halaman. ada Tidak JavaScript itu memiliki untuk jalankan pertama. itu menghapus satu entire failure mode dari table — ini tidak jaminan pengindeksan atau rankings oleh itself, since itu masih bergantung pada Anda konten, configuration, dan metadata covered di bawah.
Apa Jekyll melakukan tidak melakukan untuk Anda
Di sini’s catch beginners hit: Jekyll adalah crawler-friendly, tetapi ini tidak “SEO-friendly” (terjemahan) “SEO-friendly” out dari box. sebuah default Jekyll theme sering ships dengan Tidak judul tags, deskripsi meta, atau data terstruktur di semua. Anda memiliki untuk tambahkan itu. baik news adalah dua official plugins melakukan hampir semua dari ini:
jekyll-seo-tag— menambahkan Anda tag judul, deskripsi meta, canonical URL, dan social-sharing tags secara otomatis.jekyll-sitemap— membangun Andasitemap.xmlsecara otomatis. Bukti untuk klaim ini The jekyll-seo-tag and jekyll-sitemap plugins generate SEO tags and sitemap files for Jekyll sites. Cakupan: Named Jekyll plugins. Tingkat keyakinan: tinggi · Diverifikasi: Jekyll SEO Tag Jekyll Sitemap
five hal untuk mendapatkan right
- Install
jekyll-seo-tagdan put{% seo %}di Anda layout’s<head>. - Install
jekyll-sitemapso mesin pencari mendapatkan sebuah list dari Anda halaman. - Set
url:di_config.ymluntuk Anda nyata domain — keduanya plugins perlu ini, atau Anda canonical URLs dan sitemap poin dilocalhostdan break. - gunakan custom domain, tidak free
username.github.io/repoaddress, untuk apa pun situs di mana peringkat penting. - tambahkan sebuah
robots.txtyourself — Jekyll tidak buat satu.
GitHub halaman surprise
jika Anda host pada GitHub halaman, Anda dapat’t hanya install apa pun plugin Anda ingin. GitHub
berjalan Jekyll di sebuah locked-down mode itu hanya memungkinkan sebuah pendek list dari plugins.
Thankfully jekyll-seo-tag dan jekyll-sitemap adalah keduanya pada itu list — so
essentials berfungsi. untuk apa pun fancier Anda’d perlu sebuah berbeda bangun setup (covered
di Advanced tab).
ingin penuh 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 mentah respons pada pertama crawl — Tidak Web rendering Service, Tidak Wave 2 delay. SEO berfungsi adalah configuration, tidak architecture. Install
jekyll-seo-tag(judul, deskripsi, canonical, OG, Twitter Card, JSON-LD) danjekyll-sitemap(sitemap.xml); keduanya memerlukanurl:di_config.ymlatau mereka produce rusak output. gunakan bersih permalinks (/:title/) di atas date-based ones untuk evergreen konten. Dua GitHub halaman traps dominate: plugin whitelist (GitHub membangun dengan--safe; non-whitelisted plugins perlu sebuah GitHub tindakan bangun) dan sebuah missingbaseurlpada project situs, yang breaks setiap generated canonical URL. GitHub halaman juga pins spesifik plugin versi (3.10.0 core, olderjekyll-seo-tag/jekyll-sitemapreleases), tidak hanya yang plugins jalankan. Collections perluoutput: trueatau mereka’re tidak pernah dirender. Drafts, future-dated posts, danpublished: falsedocuments adalah excluded dari sebuah wajar bangun, dan--incrementaladalah experimental — jangan gunakan ini untuk production deploys. danrobots.txtadalah tidak auto-generated — membuat ini yourself.
Mengapa Jekyll’s static output adalah baik untuk SEO
Jekyll adalah sebuah static situs generator: ini berjalan Anda Markdown dan Liquid templates melalui sebuah bangun langkah dan emits finished HTML, setelah, sebelum apa pun permintaan. itu timing adalah seluruh SEO advantage. Bukti untuk klaim ini Jekyll processes text and templates into static files during a build. Cakupan: Jekyll build architecture. Tingkat keyakinan: tinggi · Diverifikasi: Jekyll documentation
Google’s pipeline adalah crawl → render → indeks, dan rendering JavaScript adalah “a terpisah step” (terjemahan) “sebuah terpisah langkah” itu sits di sebuah queue — apa orang loosely panggil “dua-wave” (terjemahan) “dua-wave” proses. Wave 1 fetches mentah HTML dan indeks text dan tautan immediately; Wave 2 queues halaman untuk Web rendering Service untuk jalankan JavaScript, “beberapa seconds untuk weeks” (terjemahan) “sebuah sedikit seconds untuk weeks” kemudian depending pada anggaran crawling. dengan Jekyll, Wave 1 sudah berisi semua Anda konten — ada Tidak JavaScript diperlukan untuk render body. Wave 1 = Wave 2. Tidak rendering delay, Tidak rendering budget spent. ini adalah yang sama argument itu membuat apa pun static situs generator lowest-risk architecture untuk indexability.
downstream benefits ikuti:
- Lebih cepat TTFB. Pre-dibangun files disajikan dari sebuah CDN (GitHub halaman sits behind Fastly; Netlify/Vercel memiliki mereka own edges) berarti Tidak database kueri dan Tidak server processing — baik untuk LCP dan rest dari Core Web Vitals.
- Tidak diperlukan JS payload untuk konten → better FCP dan LCP daripada sebuah hydrating SPA.
- Proper HTTP kode status di CDN layer, tidak client-side error menangani.
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 muncul 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 di mana URL itself tidak 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 di mana domain itself penting — sebuah business situs, sebuah blog Anda’re membangun sebuah audience sekitar — sebuah custom domain dari mulai menghindari sebuah domain migration kemudian.
jika Anda expect untuk move untuk sebuah custom domain eventually, set ini up early. apa pun
domain migration berarti 301 redirects (jekyll-redirect-from menangani ini) dan sebuah
period di mana inbound tautan dan apa pun accumulated sinyal poin di old URL —
avoidable churn jika Anda pick akhir domain up front alih-alih switching
kemudian. ini adalah sebuah migration-planning argument, tidak sebuah claim itu sebuah github.io
subdomain adalah penalized pada -nya own.
baseurl — #1 canonical bug pada project situs
Project situs langsung 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 jangan perlu baseurl.)
plugin whitelist
GitHub halaman berjalan Jekyll dengan --safe flag dan hanya memungkinkan sebuah fixed set dari
plugins. Bukti untuk klaim ini GitHub Pages builds Jekyll in safe mode and supports a documented set of plugins. Cakupan: GitHub Pages hosted builds. Tingkat keyakinan: tinggi · Diverifikasi: GitHub Pages: Jekyll plugins SEO-relevant whitelisted ones:
jekyll-seo-tag✓jekyll-sitemap✓jekyll-redirect-from✓ (untuk 301s ketika Anda perubahan URLs)jekyll-paginate✓
Tidak whitelisted (dan silently tidak akan jalankan, atau akan error):
jekyll-last-modified-at— needed untuk accurate sitemap<lastmod>dari file timestamps- Custom structured-data plugins
- Apa pun dropped di sebuah
_plugins/folder
ini adalah tidak hanya yang plugins — ini adalah yang versi
GitHub halaman tidak hanya restrict yang plugins jalankan; ini pins tepat versi
dari setiap satu, dan itu bangun environment itself adalah pinned untuk sebuah older Jekyll.
sebagai dari dependency list’s terakhir
perbarui, hosted bangun berjalan Jekyll 3.10.0 dengan jekyll-seo-tag 2.8.0,
jekyll-sitemap 1.4.0, dan jekyll-feed 0.17.0 — sementara jekyllrb.com’s own
docs deskripsikan saat ini upstream rilis, 4.4.1. sebuah perilaku terdokumentasi di sebuah
plugin’s latest README tidak guaranteed untuk exist di versi GitHub halaman
sebenarnya berjalan; 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 mendapatkan versi Anda pin, tidak
GitHub’s.
GitHub tindakan workaround
perbaiki untuk whitelist tidak “add more gems” (terjemahan) “tambahkan lebih gems” — ini adalah untuk berhenti letting GitHub melakukan
bangun. Jalankan Jekyll yourself di CI (actions/jekyll-build-pages, atau bangun
locally dan push _site/ untuk deploy branch dengan peaceiris/actions-gh-pages)
dan whitelist Tidak lebih lama applies. Now apa pun plugin berjalan, 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 tidak tambahkan pada -nya own. Persis apa ini emits bergantung pada yang versi
Anda memiliki installed, Anda _config.yml dan front penting, dan apakah Anda
layout sebenarnya panggilan {% seo %} — GitHub halaman, misalnya, pins sebuah spesifik
versi alih-alih selalu shipping latest rilis (lebih pada itu di bawah).
periksa advanced usage guide
untuk Anda versi’s tepat output, dan konfirmasi apa sebenarnya landed oleh grepping
Anda own dibangun HTML alih-alih assuming ini adalah menyelesaikan.
Install:
# Gemfile
gem 'jekyll-seo-tag'# _config.yml
plugins:
- jekyll-seo-tag<!-- _layouts/default.html, before </head> -->
{% seo %}Apa ini generates secara otomatis:
<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 (berikutnya/prev URLs)
diperlukan _config.yml settings — tanpa ini plugin produces rusak
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_image Per-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 (ketika Anda layout sudah outputs -nya own):
{% seo title=false %} <!-- suppress the <title> -->
{% seo canonical=false %} <!-- suppress the canonical link -->Satu gotcha worth flagging: banyak minimal themes (including minima) ship tanpa
jekyll-seo-tag wired di. menambahkan gem untuk Anda Gemfile melakukan tidak ada apa pun unless
theme’s layout sebenarnya 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 — tanpa ini, sitemap entries memiliki Tidak
domain.
Controlling <lastmod>, di priority order:
last_modified_at:di front penting (best — jelas control)- Post creation date (fallback — sering wrong untuk evergreen konten diperbarui kemudian)
- 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
ketika Anda perbarui konten — itu’s freshness sinyal 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-berat, fragile jika post date perubahan |
pretty | /:categories/:year/:month/:day/:title/ | Trailing slash, Tidak .html |
none | /:categories/:title.html | Tidak 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/Mengapa hindari date-based URLs untuk evergreen posts:
- Mengubah sebuah post’s
date:front penting perubahan -nya URL → inbound tautan break. - Deep hierarchy (
/2019/03/14/post-title/) buries konten untuk Tidak alasan. - (untuk news dan journalism, date URLs adalah fine dan yang diharapkan — ini adalah sebuah per-context panggil, tidak sebuah universal aturan.)
Collections perlu mereka own permalink config:
collections:
case_studies:
output: true
permalink: /case-studies/:name/sebuah warning pada mengubah patterns: setelah 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. Dua requirements membuat atau break mereka SEO:
-
output: trueharus menjadi set. Tanpa ini, collection documents adalah tidak pernah dirender sebagai individual HTML files dan karena itu dapat’t menjadi terindeks. ini adalah sebuah silent pengindeksan killer — konten ada 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. Tanpa ini, Jekyll memperlakukan file sebagai sebuah binary static file: Tidak Liquid processing, Tidak metadata, Tidakjekyll-seo-tagintegration.
Note itu collections tidak disertakan di RSS feeds (hanya posts adalah). untuk besar documentation situs, collections adalah biasanya right structure anyway.
Penerbitan status dan incremental membangun
Jekyll memiliki several independent switches itu control apa sebenarnya ends up di dibangun situs. Mixing them up produces either halaman itu silently tidak pernah mendapatkan dibangun, atau draft/future konten itu ships untuk production oleh accident:
- Drafts (
_drafts/) adalah excluded dari sebuah wajar bangun entirely. mereka hanya muncul ketika Anda jalankanbundle exec jekyll serve --drafts(ataubuild --drafts) locally — moving sebuah post ke_posts/dengan sebuah nyata date adalah apa sebenarnya publishes ini. - Future-dated posts (sebuah
date:kemudian 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 langsung moment Anda bangun, tidak pada mereka yang dimaksud date. published: falsedi front penting excludes sebuah document dari bangun regardless dari -nya date — sebuah terpisah switch dari drafts dan future posts, dan easy untuk leave set setelah testing sebuah halaman Anda dimaksudkan untuk ship.- Incremental regeneration (
--incremental) adalah terdokumentasi 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--incrementaltanpa Jekyll detecting itu underlying posts changed. jangan jalankan ini sebagai bagian dari sebuah production deploy; gunakan penuhbundle exec jekyll builduntuk apa pun Anda’re pushing langsung.
sebelum trusting apa pun dari ini, bangun tanpa flags Anda gunakan locally
(--drafts, --future, --incremental) dan konfirmasi output di _site/
matches apa Anda intend untuk publish — safest default untuk sebuah deploy pipeline
adalah sebuah bersih, penuh, non-incremental bangun.
Custom head partials dengan Liquid
Ketika jekyll-seo-tag tidak cukup, 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 bersih deskripsi)| strip_newlines— menghapus line breaks dari excerpts| truncate: 160— sebuah opsional template-side character cap, tidak sebuah Google limit. Prefer sebuah authored, halaman-spesifik deskripsi dan preview dirender 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 ketika sebuah variable adalah nil
Custom JSON-LD beyond apa 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 tidak auto-generated
Jekyll melakukan tidak buat robots.txt. Anda membuat ini yourself di situs root.
sertakan sebuah empty front-penting block so Liquid memproses file (so {{ site.url }}
resolves):
---
---
User-agent: *
Allow: /
Sitemap: {{ site.url }}/sitemap.xmlTanpa ini, ada Tidak sitemap reference di robots.txt — dan beberapa crawler gunakan
itu sebagai sebuah penemuan mechanism. (robots.txt controls crawling, tidak pengindeksan —
untuk penuh picture see crawling.)
umum Jekyll SEO myths
“Jekyll handles SEO automatically.” (terjemahan) “Jekyll menangani SEO secara otomatis.” static output adalah crawler-friendly, tetapi metadata memerlukan jelas setup. Default themes sering ship dengan Tidak 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, tidak hanya yang plugins) dan,
jika Anda brand bergantung pada URL, deciding pada sebuah custom domain sebelum Anda bangun
sebuah audience pada github.io.
“Static sites don’t need sitemaps.” (terjemahan) “Static situs jangan perlu sitemaps.” Google dapat temukan halaman melalui tautan, tetapi sebuah
sitemap speeds penemuan dan carries <lastmod> sinyal. 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 pilihan.
“I can use any plugin on GitHub Pages.” (terjemahan) “I dapat gunakan apa pun plugin pada GitHub halaman.” Tidak — --safe plus sebuah fixed whitelist.
perbaiki adalah GitHub tindakan, tidak lebih gems.
Di mana ini fits
Jekyll adalah satu dari six generators di static situs generators cluster — GitHub halaman default dan satu sebagian besar developers memenuhi pertama. untuk lebih luas context pada bagaimana Google renders JavaScript dan ketika Anda sebenarnya perlu ini, see JavaScript SEO hub. bangun-freshness discipline itu applies untuk setiap SSG — sebuah static situs adalah hanya sebagai saat ini sebagai -nya terakhir bangun — applies untuk Jekyll too: edits jangan 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 mentah respons pada pertama crawl — Tidak JavaScript rendering langkah, Tidak Wave 2 delay. itu’s core SEO advantage, shared oleh semua static situs generators.
- ** SEO berfungsi adalah configuration, tidak architecture.** Default themes sering memiliki Tidak 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. Keduanya plugins memerlukanurl:di_config.ymlatau output adalah rusak (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 dirender sebagai halaman) dan front penting pada setiap document (atau Tidak metadata processing). - Penerbitan status: drafts (
_drafts/), future-dated posts, danpublished: falsedocuments adalah semua excluded dari sebuah wajar bangun unless Anda explicitly opt di (--drafts,--future).--incrementaladalah experimental dan dapat miss halaman itu bergantung padasite.posts— jangan gunakan ini untuk sebuah production deploy. robots.txtadalah Tidak auto-generated — buat ini manually (dengan empty front penting so Liquid resolves{{ site.url }}diSitemap:line).- Dua 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, yang breaks setiap canonical URL. GitHub halaman juga pins spesifik plugin versi (e.g. Jekyll 3.10.0 core), yang dapat trail latest upstream rilis. - jika sebuah custom domain penting untuk Anda brand, set ini up early alih-alih pada
username.github.io/repo— moving domains kemudian berarti 301s dan sebuah period di mana inbound tautan poin di old URL. GitHub halaman juga pins spesifik plugin versi (tidak hanya yang plugins), yang dapat trail latest upstream rilis. - bangun freshness applies sebagai untuk apa pun SSG: perubahan hanya reach penelusuran setelah sebuah rebuild + redeploy.
Dokumentasi resmi
Utama-sumber 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 — bagaimana 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 ketika Anda perubahan URLs.
GitHub halaman
- tentang GitHub halaman dan Jekyll — bagaimana auto-bangun berfungsi.
- tentang custom domains dan GitHub halaman — custom-domain setup.
- halaman.github.com/versi.json — langsung 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 (dua-wave rendering) itu sebuah static bangun lets Anda skip untuk konten.
- di-Depth Guide untuk Bagaimana Google Search berfungsi — di mana rendering sits di pipeline.
- Core Web Vitals (web.dev) — performa metrics sebuah fast static situs benefits dari structurally.
Quotes dari sumber
ada Tidak pada-record quotes dari Google atau Bing reps secara khusus tentang Jekyll. Google tidak comment pada individual static situs generators. SEO case untuk Jekyll rests pada Google’s umum rendering dan static-HTML guidance, yang applies untuk apa pun static situs.
Google — rendering adalah sebuah terpisah, queued langkah ( hal 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.” — Google Search Central docs. With Jekyll, there’s no JavaScript needed to render the body, so this step costs you nothing. Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus dua puluh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- “Rendering is important because websites often rely on JavaScript to bring content to the page, and without rendering Google might not see that content.” — i.e., if your content is already in the static HTML (as it is with Jekyll), rendering can’t cost you visibility. Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus dua puluh, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Note: I haven’t ditemukan apa pun verbatim statement dari Google atau Bing reps (Mueller, Illyes, Splitt, Canel) naming Jekyll atau GitHub halaman secara khusus. Claims tentang Jekyll SEO seharusnya cite Google’s umum static-situs dan rendering guidance — yang adalah apa quotes di atas adalah — alih-alih sebuah Jekyll-spesifik rep quote.Jekyll SEO checklist
sebuah scannable lulus untuk konfirmasi Anda Jekyll situs adalah siapkan untuk peringkat:
-
url:adalah set di_config.ymluntuk Anda nyata production domain (tidaklocalhost:4000). - untuk sebuah GitHub halaman project situs,
baseurl: /repo-nameadalah set (skip pada pengguna/org root situs). -
jekyll-seo-tagadalah installed dan theme layout sebenarnya 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 jelas
description:(jangan rely pada auto-excerpt). -
last_modified_at:adalah pada posts dan bumped ketika konten perubahan. - Permalinks gunakan
/:title/atau/:categories/:title/untuk evergreen konten (tidak date default). - sebuah
robots.txtada (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), tidak bare
github.iosubdomain. - URL/permalink perubahan adalah paired dengan
jekyll-redirect-from301s. - Images adalah compressed sebelum commit (Jekyll tidak mengoptimalkan them di bangun).
- Satu trailing-slash convention adalah enforced melalui permalink style (Tidak
/page/vs/pageduplicates). - Production membangun jalankan tanpa
--draftsatau--future, dan Tidak halaman Anda intend untuk ship masih memilikipublished: false. - Production deploys gunakan penuh
bundle exec jekyll build, tidak--incremental(experimental, dan dapat misssite.posts-dependent halaman).
Jekyll SEO — cheat sheet
** dua essential plugins**
| Plugin | melakukan | Whitelisted pada GitHub halaman? | perlu |
|---|---|---|---|
jekyll-seo-tag | judul, deskripsi, canonical, OG, Twitter Card, JSON-LD | Ya ✓ | url:, {% seo %} di <head> |
jekyll-sitemap | Auto sitemap.xml | Ya ✓ | url: |
jekyll-redirect-from | 301 redirects | Ya ✓ | redirect_from: di front penting |
jekyll-last-modified-at | Filesystem <lastmod> | Tidak ✗ | GitHub tindakan bangun |
diperlukan _config.yml keys (atau output breaks)
| Key | Mengapa |
|---|---|
url: | Canonical URLs + sitemap entries; tanpa ini → localhost |
baseurl: | Project situs di bawah /repo/ — tanpa ini → rusak 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 | Tidak date burial |
/:title/ | /title/ | sebagian besar evergreen situs |
Fast facts
- Jekyll output adalah static HTML → Tidak Wave 2 rendering delay; konten di pertama fetch.
robots.txtadalah Tidak auto-generated — buat ini (dengan empty front penting).- Collections perlu
output: truedan front penting, atau mereka jangan 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 berjalan 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 kemudian domain migration.
bangun dan periksa Anda Jekyll situs locally
sebelum trusting production, bangun locally dan verify Anda metadata adalah sebenarnya 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: tidak set (atau
JEKYLL_ENV=production tidak applied) — perbaiki _config.yml sebelum deploying.
sebuah starter robots.txt untuk Jekyll
Save ini sebagai robots.txt di Anda situs root. empty front-penting block adalah apa
membuat Liquid proses 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 ketika Anda perubahan permalinks.- GitHub tindakan (
actions/jekyll-build-pages,peaceiris/actions-gh-pages) — bangun Jekyll yourself untuk escape GitHub halaman plugin whitelist dan jalankan 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 Sumber / pemeriksaan URL — konfirmasi Anda judul, deskripsi meta, dan canonical adalah di mentah 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 orang sebenarnya membuat setting up Jekyll untuk penelusuran — prevention, tidak diagnosis.
Leaving url: unset di _config.yml
Keduanya 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 Tidak domain di semua — itu’s
canonical URLs dan sebuah sitemap itu actively mislead crawler alih-alih helping
them. melakukan ini alih-alih: set url: untuk Anda nyata production domain di
_config.yml sebelum pertama deploy, dan grep dibangun _site/ output untuk
localhost untuk konfirmasi ini tidak leak melalui.
Skipping baseurl pada sebuah GitHub halaman project situs
username.github.io/repo-name situs langsung di bawah sebuah /repo-name/ subfolder. jika
baseurl: /repo-name tidak set, setiap canonical URL jekyll-seo-tag generates —
dan Anda tautan internal — adalah missing itu subfolder, pointing di sebuah URL itu
tidak exist. ini adalah single sebagian besar umum canonical-URL bug pada Jekyll project
situs. melakukan ini alih-alih: set baseurl: pada project situs (pengguna/org situs di
domain root jangan perlu ini), dan spot-periksa sebuah dibangun halaman’s canonical terhadap
-nya nyata, langsung URL.
Assuming sebuah collection adalah dapat diindeks tanpa output: true
Collections (docs bagian, case studies, team bios) adalah Jekyll’s custom konten
jenis, tetapi tanpa output: true di _config.yml, documents adalah tidak pernah
dirender sebagai individual HTML files — konten sits di Anda repo dan sekadar
tidak pernah becomes sebuah dapat di-crawl halaman. ada Tidak error, Tidak warning, hanya halaman itu
tidak pernah exist. melakukan ini alih-alih: set output: true pada setiap collection dimaksudkan
untuk menjadi publik, dan setelah sebuah bangun, konfirmasi yang diharapkan HTML files sebenarnya 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 kemudian
— yang orang 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 tidak
plan untuk. melakukan ini alih-alih: gunakan /:title/ atau /:categories/:title/ untuk
evergreen posts; reserve date-based permalinks untuk genuinely date-relevant
konten like news, di mana date belongs di URL.
Trying untuk install sebuah non-whitelisted plugin pada GitHub halaman dan expecting ini untuk jalankan
GitHub membangun Jekyll dengan --safe flag, yang silently skips atau errors pada
apa pun plugin di luar sebuah fixed whitelist — dropping sebuah gem like
jekyll-last-modified-at atau sebuah custom structured-data plugin ke _plugins/
dan pushing ini melakukan tidak membuat ini jalankan pada default GitHub halaman bangun. melakukan ini
alih-alih: periksa plugin terhadap
halaman.github.com/versi.json pertama;
jika ini adalah tidak listed, bangun dengan GitHub tindakan (actions/jekyll-build-pages atau sebuah
local bangun pushed melalui peaceiris/actions-gh-pages) alih-alih fighting
whitelist.
Assuming Jekyll ships sebuah robots.txt
Jekyll melakukan tidak generate robots.txt — ada Tidak plugin toggle, Tidak default
file, tidak ada apa pun. sebuah situs dengan Tidak robots.txt di semua tidak rusak untuk pengindeksan, tetapi
ini juga memiliki Tidak Sitemap: reference untuk crawler itu gunakan robots.txt sebagai sebuah
penemuan mechanism. melakukan ini alih-alih: buat robots.txt yourself di
situs root dengan sebuah empty front-penting block (--- ---) so Liquid memproses ini
dan {{ site.url }} resolves di Sitemap: line.
Uji pemahaman Anda: Jekyll SEO
Five quick pertanyaan pada optimizing Jekyll situs untuk penelusuran. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My writing
- JavaScript SEO: sebuah Definitive Guide — rendering, DOM parity, dan mengapa static/prerendered output (like Jekyll’s) adalah rendah-risk end dari spectrum.
- Beginner’s Guide untuk SEO teknis — di mana rendering architecture dan sitemaps 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.”)
«From around the industry
- Jekyll docs — the official documentation, including permalinks and collections.
- jekyll-seo-tag — the official metadata plugin and its advanced usage guide.
- jekyll-sitemap — the official sitemap plugin.
- About GitHub Pages and Jekyll — GitHub’s own docs on the build process and constraints.
- pages.github.com/versions.json — the authoritative GitHub Pages plugin whitelist and locked versions.
- Google Search Central — JavaScript SEO basics — the rendering phases a static build lets you skip.
- CloudCannon — jekyll-seo-tag showcase — a practitioner walkthrough of the plugin. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus tujuh puluh tujuh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
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.