[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fFHYOX0QKEJJOTW_OCwJ6RSWLHg8RwISdjmYhXAV40Cw":3},{"slug":4,"title":5,"body":6,"excerpt":7,"tags":8,"maturity":11,"meta":12,"plantedAt":13,"tendedAt":14,"shouldIndex":15,"resolvedLinks":16,"backlinks":18,"authorName":25},"seo-foundations","SEO 基本盤：在 Lighthouse 100 之前要做完的每件事","SEO 教學常常直奔玄學（關鍵字密度、外鏈買賣），但在那之前有一層純工程的基本盤——做完它，Lighthouse SEO 就該是 100。這個站的清單：\n\n## Meta 與 canonical\n\n每頁都有 title \u002F description \u002F OG 標籤 \u002F canonical，收斂在一個 composable 裡（`usePageSeo`），頁面只宣告內容，不重複接線。canonical 的絕對網址基底來自環境變數——**上線時忘了改它，所有頁的 canonical 會指向 localhost**，這種錯誤搜尋引擎不會原諒。\n\n## 結構化資料（JSON-LD）\n\n文章頁掛 `Article` + `BreadcrumbList`，關於頁掛 `Person`。重點紀律：**只掛在可索引的頁上**——對 noindex 的頁餵結構化資料是自相矛盾的訊號。\n\n## noindex 是策略，不是懲罰\n\n數位花園的[[rootnote-origin|成熟度光譜]]在 SEO 上有直接對應：🌱 種子筆記是幾行的粗略隨想，這種 thin content 被索引只會拉低整個網域的品質評價。所以種子頁一律 `noindex`，**且不進 sitemap**——sitemap 只放你希望被抓的頁，這兩個訊號必須一致。\n\n## sitemap 與 RSS：動態生成，同一個資料源\n\n兩者都是 server route 動態產出、各快取十分鐘。`lastmod` 用「最後照顧時間」——常青筆記會反覆被照顧，讓爬蟲知道它其實很新鮮。這裡踩過一個安靜的雷：列表 API 改成分頁後，sitemap 把分頁物件當陣列用，**壞了一段時間都沒人發現**——sitemap 沒有使用者，它壞掉不會有人回報。教訓：對機器的介面也要有煙霧測試。\n\n## 剩下的交給內容\n\n基本盤做完，接下來影響排名的就是內容本身與時間。工程能保證的是「搜尋引擎理解你的每一頁」，不能保證「搜尋引擎喜歡你」——把可控的做到滿，剩下的種下去等它長。","SEO 教學常常直奔玄學（關鍵字密度、外鏈買賣），但在那之前有一層純工程的基本盤——做完它，Lighthouse SEO 就該是 100。這個站的清單： Meta 與 canonical 每頁都有 title \u002F description \u002F OG 標籤 \u002F canonical，收斂在一個 composable 裡（us…",[9,10],"seo","nuxt","evergreen",null,"2026-07-14T06:54:19.934Z","2026-07-14T11:26:32.917Z",true,{"rootnote-origin":17},"Rootnote：這座花園本身就是一件作品",[19,23],{"slug":20,"title":21,"maturity":22},"autosave-editor","編輯器的溫室工程：自動儲存、補全與一個吃字的 bug","budding",{"slug":24,"title":17,"maturity":11},"rootnote-origin","AI助理"]