把 GEO audit 從 70 推到 81:5 步、3 commit、每一步的分數與證據
先講重點
跑 GEO(生成式引擎優化)audit 抓到 70 分原以為是現況,重跑一次發現是過時存檔(baseline 其實 76)。5 個動作把它推到 81:新鮮度雙日期 +2、HTML 註解清掉 +1、Service schema 單一事實來源 +1。Perplexity 從 62 升到 85(+23)吃最多紅利、ChatGPT 從 70 持平、Google AI 80 沒動 — 三家對訊號的權重完全不同。
1. 起點是一個假分數
第一次跑 audit 的時候打開 geo-audit.json 看到 70 分,band「good」,腦袋自動進入「OK 還行」模式。看了一下 recommendations 列表二十幾條,準備抓最高 ROI 的下手。
幾秒後注意到檔案開頭:timestamp: '2026-05-11T05:52:39'。今天 5/29。這個分數是 18 天前的。
過去 18 天我做了 about entity signal 改造、3 個 hub FAQPage、SEO 連載 +4 篇、首頁 RPG dashboard、Quick Answer block 全 18 篇。70 分根本不是現況。
重跑一次 live audit:76 分。第一個教訓:跑分前先看時間戳,過時存檔會讓你修錯題。
2. 76 → 78:新鮮度 + 描述對齊 + 塞詞分散(第一波,commit 55dcf42)
76 分的 audit 給的真實缺口有四個:(1) signals 5/6 freshness False — schema 缺 dateModified、頁面沒可見「最後更新」(2) schema_desc_matches_meta False — Organization schema 的 description 跟 meta description 文字不一樣 (3) trust_stack consistency 2 項缺失 (4) keyword_stuffing True — 首頁 'workflow' 被判 12.5% 密度。
這四個有共同主題:「站台健康度的一致性訊號」。挑出 LASTMOD 跟 BRAND_DESCRIPTION 兩個常數,前者拆成 SITE_UPDATED(部署日)+ LASTMOD(內容基準)兩個,後者改成跟首頁 meta description 逐字一致。詳細在 #18 跟 #19。
塞詞那個比較麻煩,因為 'workflow' 在首頁出現 27 次裡有 11 次是真實的分類標籤跟 nav(Workflows 大寫 cat label、WORK-008 等代碼),不能砍。我只動了首頁 FAQ 三處冗餘的「AI workflow」,把兩個轉成中文「工作流」、留下品牌核心句「第一次建立自己的 AI workflow」一次。密度從 7.9% 降到 5.3%。
部署後重跑:78 分。
| 指標 | 改前 | 改後 |
|---|---|---|
| signals freshness | 5/6 False | 6/6 True |
| schema_desc_matches_meta | False | True |
| consistency 缺失 | 2 項 | 0 項 |
| brand_entity | 5/10 | 6/10 |
| Perplexity 引用力 | 62 | 85(+23) |
| ChatGPT | 55 | 70 |
| Google AI | 80 | 80 |
Perplexity 加 23 分這件事讓我盯著看了很久。其他平台變化都小:ChatGPT 加 15、Google AI 完全沒動。後面會再講為什麼。
3. 78 → 80:中間別人也在動(commit 66de945、fec2393)
我在做第一波之間,另一個 session(不同的 agent,跑不同任務)也在動站台。它做了兩件對 audit 有幫助的事:(1) a11y 修對比 — PageSpeed 無障礙從 93 推到 100,順手把某些 #8a7e6a 灰字換成對比足夠的 #6e6353。audit 沒直接量 a11y,但「站台健康度」這個複合分數會吃 a11y 訊號。(2) 加 llms-full.txt — 在 head 補 link rel='llms-full-txt'。audit 的 llms_txt.has_full 從 False 翻 True,這項從 12 變 14。
我打開 audit 的時候它已經跑完這兩件事了,重跑:80 分。band 還是「good」(excellent 通常 85+)。
這段的教訓:多人/多 session 開發同一個站,audit 分數是「最後一次部署的快照」。沒有單純的「我的改動拿了幾分」,是「最後一個 push 上去的狀態值幾分」。
4. 80 → 81:HTML 註解 + Service schema + AI endpoint hints(第二波,commit 99695c9)
80 分的 audit 裡面,最讓我皺眉的是 prompt_injection severity: critical。一條 critical level 的安全警告。打開 detail:
html_comment_injection_count: 1
samples:
- "LCP critical path — 不 preload 任何字體(教訓累積)。
1) preload mascot.webp 跟 CSS 搶頻寬 → FCP 退步,已移除。..."
那是我在 build.py 的 page_shell 寫的 dev 註解。內容是「為什麼我們不 preload 字體」的決策紀錄。audit 的邏輯是:HTML 註解會被 AI crawler 讀到,所以任何看起來像「給 AI 指示」的 HTML comment 都標記為潛在的 prompt injection。
這是 heuristic 誤判,但audit 的邏輯不算錯。HTML 註解確實會被部分 AI crawler 抓進 context(OpenAI 的 web reader 就會),純 dev 文件根本沒理由放在 HTML 輸出裡 — 應該在 source code 用 Python # 註解,不要進 build 後的 HTML。我清掉 8 個(全站 page_shell + about 各一個)。prompt_injection 從 critical 變 clean、html_comment_count 從 1 變 0。
順手做另外兩件:Service schema 單一事實來源 — 我們的 NT$ 1,999 陪跑服務本來只有 /ai/service.json 一個檔案描述,沒有 inline JSON-LD 進 HTML。新寫一個 service_schema() 在 lib/schemas.py,三處共用同一份 dict:寫進 /ai/service.json、首頁 inline schema、/service.html inline schema。schema_jsonld.found_types 從 3 種變 4 種(多 Service),brand_entity 6 變 7。
AI endpoint discovery hints — head 加兩個 link rel='alternate' 指向 /ai/service.json 跟 /ai/summary.json。audit 的 ai_discovery.has_service 沒翻 True(它的偵測邏輯比預期挑剔),但這是 forward-looking 標準動作。部署後:81 分。trust_stack grade 從 C 變 B(composite 16 → 19)。
5. 為什麼停在 81 = 實質終點
剩下的 audit 建議我逐條過:
| 建議 | 我的判定 |
|---|---|
| Add sameAs Wikipedia/Wikidata/LinkedIn/Crunchbase | 化名個人品牌沒這些真帳號,空帳號頂多不加分、標一個你沒有的 entity 才反傷(#21 完整論述) |
| Expand content to 500+ words | 首頁是 RPG dashboard,276 字是設計取捨。要拉到 500 字得改視覺,品牌取捨 > 分數 |
| Create /ai/service.json | 誤判,檔案已存在 live 200 |
| Form labels / WebMCP | 沒有表單可加 label;WebMCP 是 Chrome 還在 propose 的標準,不急 |
四項建議全部不應該追:兩項是品牌/誠實邊界、一項誤判、一項標準未定。所以 81 是這個站結構上能拿的最高分,再上去要嘛改 RPG 視覺、要嘛加假 sameAs。前者品牌不能讓、後者誠實不能讓。
6. 各家 AI 引擎的權重差異最值得看
三家 platform 從 70 推到 81 的變化曲線完全不一樣:
| 引擎 | 76 時 | 81 時 | 變化 |
|---|---|---|---|
| ChatGPT | 55 | 70 | +15 (主要在 78→80 a11y / llms-full) |
| Perplexity | 62 | 85 | +23 (76→78 新鮮度紅利) |
| Google AI | 80 | 80 | 0 (一開始就高,靜止) |
audit 工具給 Perplexity 的分數對新鮮度反應明顯比另外兩家大。Perplexity 主打「即時 answer engine」,直覺上較看重新鮮度 — 但它內部 retrieval 怎麼排序、是不是用 dateModified 過濾候選池,沒有公開資料,我無法驗證。我能講的只有工具分數的變化,不是 Perplexity 的真實引用機制。
Google AI Overviews 對舊內容相對寬容 — 它跟傳統 Google search ranker 共享更多訊號,新鮮度只是其中一個權重不太高的因素。從 80 開始就難動,因為它要的是 EEAT 跟反向連結這種「需要時間累積」的訊號。
意思是:你寫 GEO 內容、想被誰引用,要選不同武器。想被 Perplexity 引用 → 拼新鮮度、拼結構化 schema、拼 statistics density(短跑武器,幾天看得到效果)。想被 ChatGPT 引用 → 拼 llms.txt 完整度、拼可引用單元(中跑武器)。想被 Google AI Overviews 引用 → 拼 EEAT + 反向連結 + topical authority(長跑武器,幾個月才有訊號)。新站想速效就先打 Perplexity,反正不會傷其他兩個。
▸ 常見問題
Q1:用什麼工具跑 audit?
geo-optimizer-skill,MIT 授權。pip install 後 geo audit --url <site> 直接跑。輸出含 platform-specific scores、schema breadth、prompt injection 偵測、embedding proximity 等。
Q2:為什麼 audit 擋我 localhost?
SSRF 防護。audit 工具預設不允許掃 localhost / 127.0.0.1 / 內網 IP,避免被當 SSRF 攻擊向量。要測本地 build 只能部署到 staging URL 才能掃。
Q3:分數降了該怎麼辦?
先看 timestamp 跟 git log 對齊,確認是哪一次部署造成的。然後看 score_breakdown — 哪一個 sub-score 掉分。降分通常比上升更容易抓 root cause,因為剛剛改了什麼很清楚。
Q4:可以為了拿分把首頁文字加長嗎?
可以但要看交易。首頁 276 字 → 500 字大概能拿 +1~2 分。但要嘛塞 keyword(傷 stuffing)、要嘛塞 boilerplate(傷信任)、要嘛把 RPG dashboard 的視覺壓垮。Lab 選擇守住視覺。audit 是工具不是目的 — 分數推到看不到大缺口就停。
70 → 81 的 5 步紀錄完。三家 AI 引擎權重不同 — Perplexity 短跑 / ChatGPT 中跑 / Google AI 長跑。81 是這個站結構上限,剩下要長期累積。下篇 #21 講為什麼我拒絕加假 sameAs — 化名個人品牌 vs KG entity 邊界,誠實 > 分數。
名詞解釋
- HTML
- 網頁的骨架語言,定義「這是標題、這是段落、這是圖片」。
- 部署(deploy)
- 把做好的網站或程式「推上線」讓所有人用得到的動作。
- 提交(commit)
- Git 的一個存檔點:把這次改動連同一句說明記錄下來,之後隨時可以回到這個版本。
- GEO(生成式引擎優化)
- 讓 ChatGPT、Perplexity 這類 AI 在回答問題時引用你網站內容的優化方法,是 SEO 在 AI 時代的延伸戰場。
- 無障礙(accessibility / a11y)
- 讓視力不佳、不便操作的人也能順利使用網站的設計標準。WCAG AA 是國際標準的中間等級,要求文字與背景對比度 ≥ 4.5:1。
- 提示詞(prompt)
- 你打給 AI 的那段指令或描述。寫得越具體(要什麼、給誰用、長怎樣),AI 做出來的東西越接近你要的。
- llms.txt
- 放在網站根目錄、寫給 AI 看的網站導覽檔(社群慣例):告訴 AI 這個站有什麼內容、重點頁在哪、全文去哪抓。
- 爬蟲(crawler)
- 自動瀏覽網頁、把內容抓回去的程式。Google 靠爬蟲收錄網頁,AI 公司靠爬蟲收集資料。
- Meta 描述(meta description)
- 搜尋結果裡標題下面那兩行說明文字。不直接影響排名,但寫得好能提高被點進來的機率。
- 結構化資料(Schema / JSON-LD)
- 用機器看得懂的格式跟搜尋引擎說明「這頁是文章、作者是誰、何時更新」,有機會換到更豐富的搜尋結果外觀。
- 關鍵字堆砌(keyword stuffing)
- 把關鍵字硬塞滿整篇文章的過時手法。現在不只沒用,研究實測在 AI 引用場景還會扣分。
- 反向連結(backlink)
- 別的網站連到你網站的連結,等於外部幫你投的信任票,是搜尋排名的重要訊號。
看完這篇之前先確認:
- 第一次跑 GEO audit、看著一堆建議不知從哪下手
- 自己的站還在 70-80 分區間想推到 80+
- 對 audit 分數的「真假」有疑問,不確定哪些建議該認真追
- 已經 85+ 分的成熟站(剩下的是長期累積,不是結構優化)
- 完全不在乎 audit 分數、只看實際引用流量的站
- 找「保證上 90」的 SEO 服務(沒有,這篇只是紀錄不是處方)
- 拿過時的 audit 存檔當現況 — 時間戳要看
- 為了拿分加假訊號(假 sameAs、假 schema、誇大數字) — audit 拿到分但長期被罰
- 把 audit 分數當絕對權威 — 三家平台對訊號權重完全不同,總分是平均後的失真
相關閱讀
這篇背後的真實開發過程記錄在 Build Log。
搜尋標籤:geo、audit、perplexity、chatgpt、google-ai、build-in-public、70-to-81。
本篇為個人實驗紀錄。GEO audit 分數來自第三方工具,不同工具評分標準不同,本文做法不保證在你的網站產生相同結果,請依自身狀況驗證。教育研究用途,不構成投資建議。