tool-call 崩潰不是斷線,是 \. 在 JSON 裡是非法 escape
上個 session 在 grep 掃描 15 篇公式頁的互連時崩潰,錯誤訊息是 「The model's tool call could not be parsed (retry also failed)」。 排除斷線和 quota 之後,根因落在 grep pattern: `href="[a-z0-9-]+\.html"` 裡的 `\.` 是反斜線加點—— JSON 只認 `\\`、`\"`、`\/`、`\n`、`\t` 這些 escape, `\.` 不在清單裡,序列化時直接報 parse error。
正確寫法是 `[.]html`——在字元類裡,點號是字面量,不需要 escape, 也就沒有序列化問題。這是除了 emoji 之外讓 tool-call 崩潰的第三種觸發源, 只要在 grep pattern 裡混入 `\.`,就會重現。
重掃的真相:0 互連是假象,4 個孤兒頁是真問題
用安全 pattern 重掃 15 篇,發現上次的「0 互連」結論完全是誤判—— 當時的 pattern 沒有涵蓋 `/formulas/` 絕對路徑, 讓已存在的連結全部漏計。真實狀況是:15 篇已有稀疏互連, 但有 4 個孤兒頁(連出 0):bmi、ohms-law、ph-value、wave-speed。
這個教訓和 6/4 的 sitemap 漏算同源:「宣告完整前先嚴格 count」。 兩次都是因為工具本身有 bug(pattern 或計算邏輯), 讓快照和現實產生落差,然後照錯誤的快照去做事。
內部連結矩陣:誠實串接,不硬造主題關聯
15 篇按主題分成三個群組,加一條跨科指標鏈: 金融三角(compound-interest、rule-of-72、mortgage-payment); 物理網狀(emc2、kinetic-energy、newtons-second-law、universal-gravitation、wave-speed); 數學三角(pythagorean-theorem、distance-formula、quadratic-function); 跨科指標鏈(arithmetic-mean ↔ bmi ↔ ph-value ↔ ohms-law)。
4 個孤兒頁沒有同科鄰居,用「同為簡單線性或指標公式」的理由串接—— 這是誠實的關聯,不是硬拉。造假的 SEO 主題連結短期或許有用, 長期是技術債,要清也費事。
矩陣設計完後做數學閉合驗算:每頁連出 ≥2、被連 ≥2。 初版 arithmetic-mean 和 ohms-law 各只有 1 個 inbound, 補了 compound-interest→arithmetic-mean 和 wave-speed→ohms-law 兩條才閉合。 這種計數驗算,在頁面數不多時用紙筆列表就夠,省去工具的噪音。
冪等 Python 腳本代替 30 次手動 Edit
15 篇各補互連 + 各注入 BreadcrumbList,如果手動 Edit 是 30 次操作起跳, 出錯機率也等比上升。寫一支 `/tmp/bobo_seo_links.py`,不可變風格: 逐檔讀入 → 轉換 → 寫出,轉換函式有雙重冪等守衛: P0 只補 OUTBOUND 矩陣中「href 尚不存在」的連結; P1 只在「BreadcrumbList 字串不存在」時才注入。 跑兩次結果相同,不需要擔心重複執行。
結果:15 篇 BreadcrumbList 全注入、11 篇補了真連結、 4 篇本已完整(腳本輸出「連結無新增」)。 commit 1c272bf:15 檔 +123 行、0 刪除。
BreadcrumbList:讓搜尋引擎讀懂頁面層級
BreadcrumbList JSON-LD 描述的是「首頁 → 公式庫 → 該公式」三層結構, Google 解析後可能在 SERP 顯示麵包屑路徑,讓使用者在點進來之前就知道頁面的位置。 這份 schema 插在既有 TechArticle ld+json 之後、 Cloudflare Analytics script 之前,與 TechArticle 並存,不是替代。
對症之前 AdSense 被拒與 Google Search Console「探索但未索引」的問題: 那兩個反映的是內容品質和索引信號不足。 BreadcrumbList 改善搜尋引擎對層級的理解; 內部連結讓 link equity 在 15 篇間流動,提升 topical authority 判讀。 沒有辦法保證立即提升排名,但這兩項是結構性的地基, 缺了它們後面的 GSC 提交和 sitemap 優化都會打折扣。
關鍵教訓
`\.` 在 JSON 裡是非法 escape:grep pattern 放進 tool-call 時,反斜線加點會讓序列化 parse 失敗。安全替代方案是 `[.]`——在字元類裡點號是字面量,不需要 escape。
宣告「0 互連」前先確認 pattern 對:兩次失誤(互連漏計、sitemap 漏算)都源於工具本身有缺陷,讓人誤信了錯誤的 snapshot。count 要嚴格,不能省。
冪等守衛是批次腳本的必要條件:「只補不存在的東西」讓腳本可以安全重跑,不需要在每次執行前手動確認狀態。
誠實的主題關聯優於硬造:4 個孤兒頁用「同為指標公式」串接,是真實關聯,不是 SEO 關鍵字塞入。虛假的主題連結是技術債,清理成本遠高於不做。
數學閉合驗算不需要工具:每頁 inbound/outbound 計數用列表手算即可,省去自動化的複雜性,這個規模不需要它。