JekyllのSEO
Jekyllサイトを検索向けに最適化する方法 — 静的HTMLがデフォルトでクローラーに優しい理由、さらにjekyll-seo-tagとjekyll-sitemapプラグイン、パーマリンク、コレクション、robots.txt、GitHub Pagesのプラグインホワイトリストについて。
言語
このページには証拠シグナルが1件あります
- リンクされたソースデータ依存関係リスト
Jekyllはフラットな静的HTMLを出力するため、クローラーはJavaScriptのレンダリング待ちなしで最初の取得で完全なコンテンツを取得できます。つまり、SEO作業はフレームワークと戦うことではなく、設定の問題です。jekyll-seo-tag(タイトル、説明、正規URL、Open Graph、Twitter Card、JSON-LD)とjekyll-sitemap(sitemap.xml)をインストールし、_config.ymlでurl:を設定しないと、どちらも壊れた出力になります。常緑コンテンツにはクリーンなパーマリンク(日付ベースではなく/:title/)を選びましょう。robots.txtは自分で作成してください — Jekyllは作成しません。GitHub Pagesの2つの落とし穴に注意:プラグインホワイトリスト(GitHub Actionsビルドなしで実行されるのは固定セットのみ)と、プロジェクトサイトでのbaseurlの誤設定で、すべての正規URLが壊れます。
TL;DR — Jekyll はサイト全体を事前にプレーンな HTML ファイルにビルドするため、 Google は初回訪問時にコンテンツを認識します — JavaScript を待つ必要はありません。 これは SEO にとって優れた出発点です。作業はセットアップにあります: 2 つのプラグイン (
jekyll-seo-tagはメタタグ用、jekyll-sitemapはサイトマップ用) をインストールし、 設定でサイト URL を設定し、クリーンな URL を選び、robots.txtを自分で追加します。
Jekyll とは
Jekyll は静的サイトジェネレーターです — コンテンツ (Markdown で記述) とテンプレートを、
誰かが訪問する前に 完成した HTML ファイルに変換するツールです。Ruby で書かれており、
GitHub Pages のエンジンでもあるため、プロジェクトのドキュメントや個人ブログを
github.io アドレスにプッシュしたことがあれば、意識せずに Jekyll を使ったことがあるでしょう。 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
SEO にとって重要な点: Jekyll はプレーンな HTML ファイルを生成するため、検索エンジンは ページを取得した瞬間に完全なコンテンツを取得できます。最初に実行する必要がある JavaScript はありません。 これにより、失敗モードの 1 つが完全に排除されます — ただし、それだけでインデックスやランキングが 保証されるわけではありません。それは依然として、コンテンツ、設定、および以下で説明するメタデータに依存します。
Jekyll が あなたのために 行わないこと
初心者が直面する落とし穴は次のとおりです: Jekyll はクローラーに優しいですが、 そのまま「SEO フレンドリー」というわけではありません。 デフォルトの Jekyll テーマには、 タイトルタグ、メタディスクリプション、構造化データがまったく含まれていないことがよくあります。 これらは自分で追加する必要があります。良いニュースは、2 つの公式プラグインがほぼすべてを 処理してくれることです:
jekyll-seo-tag— タイトルタグ、メタディスクリプション、正規 URL、ソーシャル共有タグを自動的に追加します。jekyll-sitemap—sitemap.xmlを自動的に生成します。 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
正しく設定すべき 5 つのこと
jekyll-seo-tagをインストールし、レイアウトの<head>に{% seo %}を配置します。jekyll-sitemapをインストールして、検索エンジンがページのリストを取得できるようにします。_config.ymlでurl:を実際のドメインに設定します — 両方のプラグインがこれを必要とし、 そうしないと正規 URL とサイトマップがlocalhostを指して壊れます。- カスタムドメインを使用します。ランキングが重要なサイトでは、無料の
username.github.io/repoアドレスではなく。 robots.txtを自分で追加します — Jekyll は自動生成しません。
GitHub Pages の驚き
GitHub Pages でホストする場合、任意の プラグインをインストールすることは できません。
GitHub は Jekyll をロックダウンモードで実行し、許可されるプラグインは限られたリストのみです。
幸いなことに、jekyll-seo-tag と jekyll-sitemap はどちらもそのリストに含まれているため、
必須の機能は動作します。それ以上のことを行うには、別のビルド設定が必要です (詳細は「上級」タブで説明)。
完全版 — プラグインのホワイトリスト、正規 URL を壊す baseurl のバグ、パーマリンク、コレクション、カスタム構造化データ — をご希望ですか? 上級 タブに切り替えてください。
TL;DR — Jekyllはビルド時にフラットな静的HTMLを生成するため、コンテンツは最初のクロールで生のレスポンスに含まれます。Web Rendering ServiceもWave 2の遅延もありません。SEOの作業はアーキテクチャではなく設定です。
jekyll-seo-tag(タイトル、説明、canonical、OG、Twitter Card、JSON-LD)とjekyll-sitemap(sitemap.xml)をインストールします。どちらも_config.ymlのurl:が必須で、ないと壊れた出力になります。常設コンテンツには日付ベースではなくクリーンなパーマリンク(/:title/)を使用します。GitHub Pagesの2つの落とし穴が支配的です:プラグインのホワイトリスト(GitHubは--safeでビルドします。ホワイトリスト外のプラグインはGitHub Actionsでのビルドが必要)と、プロジェクトサイトでの**baseurlの欠落で、生成されるすべてのcanonical URLが壊れます。GitHub Pagesはまた、実行するプラグインだけでなく、特定のプラグインバージョン**(コア3.10.0、古いjekyll-seo-tag/jekyll-sitemapリリース)も固定します。コレクションはoutput: trueがないとレンダリングされません。ドラフト、未来日付の投稿、published: falseのドキュメントは通常のビルドから除外され、--incrementalは実験的です。本番デプロイには使用しないでください。また、robots.txtは自動生成されません。自分で作成してください。
Jekyllの静的出力がSEOに良い理由
Jekyllは静的サイトジェネレーターです。MarkdownとLiquidテンプレートをビルドステップで処理し、リクエストの前に一度だけ完成したHTMLを出力します。このタイミングこそがSEO上の利点のすべてです。 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のパイプラインはクロール→レンダリング→インデックスであり、JavaScriptのレンダリングは”別のステップ”としてキューに入ります。これは一般に「2ウェーブ」プロセスと呼ばれるものです。ウェーブ1は生のHTMLを取得し、テキストとリンクを即座にインデックスします。ウェーブ2はページをWeb Rendering ServiceにキューイングしてJavaScriptを実行します。これはクロール予算に応じて「数秒から数週間」後になります。Jekyllでは、ウェーブ1にすでにすべてのコンテンツが含まれています。本文をレンダリングするためのJavaScriptは不要です。ウェーブ1=ウェーブ2です。レンダリングの遅延も、レンダリング予算の消費もありません。これは、あらゆる静的サイトジェネレーターがインデックス可能性において最もリスクの低いアーキテクチャであるというのと同じ論拠です。
下流の利点は次のとおりです:
- より速いTTFB。 プリビルドされたファイルがCDN(GitHub PagesはFastlyの背後にあり、Netlify/Vercelには独自のエッジがあります)から配信されるため、データベースクエリもサーバー処理もありません。LCPやその他のCore Web Vitalsに良い影響を与えます。
- コンテンツに必要なJSペイロードがない → ハイドレーションするSPAよりもFCPとLCPが向上します。
- CDN層での適切なHTTPステータスコード。クライアント側のエラーハンドリングではありません。
しかし、それらのどれも基本を変えるものではありません。静的サイトでもメタタグ、サイトマップ、canonical URL、構造化データ、優れたコンテンツが必要です。 Jekyllの出力はクローラーに優しいですが、メタデータはあなた次第です。
GitHub PagesとJekyll SEO
最も一般的なJekyllのデプロイ先はGitHub Pagesです。Pagesが有効なブランチにプッシュすると、GitHubがサイトを自動ビルドします。その利便性には、SEOに関連する制約が伴います。
プロジェクトサイトとユーザー/組織サイト — URLの決定
username.github.io/repo-name(プロジェクトサイト)は、無関係な数千の他のサイトと共有されるサブドメインに置かれます。ドキュメント、デモ、URL自体がブランドを伝える必要のない個人プロジェクトには問題なく機能します。- カスタムドメイン(
CNAMEをGitHub Pagesに向ける)は、サイトを自分が管理するURLに置き、GitHubがHTTPSを自動プロビジョニングします。ドメイン自体が重要なサイト(ビジネスサイト、オーディエンスを構築しているブログ)では、最初からカスタムドメインを使うことで、後でのドメイン移転を避けられます。
カスタムドメインへの移行を予定しているなら、早めに設定しておきましょう。
ドメイン移行には301リダイレクト(jekyll-redirect-from が対応)と、インバウンドリンクや蓄積されたシグナルが旧URLを指す期間が伴います。後から切り替えるのではなく、最初から最終ドメインを選べば、避けられる無駄な作業です。これは移行計画の議論であり、github.io サブドメイン自体がペナルティを受けるという主張ではありません。
baseurl — プロジェクトサイトで最も多い正規化バグ
プロジェクトサイトはサブフォルダ(/repo-name/)配下に置かれます。_config.yml で baseurl: /repo-name を設定しないと、jekyll-seo-tag が生成するすべての正規URL(および内部リンク)がサブフォルダを欠いた誤ったものになります。これはJekyllプロジェクトサイトで最も一般的な正規URLバグです。(ドメインルートで提供されるユーザー/組織サイトでは baseurl は不要です。)
プラグインホワイトリスト
GitHub Pages は Jekyll を --safe フラグ付きで実行し、固定されたプラグインセットのみを許可します。 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関連でホワイトリストに登録されているもの:
jekyll-seo-tag✓jekyll-sitemap✓jekyll-redirect-from✓(URL変更時の301リダイレクト用)jekyll-paginate✓
ホワイトリストに登録されていない(そして静かに実行されない、またはエラーになる)もの:
jekyll-last-modified-at— ファイルのタイムスタンプから正確なサイトマップ<lastmod>を生成するために必要- カスタム構造化データプラグイン
_plugins/フォルダに置かれたもの
問題はどのプラグインかだけでなく、どのバージョンか
GitHub Pages は実行するプラグインを制限するだけでなく、各プラグインの正確なバージョンを固定し、そのビルド環境自体も古いJekyllに固定されています。依存関係リスト の最終更新時点で、ホストされたビルドは Jekyll 3.10.0 を jekyll-seo-tag 2.8.0、jekyll-sitemap 1.4.0、jekyll-feed 0.17.0 で実行しています。一方、jekyllrb.com の公式ドキュメントは現在のアップストリームリリースである 4.4.1 を説明しています。プラグインの最新READMEに記載されている動作が、GitHub Pages が実際に実行するバージョンに存在するとは限りません。特定のフラグや出力に依存する前に、pages.github.com/versions.json で固定バージョンを確認してください。GitHub Actions ビルドもこれを回避します。Gemfile を制御できるため、GitHub の固定セットではなく、自分で固定したバージョンを取得できます。
GitHub Actions による回避策
ホワイトリストの修正は「gemを追加する」ことではなく、GitHub にビルドを任せるのをやめることです。CI で Jekyll を自分で実行し(actions/jekyll-build-pages、またはローカルでビルドして _site/ を peaceiris/actions-gh-pages でデプロイブランチにプッシュ)、ホワイトリストは適用されなくなります。これで任意のプラグインが実行でき、GitHub の固定セットを引き継ぐのではなく、Jekyll とプラグインのバージョンを自分で選べます。
jekyll-seo-tag プラグイン
これは公式にメンテナンスされているプラグインで、Jekyll が単独では追加しない主要なメタデータのほとんどをカバーします。正確に何を出力するかは、インストールされているバージョン、_config.yml とフロントマター、そしてレイアウトが実際に {% seo %} を呼び出すかどうかによって異なります。たとえば GitHub Pages は、常に最新リリースを提供するのではなく、特定のバージョンを固定しています(詳細は後述)。お使いのバージョンの正確な出力については高度な使用法ガイド を確認し、実際に何が反映されたかを、完全だと想定せずに、自分でビルドしたHTMLをgrepして確認してください。
インストール:
# Gemfile
gem 'jekyll-seo-tag'# _config.yml
plugins:
- jekyll-seo-tag<!-- _layouts/default.html, before </head> -->
{% seo %}自動生成されるもの:
<title>— サイト名を追加したページタイトル(Page Title | Site Name)<meta name="description">—description:フロントマターまたはサイトの説明から<link rel="canonical">—site.url+page.urlから構築- Open Graph タグ(
og:title、og:description、og:url、og:site_name、og:image) - Twitter Card タグ(
twitter:card、twitter:title、twitter:description、twitter:creator、twitter:image) - JSON-LD 構造化データ(投稿には
BlogPosting、ホームページにはWebSite) - ページネーションメタ(次/前のURL)
必要な _config.yml 設定 — これがないとプラグインは壊れた出力を生成します:
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ページごとのフロントマターの上書き:
---
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
---抑制(レイアウトがすでに独自の出力を行う場合):
{% seo title=false %} <!-- suppress the <title> -->
{% seo canonical=false %} <!-- suppress the canonical link -->注意すべき落とし穴が1つあります。多くのミニマルテーマ(minimaを含む)は、jekyll-seo-tagが組み込まれずに配布されています。Gemfileにgemを追加しても、テーマのレイアウトが実際に{% seo %}を呼び出さない限り、何も起こりません。
jekyll-sitemapによるサイトマップ
同じインストールパターン(Gemfile + _config.yml)です。ビルドのたびに、sitemaps.org準拠のsitemap.xmlを/sitemap.xmlに生成します。
_config.ymlにurl:が必要です — これがないと、サイトマップのエントリにドメインがありません。
<lastmod>の制御(優先順位順):
- フロントマターの
last_modified_at:(最良 — 明示的な制御) - 投稿の作成日(フォールバック — 後で更新されるエバーグリーンコンテンツではしばしば不正確)
- ファイルシステムの変更日(ホワイトリストにない
jekyll-last-modified-atが必要)
ベストプラクティス: すべての投稿にlast_modified_at: YYYY-MM-DDを追加し、コンテンツを更新したときに更新してください。これが再クロールの優先順位が依存する鮮度シグナルです。
ページの除外:
# Per-page front matter
sitemap: false
# Global pattern (in _config.yml)
defaults:
- scope:
path: "assets/**/*.pdf"
values:
sitemap: falseパーマリンク設定
パーマリンクは_config.ymlでグローバルに設定されるか、フロントマターでページごとに上書きされます。
| スタイル | パターン | SEOメモ |
|---|---|---|
date(デフォルト) | /:categories/:year/:month/:day/:title.html | 日付に依存し、投稿日が変わると壊れやすい |
pretty | /:categories/:year/:month/:day/:title/ | 末尾スラッシュ、.htmlなし |
none | /:categories/:title.html | 日付の埋め込みなし |
| カスタム | /:title/ または /:categories/:title/ | 最も制御しやすい — エバーグリーンコンテンツに推奨 |
ほとんどのサイトに推奨:
permalink: /:title/
# or
permalink: /:categories/:title/エバーグリーン投稿で日付ベースのURLを避ける理由:
- 投稿の
date:フロントマターを変更するとURLが変わる → インバウンドリンクが壊れる。 - 深い階層(
/2019/03/14/post-title/)は、理由もなくコンテンツを埋もれさせる。 - (ニュースやジャーナリズムでは、日付URLは問題なく期待される — これは普遍的なルールではなく、文脈に応じた判断です。)
コレクションには独自のパーマリンク設定が必要:
collections:
case_studies:
output: true
permalink: /case-studies/:name/パターン変更の警告: URLがインデックスされたら、パーマリンクスタイルを切り替えるには301リダイレクトが必要です(jekyll-redirect-fromを使用)。リダイレクトをスキップすると、リンクエクイティが損なわれ、Search Consoleで404sが発生します。
コレクションとSEO
コレクションは、投稿やページを超えたJekyllのカスタムコンテンツタイプです — ドキュメントセクション、ポートフォリオ項目、チームメンバー、ケーススタディ、FAQ。SEOを左右する2つの要件があります:
-
output: trueを設定する必要があります。 これがないと、コレクションドキュメントは個別のHTMLファイルとしてレンダリングされず、インデックスできません。これは静かなインデックスキラーです — コンテンツはリポジトリに存在しますが、クロール可能なページにはなりません。collections: docs: output: true # REQUIRED for indexable pages permalink: /docs/:name/ -
各ドキュメントにはフロントマターが必要です — 空の
---ブロックでも構いません。これがないと、Jekyllはファイルをバイナリ静的ファイルとして扱います:Liquid処理なし、メタデータなし、jekyll-seo-tag統合なし。
コレクションはRSSフィードに含まれない(投稿のみ)ことに注意してください。大規模なドキュメントサイトでは、コレクションが通常は適切な構造です。
公開状態とインクリメンタルビルド
Jekyllには、ビルドされたサイトに実際に何が含まれるかを制御するいくつかの独立したスイッチがあります。これらを混同すると、静かにビルドされないページや、ドラフトや未来のコンテンツが誤って本番に公開される可能性があります:
- 下書き(
_drafts/)は通常のビルドから完全に除外されます。これらはbundle exec jekyll serve --drafts(またはbuild --drafts)をローカルで実行した場合にのみ 表示されます。実際に公開するには、投稿を実在する日付とともに_posts/に移動します。 - 未来の日付の投稿(現在時刻より後の
date:)はデフォルトで除外されます。_config.ymlのfuture: trueまたは--futureフラグで含めることができます。 ローカルプレビューには便利ですが、本番設定で有効のままにすると、予定日ではなくビルドした時点で 予約投稿が公開されてしまいます。 - フロントマターの
published: falseは、日付に関係なくドキュメントをビルドから除外します。 これは下書きや未来の投稿とは別のスイッチであり、公開予定のページをテストした後に 設定したままにしがちです。 - インクリメンタル再生成(
--incremental)は、Jekyll によって 実験的 と文書化されており、 限られた依存関係グラフ(主にインクルードとレイアウト)を追跡します。site.postsやその他の コレクションデータ(タグインデックス、アーカイブ、関連投稿ロジック)を反復処理するページは、--incrementalでは、基になる投稿が変更されたことを Jekyll が検出せずに古くなる可能性があります。 本番デプロイの一部として実行しないでください。公開するものには完全なbundle exec jekyll buildを使用してください。
これらを信頼する前に、ローカルで使用するフラグ(--drafts、--future、--incremental)なしでビルドし、
_site/ の出力が公開予定のものと一致することを確認してください。デプロイパイプラインの最も安全な
デフォルトは、クリーンで完全な非インクリメンタルビルドです。
Liquid を使用したカスタム head パーシャル
jekyll-seo-tag では不十分な場合は、独自の _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>SEO に重要な Liquid フィルター:
| strip_html— 自動抜粋からタグを削除します(クリーンな説明に必須)| strip_newlines— 抜粋から改行を削除します| truncate: 160— テンプレート側のオプションの文字数制限であり、Google の制限ではありません。 作成済みのページ固有の説明を優先し、レンダリングされたスニペットをプレビューしてください。 適合性はクエリ、デバイス、言語、スクリプトによって異なります。| prepend: site.url— canonical タグと OG タグ用の絶対 URL を構築します| date_to_xmlschema— JSON-LD のdatePublished/dateModified用の ISO 8601 日付| default: fallback— 変数が nil の場合のフォールバック
jekyll-seo-tag が出力するものを超えたカスタム JSON-LD:
<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 は自動生成されない
Jekyll は robots.txt を作成しません。サイトのルートに自分で作成します。
Liquid がファイルを処理できるように({{ site.url }} が解決されるように)、空のフロントマターブロックを
含めます。
---
---
User-agent: *
Allow: /
Sitemap: {{ site.url }}/sitemap.xmlこれがないと、robots.txt にサイトマップ参照が含まれず、一部のクローラーはそれを
発見メカニズムとして使用します。(robots.txt はインデックスではなくクロールを制御します。
詳細は クロール を参照してください。)
よくある Jekyll SEO の誤解
「Jekyll は SEO を自動的に処理する。」 静的出力はクローラーに適していますが、 メタデータには明示的な設定が必要です。デフォルトのテーマには SEO タグがまったく含まれていないことがよくあります。
「GitHub Pages は SEO に問題ない — 無料だから。」 GitHub Pages 自体は問題ありません。
静的出力はホストに関係なくクローラーに適しています。問題となるのは、プラグインのホワイトリスト
(どのプラグインかだけでなく、固定されている特定のバージョン)と、ブランドが URL に依存する場合は、
github.io でオーディエンスを構築する前にカスタムドメインを決定することです。
「静的サイトにサイトマップは不要。」 Google はリンク経由でページを見つけることができますが、
サイトマップは発見を高速化し、<lastmod> シグナルを伝えます。jekyll-sitemap を使えば簡単です。
“Jekyll is dead.”(訳:「Jekyllは終わった」)という見方もありますが、実際には成熟したメンテナンス段階にあります。v4.4.1は2025年1月にリリースされました。新機能の追加は限定的でも、保守とセキュリティ対応は続いており、GitHub Pagesでも引き続きサポートされています。シンプルなブログやドキュメントには、堅実で枯れた選択肢です。
「GitHub Pages で任意のプラグインを使用できる。」 いいえ — --safe と固定のホワイトリストがあります。
解決策は GitHub Actions であり、gem を追加することではありません。
位置づけ
Jekyll は、静的サイトジェネレーター クラスター内の 6 つのジェネレーターの 1 つです。GitHub Pages のデフォルトであり、ほとんどの開発者が最初に触れるものです。Google が JavaScript をレンダリングする方法と、実際にそれが必要になる場合のより広い文脈については、JavaScript SEO ハブを参照してください。すべての SSG に適用されるビルドの鮮度の規律(静的サイトは最後のビルド時点のものに過ぎない)は Jekyll にも適用されます。編集内容は、再ビルドして再デプロイするまで検索エンジンに届きません。
AIまとめ
Advancedバージョンの簡潔な見解:
- Jekyll は Ruby 製の静的サイトジェネレーターであり、GitHub Pages の背後にあるエンジンです。ビルド時にフラットな HTML を出力するため、コンテンツは最初のクロールで生のレスポンスに含まれます。JavaScript レンダリングのステップも、Wave 2 の遅延もありません。 これが、すべての静的サイトジェネレーターに共通する SEO の核となる利点です。
- SEO の作業は設定であり、アーキテクチャではありません。 デフォルトのテーマには、SEO メタデータがまったくないことがよくあります。
jekyll-seo-tag(公式プラグイン)は、タイトル、説明、正規化、Open Graph、Twitter Card、JSON-LD(BlogPosting/WebSite)を自動生成します。レイアウトの<head>に{% seo %}を追加します。フロントマターでページごとに上書きできます。jekyll-sitemapはsitemap.xmlを自動生成します。両方のプラグインは_config.ymlにurl:が必要です。 そうしないと出力が壊れます(正規化/サイトマップが localhost を指します)。- パーマリンク: エバーグリーンなコンテンツには、日付ベースの URL よりも
/:title/または/:categories/:title/を優先します(日付 URL は投稿日が変わると壊れます)。 - コレクション には
output: trueが必要です(そうしないとページとしてレンダリングされません)。また、各ドキュメントにフロントマターが必要です(そうしないとメタデータ処理が行われません)。 - 公開状態: ドラフト(
_drafts/)、未来の日付の投稿、published: falseのドキュメントは、明示的にオプトインしない限り(--drafts、--future)、通常のビルドから除外されます。--incrementalは実験的であり、site.postsに依存するページを見逃す可能性があります。本番デプロイには使用しないでください。 robots.txtは自動生成されません — 手動で作成してください(Liquid がSitemap:行の{{ site.url }}を解決できるように、空のフロントマターを付けます)。- GitHub Pages の 2 つの落とし穴: プラグインのホワイトリスト(
--safeビルド。SEO プラグインの中ではjekyll-seo-tag、jekyll-sitemap、jekyll-redirect-from、jekyll-paginateのみ。それ以外は GitHub Actions ビルドが必要です)、およびプロジェクトサイトでのbaseurlの欠落。これにより、すべての正規化 URL が壊れます。GitHub Pages は特定のプラグインのバージョンも固定します(例: Jekyll 3.10.0 コア)。これは最新のアップストリームリリースより遅れる可能性があります。 - カスタムドメインがブランドにとって重要なら、早めに設定してください。
username.github.io/repoではなく。後でドメインを移行すると、301sが必要になり、インバウンドリンクが古い URL を指す期間も生じます。GitHub Pages は特定のプラグインのバージョンも固定します(どのプラグインかだけでなく)。これは最新のアップストリームリリースより遅れる可能性があります。 - ビルドの鮮度 は他の SSG と同様に適用されます。変更は、再ビルドと再デプロイ後にのみ検索に反映されます。
公式ドキュメント
一次情報のドキュメント — Jekyll、そのプラグイン、GitHub Pages、および検索エンジンから。
Jekyll
- Jekyll ドキュメント — ドキュメントハブ。
- パーマリンク — 組み込みのスタイルとカスタムパターン。
- フロントマター — ページごとのメタデータを駆動する YAML ブロック。
- コレクション — カスタムコンテンツタイプと
output: trueの要件。 - プラグイン — Jekyll のプラグインシステムの仕組み。
- 変数 — head パーシャルで使用される
site/page変数と Liquid フィルター。
公式プラグイン
- jekyll-seo-tag — メタデータプラグイン、およびその高度な使用法ガイド。
- jekyll-sitemap — 自動の
sitemap.xml。 - jekyll-redirect-from — URLを変更した際の301リダイレクト。
GitHub Pages
- GitHub PagesとJekyllについて — 自動ビルドの仕組み。
- カスタムドメインとGitHub Pagesについて — カスタムドメインの設定。
- pages.github.com/versions.json — ライブのプラグインホワイトリストとロックされた依存関係のバージョン。
- Jekyllリリース と endoflife.date/jekyll — バージョンとメンテナンス状況。
検索エンジン
- JavaScript SEOの基本 — 静的ビルドがコンテンツに対してスキップできるクロール→レンダリング→インデックスのフェーズ(2ウェーブレンダリング)。
- Google検索の仕組みの詳細ガイド — パイプラインにおけるレンダリングの位置。
- Core Web Vitals(web.dev) — 高速な静的サイトが構造的に恩恵を受けるパフォーマンス指標。
ソースからの引用
Jekyllに特化したGoogleやBingの担当者からの公式な引用はありません。Googleは個々の静的サイトジェネレーターについてコメントしません。JekyllのSEOに関する論拠は、Googleの一般的なレンダリングと静的HTMLのガイダンスに基づいており、これはあらゆる静的サイトに適用されます。
Google — レンダリングは分離されたキューイングされたステップです(Jekyllの静的出力がクリティカルパスから取り除くもの)
- “During the crawl, Google renders the page and runs any JavaScript it finds using a recent version of Chrome.” (翻訳) 「クロール中、Googleはページをレンダリングし、見つけたJavaScriptを最新版のChromeで実行します。」 — Google Search Centralのドキュメント。Jekyllでは、本文をレンダリングするためにJavaScriptは不要なので、このステップはコストになりません。 引用にジャンプ
- “Rendering is important because websites often rely on JavaScript to bring content to the page, and without rendering Google might not see that content.” (翻訳) 「レンダリングが重要なのは、ウェブサイトがコンテンツをページに表示するためにJavaScriptに依存することが多く、レンダリングがなければGoogleがそのコンテンツを認識できない可能性があるからです。」 — つまり、コンテンツがすでに静的HTMLにある場合(Jekyllの場合)、レンダリングによって可視性が損なわれることはありません。 引用にジャンプ
Jekyll SEOチェックリスト
Jekyllサイトが検索順位で上位表示されるように設定されていることを確認するための、ざっと確認できるパス:
-
url:が_config.ymlで実際の本番ドメインに設定されている(localhost:4000ではない)。 - GitHub Pages の プロジェクト サイトの場合、
baseurl: /repo-nameが設定されている(ユーザー/組織のルートサイトではスキップ)。 -
jekyll-seo-tagがインストールされ、かつ テーマのレイアウトが<head>内で実際に{% seo %}を呼び出している。 -
jekyll-sitemapがインストールされ、/sitemap.xmlが生成されている。 - サイトマップが Google Search Console と Bing Webmaster Tools に提出されている。
-
title:、description:、author:が_config.ymlに設定されている。 - 各投稿/ページに明示的な
description:がある(自動抜粋に依存しない)。 -
last_modified_at:が投稿にあり、コンテンツが変更されたときに更新されている。 - パーマリンクはエバーグリーンコンテンツに
/:title/または/:categories/:title/を使用している(日付デフォルトではない)。 -
robots.txtが存在し(空のフロントマター付き)、サイトマップを参照している。 - インデックスされるべきすべてのコレクションに
output: trueがある。 - すべてのコレクションドキュメントにフロントマターがある(空の
---でも)。 - カスタムドメイン が設定されている(HTTPS 自動プロビジョニング)、裸の
github.ioサブドメインではない。 - URL/パーマリンクの変更には
jekyll-redirect-fromによる301sを設定している。 - 画像はコミット前に圧縮されている(Jekyll はビルド時に最適化しない)。
- 末尾スラッシュの規則はパーマリンクスタイルで統一されている(
/page/と/pageの重複なし)。 - 本番ビルドは
--draftsや--futureなしで実行され、公開予定のページにpublished: falseが残っていない。 - 本番デプロイは完全な
bundle exec jekyll buildを使用し、--incrementalではない(実験的で、site.postsに依存するページを見逃す可能性がある)。
Jekyll SEO — チートシート
必須の2つのプラグイン
| プラグイン | 機能 | GitHub Pages でホワイトリスト登録? | 必要なもの |
|---|---|---|---|
jekyll-seo-tag | タイトル、説明、カノニカル、OG、Twitter Card、JSON-LD | はい ✓ | url:、<head> 内の {% seo %} |
jekyll-sitemap | 自動 sitemap.xml | はい ✓ | url: |
jekyll-redirect-from | 301 リダイレクト | はい ✓ | フロントマター内の redirect_from: |
jekyll-last-modified-at | ファイルシステム <lastmod> | いいえ ✗ | GitHub Actions ビルド |
必須の _config.yml キー(または出力が壊れる)
| キー | 理由 |
|---|---|
url: | カノニカル URL + サイトマップエントリ; ないと → localhost |
baseurl: | /repo/ 下のプロジェクトサイト — ないと壊れたカノニカル |
title: / description: | jekyll-seo-tag のデフォルト |
author: | JSON-LD の著者情報 |
パーマリンクスタイル
permalink: 値 | 出力 | 使用目的 |
|---|---|---|
date (デフォルト) | /cat/2019/03/14/title.html | エバーグリーンには避ける |
pretty | /cat/2019/03/14/title/ | 日付関連コンテンツ |
none | /cat/title.html | 日付を埋め込まない |
/:title/ | /title/ | ほとんどのエバーグリーンサイト |
クイックファクト
- Jekyll の出力は静的 HTML → Wave 2 レンダリング遅延なし; コンテンツは最初のフェッチで取得。
robots.txtは自動生成されない — 作成する(空のフロントマター付き)。- コレクションには
output: trueと フロントマターが必要。そうしないとインデックスされない。 - GitHub Pages は
--safe+ プラグインホワイトリストでビルド — ホワイトリスト外のプラグインは GitHub Actions ビルドが必要。 - 現在のアップストリーム Jekyll: v4.4.1 (2025年1月); GitHub Pages はロックされた v3.10.0 を独自の固定プラグインバージョンで実行(
jekyll-seo-tag2.8.0、jekyll-sitemap1.4.0、jekyll-feed0.17.0)— 現在のリストは pages.github.com/versions.json を確認。 - カスタムドメインがブランドにとって重要なら、
username.github.io/repoでオーディエンスを構築する前に設定する — 後でドメイン移行を避ける。
ローカルで Jekyll サイトをビルドして確認する
本番を信頼する前に、ローカルでビルドし、メタデータが実際に 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 10<loc> エントリや canonical に localhost:4000 が表示されている場合、url: が設定されていない(または JEKYLL_ENV=production が適用されていない)可能性があります — デプロイ前に _config.yml を修正してください。
Jekyll 用のスターター robots.txt
これをサイトのルートに robots.txt として保存します。空の front-matter ブロックがあることで Liquid がファイルを処理し、{{ site.url }} が解決されます:
---
---
User-agent: *
Allow: /
Sitemap: {{ site.url }}/sitemap.xml Jekyll SEO のためのツール
jekyll-seo-tag— 公式のメタデータプラグイン(タイトル、説明、canonical、OG、Twitter Card、JSON-LD)。Jekyll サイトにとって最大の SEO 効果をもたらす単一の要素です。jekyll-sitemap— 公式の自動sitemap.xml。jekyll-redirect-from— パーマリンクを変更する際に front matter で 301 リダイレクトを生成します。- GitHub Actions(
actions/jekyll-build-pages、peaceiris/actions-gh-pages)— GitHub Pages のプラグインホワイトリストを回避して、任意のプラグインを実行するために Jekyll を自分でビルドします。 - Google Search Console — サイトを検証し、サイトマップを送信し、インデックス/カバレッジを監視します。新しい Jekyll サイトには不可欠です。
- Bing Webmaster Tools — サイトマップを送信します(GSC から資格情報をインポートできます)。
- View Source / URL Inspection — タイトル、メタディスクリプション、canonical が 生の HTML に含まれていることを確認します(Jekyll は静的サイトなので、含まれているはずです)。
- PageSpeed Insights / web.dev — Core Web Vitals を確認します。静的 Jekyll サイトは良いスコアになるはずですが、最適化されていない画像が一般的な足かせです。
避けるべき Jekyll SEO の間違い
検索向けに Jekyll を設定する際に人々が実際に犯す具体的な間違い — 診断ではなく予防。
_config.yml で url: を設定しない
jekyll-seo-tag と jekyll-sitemap はどちらも site.url から絶対 URL を構築します。これを省略すると、canonical タグとサイトマップの <loc> エントリが localhost:4000(開発時のデフォルト)を指すか、ドメインがまったくない状態になります — これはクローラーを助けるどころか積極的に誤誘導する canonical URL とサイトマップになります。代わりにこうしてください: 最初のデプロイ前に _config.yml で url: を実際の本番ドメインに設定し、ビルド済みの _site/ 出力を localhost で grep して漏れがないことを確認してください。
GitHub Pages プロジェクトサイトで baseurl をスキップする
username.github.io/repo-name サイトは /repo-name/ サブフォルダの下にあります。baseurl: /repo-name が設定されていない場合、jekyll-seo-tag が生成するすべての canonical URL — および内部リンク — がそのサブフォルダを欠落し、存在しない URL を指すことになります。これは Jekyll プロジェクトサイトで最も一般的な canonical URL のバグです。代わりにこうしてください: プロジェクトサイトでは baseurl: を設定し(ドメインルートにあるユーザー/組織サイトでは不要)、ビルド済みページの canonical を実際のライブ URL と照合して確認してください。
output: true なしでコレクションがインデックス可能だと想定する
コレクション(ドキュメントセクション、ケーススタディ、チームバイオ)はJekyllのカスタムコンテンツタイプですが、_config.ymlにoutput: trueがないと、ドキュメントは個別のHTMLファイルとしてレンダリングされません。コンテンツはリポジトリ内に置かれたまま、クロール可能なページになることはありません。エラーも警告もなく、ただページが存在しないだけです。代わりにこうしましょう: 公開予定のすべてのコレクションにoutput: trueを設定し、ビルド後に期待したHTMLファイルが実際に_site/に生成されたことを確認してください。
常時更新コンテンツに日付ベースのパーマリンクを使う
Jekyllのデフォルトのパーマリンク形式(/:categories/:year/:month/:day/:title.html)は、公開日をURLに埋め込みます。後で投稿のdate:フロントマターを変更すると(再公開のために日付を更新するだけで行うことがよくあります)、URLもそれに合わせて変わり、すべてのインバウンドリンクが壊れ、計画していなかったリダイレクトの整理を余儀なくされます。代わりにこうしましょう: 常時更新の投稿には/:title/または/:categories/:title/を使用し、日付ベースのパーマリンクはニュースなど、日付がURLに含まれるべき、本当に日付に関連するコンテンツに限定してください。
ホワイトリストにないプラグインをGitHub Pagesにインストールして実行されることを期待する
GitHubは--safeフラグ付きでJekyllをビルドするため、固定のホワイトリスト外のプラグインは静かにスキップされるかエラーになります。jekyll-last-modified-atのようなgemやカスタム構造化データプラグインを_plugins/に置いてプッシュしても、デフォルトのGitHub Pagesビルドでは実行されません。代わりにこうしましょう: まずpages.github.com/versions.json でプラグインを確認してください。リストにない場合は、ホワイトリストと戦う代わりに、GitHub Actions(actions/jekyll-build-pagesまたはpeaceiris/actions-gh-pagesでプッシュするローカルビルド)でビルドしてください。
Jekyllがrobots.txtを生成すると想定する
Jekyllはrobots.txtを生成しません。プラグインのトグルも、デフォルトファイルも、何もありません。robots.txtがないサイトはインデックスに問題があるわけではありませんが、robots.txtを発見メカニズムとして使うクローラー向けのSitemap:参照もありません。代わりにこうしましょう: サイトルートに空のフロントマターブロック(--- ---)を付けてrobots.txtを自分で作成し、Liquidが処理して{{ site.url }}がSitemap:行で解決されるようにしてください。
自分で試す:Jekyll SEO
Jekyllサイトを検索向けに最適化するための5つの簡単な質問。各質問に回答を選び、確認してください。
時間をかける価値のあるリソース
私の記事
- JavaScript SEO: 決定版ガイド — レンダリング、DOMパリティ、そして静的/プリレンダリング出力(Jekyllのような)が低リスクの選択肢である理由。
- 技術SEOの初心者向けガイド — レンダリングアーキテクチャとサイトマップが全体像の中でどこに位置するか。
私の講演
- 検索の仕組み (SlideShare)— クロール、レンダリング、インデックス、ランキングについての私の解説です。いつもの免責事項も適用されます:“This is my understanding of systems… not going to be 100% complete or accurate.”(訳:「これは私が理解しているシステム像であり、100%完全または正確とは限りません」)
業界からの情報
- Jekyllドキュメント — 公式ドキュメント。パーマリンク とコレクション を含む。
- jekyll-seo-tag — 公式メタデータプラグインとその高度な使用ガイド 。
- jekyll-sitemap — 公式サイトマッププラグイン。
- GitHub PagesとJekyllについて — ビルドプロセスと制約に関するGitHub自身のドキュメント。
- pages.github.com/versions.json — 信頼できるGitHub Pagesプラグインのホワイトリストと固定バージョン。
- Google Search Central — JavaScript SEOの基本 — 静的ビルドでスキップできるレンダリングフェーズ。
- CloudCannon — jekyll-seo-tagショーケース — プラグインの実践者向けチュートリアル。
変更履歴
2026年8月20日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
2026年7月27日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。
2026年7月18日に更新。
編集概要と記録された変更の詳細。変更の詳細
-
変更の詳細な注記は現在英語でのみ提供されています。
-
変更の詳細な注記は現在英語でのみ提供されています。
-
変更の詳細な注記は現在英語でのみ提供されています。
完全な比較は利用できません — この改訂の以前のスナップショットがアーカイブされていません。