Hermes Agentで定期PageSpeed SEO監査スキルを作る方法
Hermes Agentに速度改善を「自動で任せる」のではなく、公開ページの測定を安全に繰り返させる方法を解説します。このスキルはGoogle PageSpeed Insights APIでモバイルとデスクトップを測定し、元のJSON、日付付きレポート、監査範囲を残します。まず手動のベースラインを検証し、その後にだけ定期実行を承認します。
重要なのは境界です。PageSpeedのスコアは、あるURLをある時点で測ったLighthouseのラボ結果です。Chrome UX Report(CrUX)はGoogleが返した場合に限り実ユーザーのフィールドデータになります。どちらもCMS、リポジトリ、デプロイをエージェントが変更してよい根拠にはなりません。
この記事をHermesに渡してスキルをインストールする
記事公開後は、次の依頼をHermesに送ってください。作成と構文確認だけを行い、サイトや監査対象には触れないよう明示します。
この記事を読み、説明されているHermesのPageSpeedスキルをインストールしてください。
最初にローカルのHermes設定とプロジェクト指示を確認し、使用する保存先を説明してください。作成してよいのは次の2ファイルだけです。
~/.hermes/skills/pagespeed-seo-baseline/SKILL.md
~/.hermes/skills/pagespeed-seo-baseline/scripts/pagespeed_baseline.py
記事内の完全なコードブロックを使い、別のワークフローを考案しないでください。Pythonの構文を検証し、2つのパスを報告してください。PAGESPEED_API_KEYをローカルで設定する方法は示しても、値をこのチャットに貼り付けるよう求めたり表示したりしないでください。
PageSpeedの実行、スケジュール作成、サイトのリポジトリ書き込み、CMSまたはホスティング認証情報の使用、他スキルの編集、ライブサイトの変更は行わないでください。インストールと検証後に停止してください。
Hermesが公開ページを読めない場合は、このページのSKILL.mdとPythonランナーを同じ会話へ貼り付けます。ローカルのHermesスキルは通常~/.hermes/skills/に置かれ、スラッシュコマンドで呼び出します。ここはWebアプリの機能ではなく、独立した監視ツールです。
完成条件: ベースラインを先に、定期実行を後に
| 項目 | このワークフローで得られるもの |
|---|---|
| 対象 | ローカルまたは隔離環境でHermesを使うSEO担当者、開発者、技術マーケター |
| 完成物 |
|
| 入力 | 1つの公開URL、選定URLリスト、上限を決めたサイトマップサンプル |
| 前提 | Hermes Agent、Python 3.9以上、Google CloudのPageSpeed Insights APIキー、書き込み可能なレポートディレクトリ |
| 所要時間 | 手動ベースライン約25分。レビュー後の定期実行追加は約10分 |
| 完了の定義 | URLと戦略がすべて記録され、raw結果とフィールドデータの範囲が残り、サイト変更がない |
リリース確認には選定したURLリストを使います。サイトマップはテンプレート間の傾向を見るためのサンプルであり、全URLを検査した証拠ではありません。ランナーは先頭パスごとに1URLを選び、残りをサイトマップ順で補います。孤立ページ、canonical、インデックス可能性は検証しません。
APIキーは安全な実行環境にだけ置く
Google Cloud ConsoleでPageSpeed Insights APIを有効にし、制限付きキーを作成します。値はローカルのシークレット機構、またはHermesを起動する環境に保存し、スキル、レポート、メッセージ、Gitには入れません。
export PAGESPEED_API_KEY="replace-with-your-key"
Docker、リモート端末、別のサンドボックスでHermesを動かす場合、その環境にキーを渡す理由を明確にしてください。初回監査には、専用の制限付きキーを使うローカル実行が最も低リスクです。APIの現在のクォータをGoogle Cloudで確認してから、定期実行の頻度を決めます。
Hermesスキルの安全ルール
次の構成で作成します。
~/.hermes/skills/pagespeed-seo-baseline/
SKILL.md
scripts/
pagespeed_baseline.py
SKILL.mdには少なくとも次の運用契約を入れてください。これがスケジューラ用途のHermesを、サイト編集権限を持つ最適化ボットに変えないための中核です。
---
name: pagespeed-seo-baseline
description: Create a read-only PageSpeed Insights baseline for one public URL, a supplied URL list, or a controlled XML sitemap sample. Save raw JSON and a dated report that distinguishes Lighthouse lab data from CrUX field data. Never edit a site, repository, CMS, hosting configuration, or deployment.
required_environment_variables:
- PAGESPEED_API_KEY
---
# PageSpeed SEO Baseline
## Boundaries
- Read `PAGESPEED_API_KEY` from the runtime environment only. Never print, message, save, or commit it.
- Do not use browser logins, SSH, CMS, hosting, Git write, deployment, or website-editing tools.
- Run both `mobile` and `desktop`; save each successful response under `raw/` before summarizing.
- Label Lighthouse as lab data. Treat `loadingExperience` as page-level CrUX and `originLoadingExperience` as origin-level CrUX only when returned.
- For `--sitemap`, state the sampling rule and excluded URLs. Prefer `--urls-file` for important templates.
- Never create or change a schedule before a human has reviewed one successful manual report and named its scope, cadence, report path, and delivery destination.
ランナーは標準ライブラリだけで実装し、--url、1行1URLの--urls-file、XMLサイトマップまたはサイトマップインデックスを受け付けます。performance、accessibility、best-practices、seoをモバイルとデスクトップで取得してください。429と5xxには短い限定リトライを使い、1件が失敗しても完了済みの結果は保持します。
cd ~/.hermes/skills/pagespeed-seo-baseline
python3 scripts/pagespeed_baseline.py \
--url "https://www.example.com/" \
--out "$HOME/hermes-pagespeed-reports/homepage-baseline"
期待される出力はreport.mdです。出力先にはsummary.json、raw/001-mobile.json、raw/001-desktop.jsonも作られます。レポートに要求URL、最終URL、両方の戦略、タイムスタンプがあり、rawファイルが空でないJSONであることを確認します。403はAPI有効化またはキー制限、サイトマップ失敗は小さな--urls-fileで切り分けます。意図した範囲を黙って置き換えてはいけません。
PageSpeedが測ったものを正しく読む
モバイルを先に読み、デスクトップと比較します。Performanceは複合Lighthouseスコアであり、診断名ではありません。LCP、INP、CLS、TBTは別の手がかりで、悪いラボ結果だけでは訪問者全員が同じ体験をしているとは言えません。
| レポートの情報 | 意味 | 言ってはいけないこと |
|---|---|---|
| Lighthouseスコア、LCP、INP、CLS、TBT | 指定URL・戦略でのラボ測定 | 「全ユーザーがこう感じている」 |
|
| ページまたはGoogle定義URLパターンのCrUX | 「オリジン全体の結果だ」 |
|
| オリジンのCrUX | 「全テンプレートが同じ状態だ」 |
| CrUXなし | 今回の応答では対象フィールドデータが返らなかった | 「実ユーザーがいない」 |
LighthouseとCrUXは異なる問いに答えます。修正を決める前に、データの範囲を明記してください。
信頼できるレポートの後にだけ定期実行を追加する
未検証のエージェント作業を定期実行にしても、悪い根拠が頻繁に届くだけです。最初の実行をサイト所有者と確認し、正確なURL範囲またはサイトマップ上限、頻度、保存期間、配信先の4点を決めます。
承認後の依頼では、既存の手動スコープとコマンドをそのまま指定し、$HOME/hermes-pagespeed-reports/weekly/YYYY-MM-DD/の下へ保存、90日保持、承認済み所有者チャネルにはreport.mdとsummary.jsonだけを配信するよう求めます。スケジュール、コマンド、環境前提、失敗通知を表示させ、明示承認前には有効化させません。
修正は別のレビュー済みブリーフへ渡す
レポートを使って、修正命令ではなく修正ブリーフを作らせます。繰り返し発生する機会ごとに、対象URL、ラボまたはフィールドの根拠、想定メカニズム、担当開発者、期待効果、リスク、テスト方法、ロールバック条件、未確認事項を記載します。コード、コンテンツ、設定、デプロイは編集させません。
検証チェックリスト
- [ ] スキルは
~/.hermes/skills/pagespeed-seo-baseline/にあり、名前とディレクトリが一致している。 - [ ]
PAGESPEED_API_KEYは宣言されているが、ファイル、チャット、レポートにはない。 - [ ] 手動レポートにはモバイル/デスクトップ、raw JSON、最終URL、明確な範囲がある。
- [ ] CrUXは返された場合だけページ単位またはオリジン単位として表示されている。
- [ ] 定期実行は人がレビューしてから有効化し、承認済みレポート先だけに書き込む。
- [ ] 監査スキルにCMS、リポジトリ、ホスティング、デプロイ権限がない。
よくある質問
Hermesでサイトマップの全ページを確認できますか?
より多くのURLを処理することはできますが、常に有用でも安全でもありません。PageSpeedリクエストはクォータを使い、サイトマップにはテンプレート、アーカイブ、優先度の低いページが混ざります。まずテンプレートごとに1ページ、または層化した小さなサンプルから始め、必要が明確になってから拡大します。
Author: Julian Mercer, AuspiaのTechnical SEO Practitioner。Julianは、SEOの発見からレビュー済みのWebサイト変更まで、明確な証拠の流れを残す技術ワークフローを執筆しています。