JekyllブログでURLが衝突!同じ記事が表示される問題の原因と対策
Jekyllブログで異なる記事をクリックしても同じ記事が表示される問題に遭遇。原因はURLスラッグの衝突でした。問題の詳細と再発防止策を解説します。
発生した問題
今日、このブログで奇妙な問題が発生しました。
症状: トップページに表示されている1月26日の記事をクリックすると、なぜか1月20日の記事が表示される。
最初はキャッシュの問題かと思いましたが、強制リロードしても解決しません。調査の結果、URLスラッグの衝突が原因でした。
原因:Jekyllのファイル命名規則
Jekyllの仕組み
Jekyllでは、記事のファイル名が以下の形式になっています:
1
YYYY-MM-DD-slug.md
このファイル名から、JekyllはURLを生成します:
1
/posts/slug/
重要なポイント: 日付部分(YYYY-MM-DD)はURLに含まれません。URLはslug部分のみで決まります。
私が犯したミス
1月20日に作成したファイル:
1
2
2026-01-20-ai-trends-2026.md
→ URL: /posts/ai-trends-2026/
1月26日に作成したファイル:
1
2
2026-01-26-ai-trends-2026.md
→ URL: /posts/ai-trends-2026/ ← 同じ!
両方のファイルが同じURLスラッグ ai-trends-2026 を使っていたため、URLが衝突しました。
なぜこの問題が起きるのか
Jekyllは静的サイトジェネレーターです。ビルド時に同じURLを持つページが複数あると、どちらかが上書きされます。
私の環境では、古い記事(1/20)のページが残り、新しい記事(1/26)のリンクをクリックしても古い記事が表示される状態になっていました。
解決方法
ファイル名を変更して、一意のスラッグにしました:
修正前:
1
2026-01-26-ai-trends-2026.md
修正後:
1
2026-01-26-ai-trends-january-week4.md
これにより、URLが /posts/ai-trends-january-week4/ に変わり、衝突が解消されました。
再発防止策
1. 新規記事作成前に既存ファイルを確認
1
2
# 類似のファイル名がないかチェック
ls _posts/ | grep -i "ai-trends"
2. 一意の識別子を含める
同じテーマで複数の記事を書く場合は、以下のような識別子を追加:
| 識別子タイプ | 例 |
|---|---|
| 週番号 | ai-trends-week4.md |
| 月名 | ai-trends-january.md |
| 日付 | ai-trends-0126.md |
| バージョン | ai-trends-v2.md |
3. 推奨フォーマット
1
YYYY-MM-DD-<トピック>-<識別子>.md
良い例:
2026-01-20-ai-trends-week3.md2026-01-26-ai-trends-week4.md
悪い例:
2026-01-20-ai-trends-2026.md2026-01-26-ai-trends-2026.md← 衝突!
チェックリスト
記事を公開する前に確認すべきこと:
- ファイル名のスラッグ部分が一意か確認
ls _posts/ | grepで類似ファイルを検索- プッシュ後、実際にリンクをクリックして正しい記事が表示されるか確認
- 問題があれば、ブラウザのキャッシュをクリア(Ctrl+Shift+R)して再確認
まとめ
Jekyllではファイル名の日付部分はURLに反映されないため、スラッグ部分を一意にする必要があります。
同じテーマで連続して記事を書く場合は、週番号や日付などの識別子を追加して、URLの衝突を防ぎましょう。
この問題に気づかず数日放置していたら、読者に混乱を与えていたかもしれません。今回の経験を教訓に、ファイル命名規則を見直しました。
同じ問題でお困りの方の参考になれば幸いです。