如何使用 Claude Code 自動產出 SEO 週報

Claude Code

AI 文章延伸

AI 幫你讀這篇文章

選擇平台後可直接帶入閱讀脈絡,快速整理重點、補齊盲點,並延伸到同站相關文章。

經營技術部落格一段時間後,我們發現自己很少主動去看 Google Search Console。不是不想看,是每次都要登入後台、點來點去、手動比較數據,久了就懶了。但 SEO 數據其實藏著很多寶貴資訊——哪些關鍵字有人在搜、哪些頁面帶來最多流量、哪些主題值得寫更多文章。

所以我們決定:寫一個腳本,每週一早上自動從 GSC API 撈數據,產出一份 Markdown 週報,打開就能看。

我們想要的報告長什麼樣

動手之前先想清楚報告該包含什麼。我們定了四個區塊:

  1. 關鍵字排名 Top 20 — 哪些搜尋字詞帶來最多點擊
  2. 頁面導流排名 Top 15 — 哪些頁面是流量主力
  3. 內容機會分析 — 高曝光但低點擊的關鍵字,代表搜尋需求存在但我們的內容還沒接住
  4. 本週總覽 — 總點擊、總曝光、平均 CTR 等摘要數字

第三點是我認為最有價值的部分。一個關鍵字如果曝光 300 次但只被點了 1 次,要嘛排名太後面,要嘛標題不吸引人,要嘛根本沒有對應的文章。不管是哪種情況,都是可以改善的機會。

前置準備:用 gcloud 建立 API 存取

要從程式存取 GSC,需要一個 Google Cloud 的 Service Account。整個設定用 gcloud CLI 就能完成,不用進 Google Cloud Console 的網頁介面。

建立 GCP 專案

gcloud projects create codotx-gsc --name="Codotx GSC"

建議為這個用途開一個獨立專案,跟其他 GCP 資源分開管理。

啟用 Search Console API

gcloud config set project codotx-gsc
gcloud services enable searchconsole.googleapis.com

建立 Service Account

gcloud iam service-accounts create gsc-reader --display-name="GSC Reader"

下載金鑰

gcloud iam service-accounts keys create gsc-credentials.json \
  [email protected] \
  --project=codotx-gsc

這會在當前目錄產生一個 gsc-credentials.json,Python 腳本會用這個檔案來驗證身份。記得把它加進 .gitignore,千萬不要 commit 進版本庫。

# .gitignore
gsc-credentials.json

四個指令,API 端的設定就完成了。

在 GSC 後台授權 Service Account

API 端設好了,但 GSC 那邊還不認識這個 Service Account。需要到 Google Search Console 後台手動加一次。

進入 設定 → 使用者和權限,你會看到目前的使用者清單:

GSC 設定頁面

點「新增使用者」,輸入 Service Account 的 email:

[email protected]

權限選「限制」就夠了,我們只需要讀取數據。

Service Account 已加入 GSC

加完之後,使用者清單會多出 gsc-reader 這筆,狀態顯示為「限制」權限。到這邊,API 跟 GSC 的連線就建立好了。

撰寫查詢腳本

安裝 Python 套件:

pip3 install google-api-python-client google-auth

腳本的核心是透過 searchanalytics().query() 來查詢數據。這個 API 支援多種 dimension(query、page、date、country 等),可以根據不同維度來拆分數據。

我們對同一個日期範圍發了三次查詢:

# 1. 關鍵字排名(依點擊數排序)
keywords = query_gsc(service, start_date, end_date, ['query'], 50, 'clicks')

# 2. 頁面排名(依點擊數排序)
pages = query_gsc(service, start_date, end_date, ['page'], 30, 'clicks')

# 3. 內容機會(依曝光數排序,後續再篩選)
all_keywords = query_gsc(service, start_date, end_date, ['query'], 100, 'impressions')

第三個查詢拿到所有高曝光的關鍵字後,用條件篩選出「內容機會」。

一開始我們用固定門檻(曝光 >= 50 算高優先、>= 20 算中優先),但馬上發現問題:對一個新站來說,一週 50 次曝光的關鍵字可能根本沒幾個;等流量長起來後,50 次又變得不值一提。固定數字沒辦法適應不同規模的網站。

最後我們採用混合制——先設最低門檻過濾噪音,通過門檻的再用百分位數分級:

MIN_IMPRESSIONS = 20  # 週曝光低於 20 的直接忽略.

# 篩選:通過最低門檻,且 CTR 低於全站平均或排名低於全站平均.
qualified = [r for r in all_keywords if r['impressions'] >= MIN_IMPRESSIONS]
avg_ctr = sum(r['clicks'] for r in qualified) / sum(r['impressions'] for r in qualified)
avg_pos = sum(r['position'] for r in qualified) / len(qualified)

opportunities = [
    r for r in qualified
    if r['ctr'] < avg_ctr or r['position'] > avg_pos
]

# 用百分位數動態分級.
imp_values = sorted([r['impressions'] for r in opportunities])
p75 = percentile(imp_values, 75)  # 前 25% = 高優先.
p50 = percentile(imp_values, 50)  # 前 25%~50% = 中優先.

這個做法的好處是門檻會隨著網站流量自動調整。報告裡也會標出本週的實際門檻值,讓你知道「高優先」這週代表的是曝光幾次以上。

分級結果:

  • 高優先(曝光前 25%)— 搜尋量在你的網站中相對最大,值得專門寫一篇文章
  • 中優先(曝光前 25%~50%)— 有一定搜尋量,可以優化現有內容或在相關文章中補充
  • 潛力關鍵字(通過最低門檻但排名較後)— 早期訊號,持續觀察趨勢

報告日期範圍

報告自動計算「上週一到上週日」的完整七天:

days_since_monday = today.weekday()
last_monday = today - timedelta(days=days_since_monday + 7)
last_sunday = last_monday + timedelta(days=6)

這樣每週一執行時,拿到的永遠是上一個完整週的數據,不會有不完整的天數。

產出格式

最後把所有數據組成 Markdown 表格,寫入 reports/gsc-weekly-YYYY-MM-DD.md。選 Markdown 而不是 CSV 或 HTML,是因為在終端機、GitHub、筆記軟體裡都能直接閱讀,不需要額外工具。

完整腳本放在 scripts/gsc-weekly-report.py,手動執行一次確認沒問題:

python3 scripts/gsc-weekly-report.py

如果 API 連線正常,會看到:

Report generated: reports/gsc-weekly-2026-03-10.md

設定每週自動執行

腳本能跑了,最後用 cron 排程讓它每週一早上 10 點自動執行:

crontab -e

加入這行:

# codotx.com GSC 週報 - 每週一上午 10:00 執行
0 10 * * 1 /usr/local/bin/python3 /path/to/scripts/gsc-weekly-report.py >> /path/to/reports/cron.log 2>&1

注意幾個細節:

  • 用絕對路徑指定 python3 和腳本位置,cron 的 PATH 環境跟你的 shell 不一樣
  • 把 stderr 導到 log 檔,萬一執行失敗有紀錄可查
  • * * 11 代表星期一(0 是星期日)

報告實際長什麼樣

產出的週報會長這樣:

關鍵字排名:

#關鍵字點擊曝光CTR平均排名
1line flex message6976.2%4.7
2line user id 查詢61250.0%3.3
3flex message41163.4%6.8
4line login42961.4%6.9
5line notify 替代方案4557.3%4.2

內容機會分析:

篩選條件:週曝光 >= 20,且 CTR 低於全站平均或排名低於全站平均 本週門檻:高優先 >= 206 曝光、中優先 >= 76 曝光

高優先(>= 206 曝光,前 25%):

關鍵字曝光點擊CTR排名
line notify34710.3%9.9
line login29641.4%6.9

中優先(76~205 曝光):

關鍵字曝光點擊CTR排名
flex message11643.4%6.8
ai 圖像辨識網站7600.0%10.3

跟一開始用固定門檻的版本比,原本列出 18 個「機會」,混合制篩到只剩 7 個。數量少了但每個都更值得投入。例如「line notify」曝光 347 次但只被點了 1 次,排名在第 10 名左右,寫一篇完整教學搶進前 5 名,流量成長空間很大。而像「ai 圖像辨識網站」曝光 76 次、完全沒被點擊,代表有搜尋需求但我們沒有對應內容,是一個明確的內容缺口。

整體需要的工具

回顧一下,實現這個自動週報需要以下工具:

  • gcloud CLI — 建立 GCP 專案、啟用 API、建立 Service Account
  • Google Search Console — 在後台授權 Service Account 讀取權限
  • Python + google-api-python-client — 查詢 Search Analytics API、產出 Markdown 報告
  • cron — 每週一自動執行腳本

設定完成後,每週一早上報告就會自動出現在 reports/ 資料夾裡。不用登入任何後台,打開檔案就能看到上週的 SEO 表現和下一步該寫什麼文章。

對我們來說,這份報告最實用的部分是內容機會分析。它把「猜測讀者想看什麼」變成了「數據告訴你讀者在搜什麼」,寫文章的方向清楚很多。更進一步,每週一早上拿到報告後,我們會直接把內容機會丟給 AI,請它根據這些高曝光、低點擊的關鍵字來撰寫對應的文章。從數據採集到內容產出,整條流程都能在同一個早上完成。

作品案例

看看我們打造的產品與專案。從 WordPress 外掛到 AI 客服方案,每一個作品都是實戰經驗的累積。

瀏覽作品案例

服務項目

WordPress 開發、WooCommerce 電商、LINE 整合、AI 解決方案,依據你的需求提供最適合的技術服務。

瀏覽服務項目

Contact

聯絡我們

若你有任何技術需求、專案諮詢或合作想法,歡迎隨時與我們聊聊(首次諮詢免費)。

  • 想打造 WordPress 網站或 WooCommerce 電商
  • 需要 LINE 整合或 AI 功能導入
  • 有產品點子想找技術合夥人一起實現
  • 既有網站需要改版升級或效能優化
  • 尋找長期穩定的技術顧問合作夥伴