投稿

GitHub Actions HTML-Prooferエラー「is not an HTTPS link」の原因と解決方法

GitHub ActionsでのビルドでHTML-Prooferが「is not an HTTPS link」エラーを出す原因と解決方法。HTTPリンクがなぜ問題なのか、再発防止策まで詳しく解説。

GitHub Actions HTML-Prooferエラー「is not an HTTPS link」の原因と解決方法

はじめに

GitHub PagesでJekyllブログを運用していると、意外なところでビルドが失敗することがあります。今回、HTML-Prooferによる以下のエラーに遭遇しました:

1
http://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/ is not an HTTPS link

一見すると「HTTPでも動くのになぜ?」と思いますが、これには明確な理由があります。


エラーの全容

発生した状況

  • タイミング: 新しいブログ記事を3件プッシュ後
  • 場所: GitHub Actions のビルドプロセス
  • エラー内容: HTML-ProoferによるHTTPSチェックの失敗

エラーログの詳細

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Running 3 checks (Images, Links, Scripts) in ["_site"] on *.html files ...

Checking 1106 internal links
Checking internal link hashes in 86 files
Ran on 401 files!

For the Links check, the following failures were found:

* At _site/posts/ai-trends-january-week5/index.html:1:
  http://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/ is not an HTTPS link

* At _site/posts/mcp-apps-introduction/index.html:29:
  http://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/ is not an HTTPS link

HTML-Proofer found 3 failures!
Process completed with exit code 1.

影響範囲

  • ビルド失敗: 3回連続でデプロイがストップ
  • 複数ファイルに影響: 2つの記事で同じURLを使用
  • 参照回数: 合計3箇所でHTTPリンクを検出

原因の特定

なぜHTTPリンクがエラーになるのか

HTML-Prooferは、セキュリティのベストプラクティスとしてHTTPSリンクの使用を強制しています。

プロトコルセキュリティHTML-Proofer
HTTPS暗号化通信✅ 許可
HTTP平文通信❌ エラー

HTTPの問題点

  1. 通信内容が傍受可能: 第三者に読み取られるリスク
  2. 改ざんの危険性: 中間者攻撃(MITM)に脆弱
  3. ブラウザ警告: 多くのブラウザがHTTPサイトに警告を表示
  4. SEOへの影響: GoogleはHTTPSサイトを優遇

今回の根本原因

Web検索結果から取得したURLがhttp://で始まっていたことが原因です:

1
2
<!-- 問題のあったURL -->
[MCP Apps](http://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/)

実際にはこのサイトはHTTPSに対応していますが、検索結果のURLがHTTPだったため、そのまま記事に使用してしまいました。


解決策

修正内容

HTTPをHTTPSに変更するだけで解決します:

1
2
3
4
5
<!-- 修正前 -->
[MCP Apps](http://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/)

<!-- 修正後 -->
[MCP Apps](https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/)

実際の修正手順

1
2
3
4
5
6
7
8
9
10
11
# 対象ファイルの修正
# 2026-01-28-ai-trends-january-week5.md
# 2026-01-28-mcp-apps-introduction.md

# 全てのhttp://を一括でhttps://に置換
sed -i 's|http://blog.modelcontextprotocol.io|https://blog.modelcontextprotocol.io|g' ファイル名

# コミット&プッシュ
git add .
git commit -m "fix: Change HTTP links to HTTPS for MCP blog"
git push

修正結果

1
2
completed  success  fix: Change HTTP links to HTTPS for MCP blog
Build and Deploy  main  push  52s

再発防止策

1. URL取得時の確認ルール

外部URLを記事に追加する際は、以下を確認:

チェック項目確認方法
HTTPS対応URLの先頭がhttps://か確認
リダイレクトHTTPでアクセスした時にHTTPSにリダイレクトされるか
有効性リンク先が実際に存在するか

2. 記事作成時のチェックリスト

記事のプッシュ前に確認すべき項目を追加:

1
2
3
### プッシュ前チェックリスト
- [ ] 全ての外部URLが`https://`で始まっているか確認
- [ ] `http://`を含むURLがないかgrepで検索

検索コマンド:

1
2
# 記事内のHTTPリンクを検索
grep -n "http://" _posts/2026-01-28-*.md

3. AGENTS.mdへの追記

今回の教訓を再発防止チェックリストに追加しました:

1
2
3
### 記事作成時
- [ ] 外部URLが全て`https://`で始まっているか確認
- [ ] `http://`リンクは`https://`に変換(対応している場合)

4. なぜHTTPがURLに含まれていたか

Web検索APIの結果には、サイトの実際のプロトコル設定に関わらず、http://で始まるURLが含まれることがあります。

対策: 検索結果から取得したURLは、必ずhttps://に変換するか、実際にアクセスして正しいURLを確認する。


HTML-Prooferの設定について

現在の設定

1
2
3
4
5
6
# .github/workflows/pages-deploy.yml
- name: Test site
  run: |
    bundle exec htmlproofer _site \
      --disable-external \
      --ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"

HTTPチェックを無効にする方法(非推奨)

どうしてもHTTPリンクを許可したい場合は、--allow-hash-href--enforce-httpsオプションを調整できますが、セキュリティ上の理由から推奨しません

正しいアプローチは、HTTPリンクをHTTPSに変換することです。


学んだこと

1. セキュリティファーストの考え方

HTML-ProoferがHTTPリンクをエラーにするのは、ユーザーを保護するためです。

  • HTTPSは現代のWeb標準
  • 外部サービスへのリンクも暗号化通信であるべき
  • CI/CDでのチェックは品質とセキュリティの両方を担保

2. 自動取得データの検証

Web検索やAPIから取得したデータは、そのまま使わずに検証が必要:

1
取得データ → 検証 → 必要に応じて修正 → 使用

3. CI/CDの価値

ローカルでは気づかない問題を、CI/CDパイプラインが検出してくれました:

1
2
ローカル: 記事作成 → プレビュー → 問題なし?
CI/CD: ビルド → HTML-Proofer → HTTPエラー検出!

まとめ

項目内容
エラーis not an HTTPS link
原因Web検索結果のURLがHTTPだった
解決http://https://に変換
再発防止URLのプロトコル確認をチェックリストに追加

今後の対策

  1. 記事作成時: 外部URLは必ずHTTPS確認
  2. プッシュ前: grep "http://" で検索
  3. CI/CD: HTML-Prooferの警告を真摯に受け止める

セキュリティは細部に宿ります。小さなsの違いが、ユーザーの安全を守ります。


参考リンク

この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。