Hướng dẫn về Jekyll SEO

Cách optimize Jekyll các trang cho tìm kiếm — vì sao của nó static HTML là crawler-friendly theo mặc định, plus đó jekyll-seo-tag và jekyll-sitemap plugin, permalinks, collections, robots.txt, và đó GitHub Các trang plugin whitelist.

Xuất bản lần đầu: 26 thg 6, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

Jekyll outputs flat, static HTML — các crawler nhận hoàn tất nội dung on đó đầu tiên fetch, với không JavaScript kết xuất delay. So đó SEO hoạt động không fighting đó framework; đây là configuration. Install jekyll-seo-tag (tiêu đề, mô tả, canonical, Open Graph, Twitter Card, JSON-LD) và jekyll-sitemap (sitemap.xml), và set url: trong _config.yml hoặc cả hai produce hỏng output. Pick sạch permalinks (/:tiêu đề/, không date-based) cho evergreen nội dung. Tạo robots.txt yourself — Jekyll sẽ không. Watch hai GitHub Các trang traps: đó plugin whitelist (chỉ một fixed set chạy không có một GitHub Actions xây dựng) và baseurl misconfiguration on project các trang, mà breaks mỗi canonical URL.

Tóm tắt — Jekyll emits flat static HTML tại xây dựng time, so nội dung là trong thô phản hồi on đầu tiên crawl — không Web Kết xuất Service, không Wave 2 delay. SEO hoạt động là configuration, không architecture. Install jekyll-seo-tag (tiêu đề, mô tả, canonical, OG, Twitter Card, JSON-LD) và jekyll-sitemap (sitemap.xml); cả hai require url: trong _config.yml hoặc họ produce hỏng output. sử dụng sạch permalinks (/:title/) over date-based ones cho evergreen nội dung. Hai GitHub các trang traps dominate: plugin whitelist (GitHub xây dựng với --safe; non-whitelisted plugin cần GitHub Actions xây dựng) và bị thiếu baseurl on project các trang, mà breaks mỗi generated canonical URL. GitHub các trang cũng pins cụ thể plugin versions (3.10.0 cốt lõi, older jekyll-seo-tag/jekyll-sitemap releases), không chỉ mà plugin chạy. Collections cần output: true hoặc họ’re không bao giờ được kết xuất. Drafts, tương lai-dated posts, và published: false documents là excluded từ thông thường xây dựng, và --incremental là experimental — không sử dụng nó cho production deploys. và robots.txt không phải auto-generated — làm nó yourself.

Vì sao Jekyll static output là good Đối với SEO

Jekyll là static trang web generator: nó chạy của bạn Markdown và Liquid templates qua xây dựng step và emits finished HTML, sau khi, trước khi bất kỳ yêu cầu. đó timing là toàn bộ 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 pipeline là crawl → render → chỉ mục, và kết xuất JavaScript là “a separate step” (bản dịch) «một tách biệt step» đó sits trong một queue — điều gì mọi người loosely call đó “hai-wave” xử lý. Wave 1 fetches thô HTML và indexes text và links immediately; Wave 2 queues đó trang cho đó Web Kết xuất Service để chạy JavaScript, “a few seconds to weeks” (bản dịch) «vài seconds để weeks» sau đó depending on ngân sách crawl. Với Jekyll, Wave 1 đã contains all nội dung của bạn — có không JavaScript bắt buộc để render đó thân phản hồi. Wave 1 = Wave 2. Không kết xuất delay, không kết xuất budget spent. Này là đó giống nhau argument đó làm bất kỳ static site generator đó lowest-risk architecture cho indexability.

downstream benefits follow:

  • Nhanh hơn TTFB. Pre-được xây dựng files phân phối từ CDN (GitHub các trang sits behind Fastly; Netlify/Vercel có của họ own edges) có nghĩa là không database các truy vấn và không máy chủ processing — good cho LCP và rest của Core Web Vitals.
  • Không bắt buộc JS payload cho nội dung → tốt hơn FCP và LCP hơn hydrating SPA.
  • Proper HTTP các mã trạng thái tại CDN layer, không client-side lỗi xử lý.

nhưng none của đó thay đổi fundamentals: static các trang vẫn cần meta tags, sitemaps, canonical các URL, dữ liệu có cấu trúc, và good nội dung. Jekyll output là crawler-friendly; metadata là on bạn.

GitHub các trang và Jekyll SEO

phần lớn phổ biến Jekyll deployment là GitHub các trang — push để branch với các trang enabled và GitHub auto-xây dựng trang web. đó convenience xuất hiện với SEO-relevant constraints.

Project các trang so với. người dùng/org các trang — URL decision

  • username.github.io/repo-name ( project trang web) lives on shared subdomain với thousands của khác unrelated các trang. nó hoạt động fine cho tài liệu, demos, và personal projects nơi URL itself không cần để carry của bạn brand.
  • ** custom domain** (point CNAME tại GitHub các trang) diễn đạt trang web on URL bạn control, với HTTPS auto-provisioned by GitHub. cho trang web nơi domain itself matters — business trang web, blog bạn’re building audience khoảng — custom domain từ bắt đầu tránh domain migration sau đó.

nếu bạn expect để move để custom domain eventually, đặt nó lên sớm. bất kỳ domain migration có nghĩ là 301 các chuyển hướng (jekyll-redirect-from xử lý điều này) và period nơi inbound links và bất kỳ accumulated các tín hiệu point tại old URL — avoidable churn nếu bạn pick cuối domain lên front thay vì switching sau đó. Đây là migration-planning argument, không claim đó github.io subdomain là penalized on của nó own.

baseurl — #1 canonical bug on project các trang

Project các trang trực tiếp dưới subfolder (/repo-name/). nếu bạn không đặt baseurl: /repo-name trong _config.yml, mỗi canonical URL jekyll-seo-tag generates — và của bạn liên kết nội bộ — sẽ là sai, bị thiếu subfolder. Đây là single phần lớn phổ biến canonical-URL bug on Jekyll project các trang. (Người dùng/org các trang phân phối tại domain root không cần baseurl.)

plugin whitelist

GitHub các trang chạy Jekyll với --safe flag và chỉ cho phép fixed đặt của plugin. 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 ✓ (cho 301s Khi bạn thay đổi các URL)
  • jekyll-paginate

không whitelisted (và silently sẽ không chạy, hoặc sẽ lỗi):

  • jekyll-last-modified-at — needed cho chính xác sitemap <lastmod> từ file timestamps
  • Custom structured-dữ liệu plugin
  • Bất cứ điều gì dropped trong _plugins/ folder

nó không chỉ mà plugin — nó mà versions

GitHub các trang không chỉ restrict mà plugin chạy; nó pins chính xác version của mỗi một, và đó xây dựng environment itself là pinned để older Jekyll. As của dependency list’s cuối cùng cập nhật, hosted xây dựng chạy Jekyll 3.10.0 với jekyll-seo-tag 2.8.0, jekyll-sitemap 1.4.0, và jekyll-feed 0.17.0 — trong khi jekyllrb.com own tài liệu mô tả hiện tại upstream phát hành, 4.4.1. behavior được ghi lại trong plugin mới nhất README không phải guaranteed để exist trong version GitHub các trang thực ra chạy; kiểm tra pages.github.com/versions.json cho pinned version trước khi relying on cụ thể flag hoặc output. GitHub Actions xây dựng sidesteps điều này cũng — bạn control Gemfile, so bạn nhận versions bạn pin, không GitHub.

GitHub Actions workaround

Đó cách sửa cho đó whitelist không “add more gems” (bản dịch) «thêm hơn gems» — đây là để dừng letting GitHub làm đó xây dựng. Chạy Jekyll yourself trong CI (actions/jekyll-build-pages, hoặc xây dựng locally và push _site/ để đó deploy branch với peaceiris/actions-gh-pages) và đó whitelist không lâu hơn áp dụng. Hiện tại bất kỳ plugin chạy, và bạn pick đó Jekyll và plugin versions thay vì inheriting GitHub pinned set.

jekyll-seo-tag plugin

Đây là chính thức, maintained plugin đó covers phần lớn của cốt lõi metadata Jekyll không thêm on của nó own. Chính xác Điều gì nó emits phụ thuộc vào mà version bạn có installed, của bạn _config.yml và front quan trọng, và liệu của bạn layout thực ra calls {% seo %} — GitHub các trang, chẳng hạn, pins cụ thể version thay vì luôn shipping mới nhất phát hành (nhiều hơn on đó dưới). kiểm tra Nâng cao usage hướng dẫn cho của bạn version chính xác output, và xác nhận Điều gì thực ra landed by grepping của bạn own được xây dựng HTML thay vì assuming nó hoàn tất.

Install:

# Gemfile
gem 'jekyll-seo-tag'
# _config.yml
plugins:
  - jekyll-seo-tag
<!-- _layouts/default.html, before </head> -->
{% seo %}

Điều gì nó generates tự động:

  • <title> — trang tiêu đề với trang web name appended (Page Title | Site Name)
  • <meta name="description"> — từ description: front quan trọng hoặc trang web mô tả
  • <link rel="canonical"> — được xây dựng từ site.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 dữ liệu có cấu trúc (BlogPosting cho posts, WebSite cho home trang)
  • Pagination meta (tiếp theo/prev các URL)

Bắt buộc _config.yml settings — không có những điều này plugin produces hỏng 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

Theo-trang front quan trọng 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 (Khi của bạn layout đã outputs của nó own):

{% seo title=false %}      <!-- suppress the <title> -->
{% seo canonical=false %}  <!-- suppress the canonical link -->

Một gotcha worth flagging: nhiều minimal themes (including minima) ship không có jekyll-seo-tag wired trong. Thêm gem để của bạn Gemfile làm không có gì trừ khi theme layout thực ra calls {% seo %}.

Sitemaps với jekyll-sitemap

giống nhau install pattern (Gemfile + _config.yml). nó generates sitemaps.org- compliant sitemap.xml tại /sitemap.xml on mỗi xây dựng.

requires url: trong _config.yml — không có nó, sitemap entries có không domain.

Controlling <lastmod>, trong priority order:

  1. last_modified_at: trong front quan trọng (best — rõ ràng control)
  2. Post creation date (fallback — thường sai cho evergreen nội dung đã cập nhật sau đó)
  3. Filesystem modification date (cần non-whitelisted jekyll-last-modified-at)

Best practice: thêm last_modified_at: YYYY-MM-DD để mỗi post, và bump nó Khi bạn cập nhật nội dung — đó freshness tín hiệu recrawl prioritization leans on.

Excluding các trang:

# Per-page front matter
sitemap: false

# Global pattern (in _config.yml)
defaults:
  - scope:
      path: "assets/**/*.pdf"
    values:
      sitemap: false

Permalinks là đặt globally trong _config.yml hoặc overridden theo trang trong front quan trọng.

StylePatternSEO notes
date (default)/:categories/:year/:month/:day/:title.htmlDate-nặng, fragile nếu post date thay đổi
pretty/:categories/:year/:month/:day/:title/Trailing slash, không .html
none/:categories/:title.htmlKhông date burial
Custom/:title/ hoặc /:categories/:title/phần lớn control — được khuyến nghị cho evergreen nội dung

Được khuyến nghị cho phần lớn các trang:

permalink: /:title/
# or
permalink: /:categories/:title/

Vì sao tránh date-based các URL cho evergreen posts:

  • Thay đổi post date: front quan trọng thay đổi của nó URL → inbound links break.
  • Deep hierarchy (/2019/03/14/post-title/) buries nội dung cho không reason.
  • (cho news và journalism, date các URL là fine và dự kiến — Đây là theo-context call, không universal rule.)

Collections cần của họ own permalink config:

collections:
  case_studies:
    output: true
    permalink: /case-studies/:name/

** warning on thay đổi patterns:** sau khi các URL là được lập chỉ mục, switching permalink styles requires 301 các chuyển hướng (sử dụng jekyll-redirect-from). Skip các chuyển hướng và bạn break giá trị liên kết và generate 404s trong Search Console.

Collections và SEO

Collections là Jekyll custom nội dung types beyond posts và các trang — tài liệu sections, portfolio items, team members, case studies, FAQs. Hai requirements làm hoặc break của họ SEO:

  1. output: true phải là đặt. không có nó, collection documents là không bao giờ được kết xuất as riêng lẻ HTML files và làm đó có thể’t là được lập chỉ mục. Đây là silent lập chỉ mục killer — nội dung tồn tại trong của bạn repo nhưng không bao giờ becomes crawlable trang.

    collections:
      docs:
        output: true          # REQUIRED for indexable pages
        permalink: /docs/:name/
  2. mỗi document cần front quan trọng — ngay cả rỗng --- block. không có nó, Jekyll xử lý file as binary static file: không Liquid processing, không metadata, không jekyll-seo-tag integration.

Note đó collections không phải được bao gồm trong RSS feeds (chỉ posts là). cho lớn tài liệu các trang, collections là thường right structure anyway.

Xuất bản trạng thái và incremental xây dựng

Jekyll có several independent switches đó control Điều gì thực ra ends lên trong được xây dựng trang web. Mixing them lên produces either các trang đó silently không bao giờ nhận được xây dựng, hoặc draft/tương lai nội dung đó ships để production by accident:

  • Drafts (_drafts/) là excluded từ thông thường xây dựng hoàn toàn. họ chỉ xuất hiện Khi bạn chạy bundle exec jekyll serve --drafts (hoặc build --drafts) locally — moving post vào _posts/ với thực date là Điều gì thực ra publishes nó.
  • Tương lai-dated posts ( date: sau đó hơn hiện tại time) là excluded by default. future: true trong _config.yml, hoặc --future flag, bao gồm them — handy cho local preview, nhưng leaving nó on trong production config có nghĩ là scheduled posts go trực tiếp moment bạn xây dựng, không on của họ dự kiến date.
  • published: false trong front quan trọng excludes document từ xây dựng regardless của nó date — tách biệt chuyển từ drafts và tương lai posts, và easy để leave đặt sau khi kiểm thử trang bạn meant để ship.
  • Incremental regeneration (--incremental) là được ghi lại by Jekyll as experimental, và nó tracks limited dependency graph — mainly bao gồm và layouts. trang đó iterates site.posts hoặc khác collection dữ liệu ( tag chỉ mục, archive, related-posts logic) có thể go stale dưới --incremental không có Jekyll detecting đó underlying posts changed. không chạy nó as part của production deploy; sử dụng đầy đủ bundle exec jekyll build cho bất cứ điều gì bạn’re pushing trực tiếp.

trước khi trusting bất kỳ của những điều này, xây dựng không có flags bạn sử dụng locally (--drafts, --future, --incremental) và xác nhận output trong _site/ matches Điều gì bạn intend để publish — safest default cho deploy pipeline là sạch, đầy đủ, non-incremental xây dựng.

Custom head partials với Liquid

Khi jekyll-seo-tag không phải đủ, bạn xây dựng của bạn 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>

mấu chốt Liquid filters Đối với SEO:

  • | strip_html — xóa tags từ auto-excerpt (essential cho sạch các mô tả)
  • | strip_newlines — xóa line breaks từ excerpts
  • | truncate: 160 — tùy chọn template-side character cap, không Google limit. Ưu tiên authored, trang-cụ thể mô tả và preview được kết xuất snippet; fit varies by query, device, language, và script.
  • | prepend: site.url — xây dựng absolute các URL cho canonical và OG tags
  • | date_to_xmlschema — ISO 8601 dates cho JSON-LD datePublished/dateModified
  • | default: fallback — fallback Khi variable là nil

Custom JSON-LD beyond Điều gì 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 không phải auto-generated

Jekyll làm không tạo robots.txt. bạn làm nó yourself trong trang web root. bao gồm rỗng front-quan trọng block so Liquid xử lý file (so {{ site.url }} resolves):

---
---
User-agent: *
Allow: /

Sitemap: {{ site.url }}/sitemap.xml

không có điều này, có không sitemap reference trong robots.txt — và some các crawler sử dụng đó as phát hiện mechanism. (robots.txt controls crawling, không lập chỉ mục — cho đầy đủ picture see crawling.)

phổ biến Jekyll SEO myths

“Jekyll handles SEO automatically.” (bản dịch) «Jekyll xử lý SEO tự động.» Đó static output là crawler-friendly, nhưng metadata requires rõ ràng setup. Default themes thường ship với không SEO tags tại all.

“GitHub Pages is fine for SEO — it’s free.” (bản dịch) «GitHub Các trang là fine cho SEO — đây là free.» GitHub Các trang itself là fine — đó static output là crawler-friendly regardless of host. Đó catches là đó plugin whitelist (và đó cụ thể versions điều này pins, không chỉ mà plugin) và, nếu của bạn brand phụ thuộc vào đó URL, deciding on một custom domain trước khi bạn xây dựng an audience on github.io.

“Static sites don’t need sitemaps.” (bản dịch) «Static các trang không cần sitemaps.» Google có thể tìm các trang qua links, nhưng một sitemap speeds phát hiện và carries <lastmod> các tín hiệu. jekyll-sitemap làm điều này trivial.

“Jekyll is dead.” (bản dịch) «Jekyll là dead.» đây là trong mature maintenance chế độ — v4.4.1 shipped trong January 2025. Minimal new features, nhưng maintained và secure, và GitHub Các trang sẽ hỗ trợ điều này indefinitely. Cho đơn giản blogs và tài liệu, đây là một solid, boring lựa chọn.

“I can use any plugin on GitHub Pages.” (bản dịch) «I có thể dùng bất kỳ plugin on GitHub Các trang.» Không — --safe plus một fixed whitelist. Đó cách sửa là GitHub Actions, không hơn gems.

nơi điều này fits

Jekyll là một của six generators trong static trang web generators cluster — GitHub các trang default và một phần lớn nhà phát triển đáp ứng đầu tiên. cho rộng hơn context on Cách Google renders JavaScript và Khi bạn thực ra cần nó, see JavaScript SEO hub. xây dựng-freshness discipline đó áp dụng để mỗi SSG — static trang web là chỉ as hiện tại as của nó cuối cùng xây dựng — áp dụng để Jekyll cũng: edits không reach các công cụ tìm kiếm cho đến khi bạn rebuild và redeploy.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.