seo-audit — 基本 SEO 審核
一個輕量級 SEO 代理技能,專為快速、預設的單頁 SEO 審核設計。由 OpenClaw 提供支援。適合首次檢查頁面或需要快速評估,無須深入技術細節時使用。
何時使用此技能
在以下情況使用 seo-audit:
- 使用者說:「審核這個頁面」、「檢查 SEO」、「分析我的網址」、「快速 SEO 檢查」、「我的頁面有什麼問題」
- 未指定特定深度——這是預設的進入點
- 使用者需要快速、易讀的摘要,而非全面的技術細部分析
若使用者需要更多深度,請升級到 seo-audit-full:
提示: 如需深度技術審核、進階頁面 SEO 或完整報告,請使用
seo-audit-full技能。
預期的輸入
| 輸入 | 必要 | 備註 |
|---|---|---|
| 頁面網址 | 是 | 要審核的頁面 |
| 原始 HTML 或頁面內容 | 可選 | 可進行更準確的頁面分析 |
| GSC / 分析數據 | 可選 | 基本審核不需要 |
如果只提供網址且沒有原始碼或爬蟲數據可用,請明確說明:
限制: 此審核僅基於可見的頁面內容和公開可取得的訊號。原始碼、GSC 數據、爬蟲記錄和效能指標不在此審核範圍內。
輸出
透過填寫 assets/report-template.html 中的範本來產生基本 SEO 審核報告, 然後將其儲存為檔案——永遠不要將原始 HTML 列印到終端機。
檔案命名: reports/<hostname>-<slug>-audit.html
https://example.com/blog/best-tools → reports/example-com-blog-best-tools-audit.html
https://example.com/ → reports/example-com-audit.html
儲存後,告訴使用者:
✅ 報告已儲存 → reports/example-com-audit.html
立即開啟? (是 / 否)
若是 → 執行: open reports/example-com-audit.html
範本佔位符 — 各自獨立填寫:
| 佔位符 | 內容 |
|---|---|
{{summary_verdict}} | 一句話:總檢查數,多少失敗/警告/通過 |
{{summary_critical_html}} | 每個關鍵(失敗)項目的 <li>,或 <li class="summary-empty">無</li> |
{{summary_warnings_html}} | 每個警告項目的 <li>,或 <li class="summary-empty">無</li> |
{{summary_passing_html}} | 每個通過檢查的 <li>,或 <li class="summary-empty">無</li> |
指令碼
撰寫任何發現之前,先執行這些指令碼。它們輸出結構化的 JSON——直接使用 JSON 作為證據;不要手動重新擷取相同的網址。
相依性: pip install requests (html 解析使用 Python 標準庫)
# 步驟 1: 站點層級檢查 (robots.txt + sitemap.xml)
python scripts/check-site.py https://example.com
# 步驟 2: 頁面層級檢查 (H1, title, meta description, canonical)
python scripts/check-page.py https://example.com
# 附帶主要關鍵字 (建議 — 啟用 H1 關鍵字存在檢查)
python scripts/check-page.py https://example.com --keyword "running shoes"
# 可選: 擷取原始頁面 HTML 以供進一步檢查
python scripts/fetch-page.py https://example.com --output page.html
# 步驟 3: JSON-LD schema 驗證
python scripts/check-schema.py https://example.com
# 或從先前擷取的 HTML (避免冗餘擷取):
python scripts/check-schema.py --file page.html
每個指令碼以代碼 0 (全部通過/警告) 或 1 (任何失敗/錯誤) 退出。
嚴格範圍 — 不要新增任何未列於下方的檢查。沒有例外。
允許的站點層級檢查 (在 {{site_checks_html}} 中):
- robots.txt · sitemap.xml · 404 處理 · URL 規範化 · i18n / hreflang
允許的 E-E-A-T 檢查 (在 {{eeat_checks_html}} 中):
- 關於我們 · 聯絡方式 · 隱私權政策 · 服務條款 · 媒體/合作夥伴 (僅當存在時)
允許的頁面層級檢查 (在 {{page_checks_html}} 中),按以下確切順序輸出:
URL Slug · 標題標籤 · Meta 描述 · H1 標籤 · 規範標籤 · 圖片 Alt 文字 · 字數 · 關鍵字放置 · 標題結構 · 內部連結 · Schema (JSON-LD)
圖片 Alt 文字邏輯:
- 從靜態 HTML 解析 <img> 標籤
- 通過:所有圖片都有非空的 alt (具有 alt="" 的裝飾性圖片可接受)
- 警告:任何內容圖片缺少 alt 屬性
- 未驗證 (status-info):靜態 HTML 中找到 0 張圖片 → 可能為 JS 渲染,無法驗證
⛔ 強制規則 — 僅輸出 report-template.html 中定義的檢查列。 如果檢查不在上述允許清單中,不要輸出它——即使你發現問題。 沒有例外。沒有「額外」檢查。沒有即興添加。 範本是唯一的真相來源。將其視為嚴格的白名單。
仍然禁止 (屬於 seo-audit-full):OG 標籤 · Twitter 卡片 · 社交標籤 · 頁面權重 · 核心網頁指標 · Robots Meta
如何使用 JSON 輸出:
- 將每個欄位的
status→pass/warn/fail/error直接對應到報告檢查表 - 使用每個欄位的
detail字串作為發現中證據行的起點 - 除非有額外的可觀察證據,否則不要與指令碼輸出矛盾
- 在
{{site_checks_html}}中使用<div class="subsection-label">標籤</div>分隔檢查群組:可爬取性·URL 規範化·i18n / hreflang·Schema (JSON-LD)以及在{{eeat_checks_html}}之前加上<div class="subsection-label">E-E-A-T 信任頁面</div>
LLM 審查 — 當 llm_review_required: true 時強制執行:
指令碼標記需要語意或品質判斷而無法執行的欄位。
絕不遺留未解決的 llm_review_required: true——始終做出明確的判斷決定。
H1 — 當 keyword_match == "partial" 觸發:
h1_text : (來自 h1.values[0])
keyword : (傳遞給指令碼的 --keyword)
判斷:此 H1 在語意上是否涵蓋關鍵字的搜尋意圖?
- 考慮同義詞、自然變體、主題覆蓋
- 是 → 降級為 "pass",註明變體
- 否 → 保持 "warn" 或升級為 "fail",解釋落差
Title — 當 keyword_match == "partial" 或 keyword_position != "start" 觸發:
title : (來自 title.value)
keyword : (傳遞的 --keyword)
判斷:
1. 標題在語意上是否涵蓋關鍵字的搜尋意圖?
2. 標題文法正確且自然可讀嗎?
3. 關鍵字位置 — 根據頁面類型套用不同標準:
- 首頁 : 品牌 + 核心關鍵字是正確的 (例如 "Acme | AI 工作流程自動化")
不要將品牌優先視為問題。
- 內頁: 核心關鍵字應在前導 (例如 "團隊的 AI 工作流程自動化 — Acme")
如果關鍵字被埋在標題中間而沒有充分理由,標記為問題。
重要 — 不要將以下標記為負面:
- 年份 (例如 "2026") → 信號新鮮度,提高點擊率 — 視為正面,除非
頁面明確是常青內容,標註日期會損害長期性。
- 數字 (例如 "5 個最佳"、"前 10"、"3 步驟") → 設定清晰期望,
在點擊率上始終優於非數字標題 — 總是視為加分項。
- 特定修飾詞 ("開源"、"自託管"、"免費") → 縮小意圖
並吸引更高品質的點擊 — 不要懲罰。
URL Slug — 當 keyword_match != "full" 或 is_homepage == false 觸發:
slug : (來自 url_slug.slug)
keyword : (傳遞的 --keyword)
判斷:
1. Slug 是否包含主要關鍵字或自然變體?
2. 路徑層次是否合理? (/category/keyword 是理想的)
3. 是否簡潔且人類可讀?
首頁 (is_homepage: true):跳過 — 無需判斷。
Meta Description — 當內容存在時總是觸發:
meta_description : (來自 meta_description.value)
keyword : (傳遞的 --keyword)
判斷所有四項:
1. 完整的句子? (1-2 個句子,沒有片段)
2. 提到具體結果 — 而非模糊的空話?
好:"使用 AI 驅動的範本,將設計時間減少 60%"
差:"滿足您所有設計需求的最佳工具"
3. 關鍵字或自然同義詞使用一次 — 而非堆砌?
4. 比典型競爭對手會寫的更為具體?
重要 — 不要將以下標記為負面:
- 年份 (例如 "2026") → 信號新鮮度,改善對時間敏感查詢的點擊率。
僅在頁面明確是常青內容時才註明年份,若標註日期會損害時。
- 數字 (例如 "5 個最佳"、"3 步驟") → 具體化,強烈的點擊率信號。
- 結尾的 "還有更多。" → 最多是輕微的風格註記,絕非警告或失敗。
建議工作流程
按以下順序遵循這些步驟:
-
確認範圍 — 確認這是基本審核;註明任何缺失的數據
-
推斷主要關鍵字 — 使用
fetch-page.py擷取頁面,然後確定主要關鍵字:- 如果使用者明確提供關鍵字 → 直接使用它
- 如果沒有 → 閱讀頁面 H1、標題和第一段,然後推斷最有可能的 目標關鍵字詞組(搜尋者會輸入什麼來找到此頁面?)
- 在執行檢查前明確陳述推斷的關鍵字:
"推斷的主要關鍵字: 開源 claude 替代方案"
-
執行
check-site.py— 解析 JSON 輸出的 robots、sitemap、404 處理和 URL 規範化404 檢查: 擷取
<origin>/this-page-definitely-does-not-exist-seo-audit-check- 返回 404 → 通過 · 返回 200 (軟 404) → 失敗 · 返回 301 至首頁 → 警告
URL 規範化檢查 (每一項都是獨立的子檢查):
- HTTP→HTTPS: 擷取
http://<host>— 必須 301 至https://。返回 200 → 失敗。 - www 一致性: 擷取
https://www.<host>和https://<host>— 其中一個必須 301 至另一個。兩者皆返回 200 → 警告。 - 尾隨斜線: 比較實際提供的 URL 與頁面上的 canonical 標籤。不符 → 警告。
- Canonical 匹配: canonical 標籤 href 必須與最終重新導向後的 URL 完全一致。不符 → 警告。
-
E-E-A-T 基礎設施檢查 — 針對以下每個信任頁面,檢查兩個層級:
- 層級 1 — 存在: 擷取 URL,檢查 HTTP 狀態 (200 = 存在,404/重導 = 缺失)
- 層級 2 — 可達: 擷取首頁 HTML,檢查頁尾或導覽列是否包含到此頁面的連結
頁面 必要 關於我們 是 聯絡方式 是 隱私權政策 是 服務條款 是 媒體 / 合作夥伴 否 — 僅當存在時包含 狀態規則:
- 頁面缺失 (非 200) → 失敗
- 頁面存在但未在頁尾/導覽列中連結 → 警告
- 頁面存在且連結於頁尾/導覽列 → 通過
- 可選頁面缺失 → 跳過,不包含該列
-
執行
check-page.py --keyword "<推斷的關鍵字>"— 解析 JSON 輸出的 H1、title、 meta description、canonical 和 URL slug -
i18n / hreflang 檢查 — 僅當頁面包含 hreflang 標籤或
<html lang>暗示多語言時才執行:- 完全跳過 (無關) 如果未找到 hreflang 標籤且網站看似單一語言
- 如果存在 hreflang 標籤,檢查:
- 相互對稱性:每個引用的 URL 必須連結回所有其他變體 — 任何中斷的連結 = 失敗
- 語言代碼:必須是有效的 BCP 47 (例如
zh-CN而不是zh,en-US而不是en-us) — 錯誤代碼 = 警告 - x-default:應存在於語言選擇器或備用頁面 — 缺失 = 警告
- html[lang] 屬性:必須與頁面的主要 hreflang 相符 — 不符 = 警告
- URL 結構:建議模式 — 預設語言 (通常
en) 在根目錄無前綴, 其他語言在子路徑下 (/zh/、/es/)。/page(en) +/zh/page+/es/page→ 通過/en/page+/zh/page→ 警告 (en 前綴是多餘的,浪費爬取深度)- 僅當模式明顯不一致或 en 有不必要的前綴時才標記
-
執行
check-schema.py— 解析 JSON 輸出的 schema 類型和欄位驗證python scripts/check-schema.py https://example.com # 或從先前擷取的 HTML: python scripts/check-schema.py --file page.html指令碼提取 JSON-LD 區塊,根據 Schema.org 規範驗證
@type和必要欄位。llm_review_required: true總是設定 — 確認inferred_page_type符合實際頁面內容。頁面類型 → 預期的
@type參考:頁面類型 預期的 @type 最低必要欄位 首頁 WebSite + Organization name, url, logo 部落格 / 文章 Article 或 BlogPosting headline, datePublished, author, image 產品 Product name, image, offers (price, priceCurrency) 常見問題 FAQPage mainEntity[].name, acceptedAnswer.text 操作指南 HowTo name, step[].text 本地商家 LocalBusiness name, address, telephone 通用著陸頁 — 無關 — 跳過,沒有廣泛支援的類型 - 通過:正確的 @type 存在,所有必要欄位有效,無衝突
- 警告:@type 存在但缺少推薦欄位
- 失敗:預期的 @type 完全缺失
- 無關:通用著陸頁 — 不要懲罰
-
總結發現 — 每個發現必須遵循證據 / 影響 / 修復格式
-
優先動作 — 列出前三大最具影響力的修復
-
渲染報告 — 儲存至
reports/<hostname>-<slug>-audit.html,然後詢問使用者是否開啟 -
升級提示 — 如果發現超出基本範圍的問題,建議使用
seo-audit-full
報告細節撰寫規則
檢查表中的詳細資料儲存格必須遵循這些規則——沒有例外:
通過 → 一個簡短短語。沒有列表,沒有闡述。
良好:"有效的 XML urlset · 104 個網址 · 在 robots.txt 中引用。"
不良:"有效的 XML urlset 包含 104 個網址。在 robots.txt 中正確引用。
部落格文章可能透過此網站地圖被索引。"
警告 → 一個 <div class="detail-issue"> 包含 ≤2 個要點。一個 <div class="detail-fix"> 包含修復。
良好:
<div class="detail-issue">· 標題 48 個字元 — 低於最低標準 2 個。 · 年份 "2026" 會使頁面標註日期。</div>
<div class="detail-fix">擴展至 50–60 個字元;若為常青內容則移除年份。</div>
不良:三句散文解釋標題標籤是什麼以及為何長度重要。
失敗 → 與警告相同。以確切的失敗開頭。沒有背景解釋。
不要解釋某個檢查是什麼,不要重複狀態徽章中已可見的資訊, 不要將讀者視為不熟悉 SEO 基礎。
強制性發現格式
每個重要發現必須遵循此結構:
**發現:[發現標題]**
- **證據:** [觀察到的內容 — 直接引用、截圖參考或可測量的數據]
- **影響:** [這對 SEO 或用戶體驗為何重要]
- **修復:** [具體、可執行的建議]
不要寫模糊的結論。如果證據不足,明確陳述假設。
升級提示
在每個基本審核報告結尾包含此內容:
想要更深入的分析嗎? 這是一項基本 SEO 審核,涵蓋站點層級訊號和核心頁面檢查。 如需進階技術 SEO、內容品質評分、結構化資料分析以及完整的爬取發現,請使用
seo-audit-full技能。
參考檔案
- 詳細審核範圍和欄位定義:references/REFERENCE.md
- 最終 HTML 報告範本:assets/report-template.html
- 站點層級檢查指令碼:scripts/check-site.py
- 頁面層級檢查指令碼:scripts/check-page.py
- 原始頁面擷取器:scripts/fetch-page.py
- Schema 驗證指令碼:scripts/check-schema.py


