別讓 Google 找不到你的文章
SSR Blog 的 SEO 踩坑實錄
用 Astro + PostgreSQL 建 Blog 時,每一個 SEO 決策背後的原因——以及那些差點讓文章消失在搜尋結果裡的坑。
我們做了哪些事?
我們補了五層,從動態 sitemap 到 robots.txt,每層對應一個明確消費者。
sitemap-posts.xml 從 DB 即時查詢已發布文章,build 時自動 patch 進 sitemap-index.xmlhttp://localhost 和 https://blog.joneshong.com 被判定重複/admin/ 和 /api/。指向兩份 sitemap我們怎麼發現問題的?
不是預先設計好,是踩了 3 個坑才補齊:sitemap 沒人引用、閱讀時間算成 73 分鐘、Nginx subpath 頁面空白。
sitemap-posts.xml 沒人引用
@astrojs/sitemap 生成 sitemap-index.xml 時只包含靜態頁。動態的 sitemap-posts.xml 被無視了。修法:build 後自動 patch sitemap-index 加入 posts sitemap。
領悟:自動化工具不一定覆蓋所有 case,SSR 動態頁需要手動補漏。
貼你自己的 head 進來查
上面那份清單有六項,其中三項不用爬站就能驗——貼上你任一篇文章的 <head> 原始碼即可。canonical、hreflang、JSON-LD 這三項全部在瀏覽器本地解析,不會送出任何東西。剩下三項(sitemap 收錄、robots.txt、TTFB)必須實際對你的網域發請求,瀏覽器的跨站限制做不到,那三項留給上面那段 prompt 交給你的 AI 去爬。
查的是「你貼進來的那段字串」,不是你的線上頁面——如果你貼的是瀏覽器 DevTools 裡的 Elements 面板(那是 JS 跑完後的 DOM),結果可能跟爬蟲看到的不一樣。要跟爬蟲看到的一致,請用「檢視網頁原始碼」(view-source)那份。
複製給你的 AI Agent
你以為文章發了,Google 卻不知道它存在——SSR blog 的頁面是 runtime 才生成的,@astrojs/sitemap 只收 build 時的靜態頁,動態文章根本沒被寫進 sitemap。缺 meta tag 頂多排名差,沒被收錄是直接從搜尋結果消失。
把下面這段貼給你的 AI,讓它別憑常識答,直接去爬你的站、對照本文清單,抓出你實際漏了哪幾項:
延伸閱讀
這五篇各自對應一個決策,從隱形成本類比到 67% hreflang 錯誤率數據都有。
| 文章 | 為什麼重要 |
|---|---|
| Apideck: Your MCP Server Is Eating Your Context Window | 啟發了「隱形成本」的類比 |
| SEO for Astro: How to Make the Fastest Framework Also the Smartest | Astro SEO 實作的完整指南 |
| JSON-LD Blog Post Example | BlogPosting schema 的參考實作 |
| Multilingual SEO and Hreflang Guide | 67% 錯誤率數據的來源 |
| How to Improve Core Web Vitals | SSR 效能優化的具體方法 |