1. 網站上線前,我怎麼安排這份 SEO 驗收清單
我做 SEO 二十多年,經手過的網站改版與新站上線不下數百次。累積到後來,我最深的體會是:上線後才發現的 SEO 問題,修復成本往往是上線前的好幾倍。頁面已經被搜尋引擎抓過、索引過、甚至排名過,這時再改結構、改網址、改標記,牽動的就不只是程式,還有已經建立的索引狀態。所以我堅持,SEO 驗收要在上線前做,而且要有一份可以逐條打勾的清單,而不是憑印象檢查。
這篇文章把我實際使用的驗收標準整理成十二大類,每一類都用表格列出「必要項」與「驗收方式」,方便工程師、PM 與 SEO 三方在同一份標準上對齊。
1.1 為什麼驗收要卡在上線這個時間點
上線是一個資訊落差最大的時刻。工程團隊知道自己怎麼寫的,但不見得知道搜尋引擎怎麼讀;SEO 知道搜尋引擎的規則,但不見得看得到後端渲染的實際輸出。驗收清單的價值,就是把這兩邊的認知強制對照一次。我看過太多案例,是上線半年後排名一直上不來,回頭一查才發現首頁的主要內容根本是前端渲染,搜尋引擎從第一天就沒讀到。這種問題若在上線前用一份清單抽查,幾分鐘就能發現。
1.2 必要項與加分項要分清楚
清單裡我會把項目分成兩級。標示「必要」的項目,是不通過就不該上線的紅線,例如可索引性、canonical、robots 設定;其餘則是加分項,可以排進上線後的優化排程。分級的用意是避免驗收變成無止境的完美主義,把有限的時間先花在會直接影響「能不能被搜尋引擎讀到」的關鍵項目上。
1.3 這份清單的使用方式
建議的用法是,在預計上線日前至少三到五個工作天跑一輪完整驗收,把不通過的項目列成待辦回饋給對應負責人,修完再複驗一次。以下每一張表格都可以直接當成待辦清單使用,左欄是要檢查的必要項,右欄是我實際採用的驗收方式。
2. 網站結構與可索引性:先確定爬蟲進得來也讀得到
這一組是地基。地基不穩,後面所有內容優化都是空談,因為搜尋引擎根本進不來或讀不到。我把結構、可索引性、渲染方式三類放在一起,因為它們共同決定了「搜尋引擎最終看到的是什麼」。
2.1 結構與階層
網站階層決定搜尋引擎理解主題關聯的難易度,也影響抓取效率。我的原則是重要頁面距首頁不超過三層,而且導覽列、麵包屑、網址三者的層級要說同一個故事。
| 必要項 | 驗收方式 |
|---|---|
| 重要頁面距首頁不超過三層 | 從首頁點擊三次內可抵達分類頁與詳細頁 |
| 導覽列、麵包屑、網址層級一致 | 抽查頁面比對三者是否反映同一結構 |
| 網址用小寫、連字號,具語意 | 檢查是否有大寫、底線、動態參數 |
| 每頁有唯一 canonical,無重複內容 | 檢視原始碼確認 canonical 自我指向 |
| 麵包屑具 BreadcrumbList 結構化資料 | 用 Rich Results Test 驗證 |
2.2 可索引性
可索引性我全部列為必要項,因為這一關直接決定內容存不存在於搜尋引擎眼中。核心動作只有一個:確認搜尋引擎抓得到、也讀得到主要內容。
| 必要項 | 驗收方式 |
|---|---|
| robots.txt 未誤封主要內容 | 確認 /admin、/login 以外路徑開放抓取 |
| sitemap.xml 狀態 200、含 lastmod、頁數相符 | 存取檔案並與全站抓取結果比對筆數 |
| sitemap 已提交 GSC 且顯示成功 | Search Console 的 Sitemap 報表 |
| canonical、noindex、robots header 正確 | 抽查各模板的回應標頭與原始碼 |
| 主要模板無需登入即可被抓取 | 用無痕視窗或爬蟲驗證可存取 |
2.3 JS 渲染與 SSR
這一類是最容易被漏掉、卻最傷 SEO 的地雷。判斷方式很簡單:用「檢視原始碼」看到的,才是搜尋引擎最先讀到的東西。如果原始碼幾乎空白、只有一個框架,代表主要內容是前端渲染,搜尋引擎可能完全看不到。
| 必要項 | 驗收方式 |
|---|---|
| 初始 HTML 即包含主文與標題 | 用「檢視原始碼」確認看得到主要文字 |
| 禁用 JavaScript 後仍看得到主要內容 | 瀏覽器關閉 JS 後重新載入頁面 |
| 頁籤、篩選、分頁內容存在於 HTML 結構 | 檢視原始碼確認切換內容非 JS 動態注入 |
| 無單純依賴 JS 注入的主文 | 比對渲染前後的差異 |
我分享一個實務判斷法:抽首頁、列表頁、詳情頁三種模板,各按一次 Ctrl+U 看原始碼。只要這三種頁面的主要文字都能在原始碼裡搜尋得到,渲染方式基本上就過關了。若搜不到,就要求工程端提供伺服器端渲染或預先渲染的快照方案,別讓內容只活在瀏覽器記憶體裡。
3. 頁面元素與內容標記:每一頁都要能被讀懂
結構過關之後,接著看單頁層級的標記。這一組決定的是搜尋引擎「理解」一頁內容的品質,包含標題與描述、圖片、以及社群分享時呈現的樣貌。
3.1 On-page 基本元素
On-page 是我每次驗收花最多時間抽查的區塊,因為它直接影響搜尋結果的呈現與點擊率。重點是每頁唯一的 title、與內容一致的 description、以及正確的標題階層。
| 必要項 | 驗收方式 |
|---|---|
| 每頁唯一 title(50–65 字元)語意清晰 | 抽查各模板 title 是否重複或過長 |
| meta description 存在且與內容一致(120–155 字元) | 檢視原始碼比對描述與頁面內容 |
| 每頁一個 H1,階層 H1→H2→H3 正確 | 用工具列出標題結構,確認無多 H1、無跳級 |
| 所有圖片具描述性 alt | 抽查 img 標籤的 alt 屬性 |
| 主要連結為 a href,錨文字具描述性 | 確認未用 button 取代分頁連結 |
| 外部連結具 rel=”noopener noreferrer” | 檢查外連的 rel 屬性 |
3.2 圖片、影音與多媒體
媒體驗收的核心觀念是:圖片不該是主要資訊的唯一載體。價目表、營業時間、規格這類文字資訊若只用一張圖呈現,搜尋引擎讀不到裡面的字,這頁在相關搜尋的競爭力會大打折扣。
| 必要項 | 驗收方式 |
|---|---|
| 圖片有語意化檔名與 alt | 檢查檔名非亂碼、alt 自然描述 |
| 圖片採 WebP / AVIF 格式,控制檔案大小 | 檢視資源格式與首屏圖片大小 |
| 圖片非主要資訊載體 | 確認文字資訊未被做成圖片 |
| 影片具 VideoObject 結構化資料或說明文字 | 檢查影片頁的 JSON-LD 或內文描述 |
3.3 社群與分享標籤(OG / Twitter)
Open Graph 與 Twitter Card 不直接影響排名,但影響內容被分享到社群時的呈現,連帶影響點擊。我把它列在必要驗收裡,是因為缺漏或抓錯圖的成本很低卻很常見。
| 必要項 | 驗收方式 |
|---|---|
| 具 og:title、og:description、og:image、og:url | 檢視原始碼確認四項齊全且唯一 |
| og:image 為 1200×630px 且可公開存取 | 直接開啟圖片網址確認回傳 200 |
| Twitter Card 設為 summary_large_image | 檢查 twitter:card 設定 |
| OG / Twitter / title / description 一致 | 用 Facebook Debugger 與 Twitter Validator 驗證 |
4. 語意強化與國際化:讓搜尋引擎理解得更深
基本標記到位後,這一組是進一步幫搜尋引擎「深度理解」內容。結構化資料補上機器可讀的語意,多語系標註處理語言對應,營業資訊則讓在地商家在地圖與搜尋中正確呈現。
4.1 結構化資料(JSON-LD)
結構化資料不會直接拉高排名,但能幫搜尋引擎更快理解內容,也是取得豐富摘要的前提。我驗收時特別在意兩件事:格式無誤,以及標記內容與頁面實際內容一致,不能標記寫得很豐富、頁面上卻找不到對應資訊。
| 必要項 | 驗收方式 |
|---|---|
| 各頁有對應主要類型的 JSON-LD | 檢查 WebSite / Article / Product / FAQ 等是否套用 |
| 首頁具 WebSite + Organization | 檢視首頁原始碼的 JSON-LD |
| JSON-LD 無語法錯誤,通過 Rich Results Test | 逐頁用驗證工具檢查 |
| 同一頁不重複同類型 | 確認無兩個 Article 之類的衝突 |
| 標記內資訊與頁面內容一致 | 比對標記欄位與畫面實際文字 |
4.2 多語系(Lang / Hreflang)
多語系是最容易出隱性錯誤的區塊,錯了不會報錯,只會讓錯誤地區看到錯誤語言。核心原則是:每個語系有自己的網址,彼此用 hreflang 互相指認,並含 x-default。
| 必要項 | 驗收方式 |
|---|---|
| html lang 設為正確語系(如 zh-TW) | 檢視原始碼確認 lang 屬性精確 |
| 各語系有獨立 URL,非 JS 切換 | 切換語言看網址是否改變 |
| 各語系互相對應 hreflang,含 x-default | 檢查每個版本的 alternate 是否互指 |
| hreflang 與實際內容語言一致 | 抽查頁面語言與標註是否相符 |
| sitemap 含 hreflang 標註 | 檢查 sitemap 的 xhtml:link |
4.3 營業資訊與開放時間
這一類針對有實體門市的網站。營業時間常被做成一張圖或只在前端渲染,搜尋引擎讀不到,對本地搜尋很吃虧。正確做法是用可見文字或表格呈現,再搭配結構化資料。
| 必要項 | 驗收方式 |
|---|---|
| 營業時間以可見文字或 table 呈現(非圖片) | 檢視原始碼確認時間為可讀文字 |
| 內容在初始 HTML 可見 | 用檢視原始碼確認非前端注入 |
| JSON-LD 含 OpeningHoursSpecification | 檢查 LocalBusiness 結構的營業時間欄位 |
| 各分店有獨立 URL 與對應結構化資料 | 確認每間門市頁面獨立且標記完整 |
5. 體驗、可及性與效能:使用者與爬蟲都在看
最後這一組看的是頁面的實際體驗品質。搜尋引擎越來越重視使用者實際感受,可及性與效能不只是給人看的,也是搜尋引擎評估頁面的訊號。
5.1 互動與可及性
可及性與 SEO 有很高的重疊。一個對螢幕閱讀器友善的頁面,通常對搜尋引擎爬蟲也友善,因為兩者都依賴語意正確的 HTML。重點是互動元件要用對標籤,而且禁用 JS 後主要內容仍在。
| 必要項 | 驗收方式 |
|---|---|
| 分頁、切換、表單具正確語意(a、button role=”tab”) | 檢查互動元件標籤與 ARIA 屬性 |
| 互動元件具 aria-label 或 aria-controls | 抽查需要說明的控制元件 |
| 禁用 JS 後仍看得到主要內容 | 關閉 JS 重新載入頁面 |
| Focus 狀態可見、可鍵盤操作 | 用鍵盤 Tab 鍵測試操作流程 |
5.2 效能與技術檢查
效能項目我特別盯與 SEO 直接相關的部分,例如版面位移。首屏文字與圖片要在初始回應就出現,伺服器回應碼要正確,這些都是搜尋引擎在評估頁面體驗時實際會參考的。
| 必要項 | 驗收方式 |
|---|---|
| Core Web Vitals:版面位移 CLS ≤ 0.1 | 用 Lighthouse 或 PageSpeed Insights 量測 |
| 首屏文字與圖片於初始回應可見 | 檢查初始 HTML 與載入順序 |
| 伺服器回應碼正確(200 / 301 / 404) | 抽查各類頁面回應標頭 |
| robots.txt、sitemap.xml 狀態正常 | 直接存取兩份檔案確認回傳 200 |
6. 驗收流程:用固定順序把上面全部串起來
有了十二大類的清單,還需要一個固定的執行順序,不然每個人查的重點不一樣,漏項就會發生。我習慣用一套五步驟流程,從最底層的「搜尋引擎讀不讀得到」一路往上檢查到效能。
6.1 五步驗收流程
這個順序是有邏輯的:先確認內容存在,再確認語意正確,最後才看體驗與效能。前一步沒過,後面查得再細也沒意義。
| 順序 | 步驟 | 目的 |
|---|---|---|
| 1 | view-source 驗證 | 確認主要內容在初始 HTML 出現 |
| 2 | Rich Results 驗證 | 測試結構化資料是否正確 |
| 3 | Google 渲染測試 | 確認搜尋引擎渲染版本與畫面一致 |
| 4 | Lighthouse 檢查 | 量測效能與可用性 |
| 5 | GSC 覆蓋率檢查 | 確認無「可索引但內容空白」頁 |
6.2 三方責任分工
驗收要跑得順,分工要先講清楚。我的經驗是,把每一類明確指派給對的人,回饋才不會踢皮球。結構、渲染、回應碼這類偏技術的由工程端負責;title、description、內容標記由內容與 SEO 端負責;PM 則負責統籌排程與確認每一項都有人認領。上線前的複驗一定要留時間,修完不複驗等於沒驗。
7. 常見問題
7.1 這十二大類全部都要通過才能上線嗎
不是。標示「必要」的項目是不通過就不該上線的紅線,主要集中在可索引性、結構、渲染這幾類;其餘加分項可以排進上線後的優化排程,分批處理。我的原則是把有限的驗收時間先花在「會決定搜尋引擎能不能讀到內容」的必要項上,加分項慢慢補,不要為了追求一次到位而延誤上線。
7.2 沒有實體門市的網站,營業資訊那一類可以跳過嗎
可以。營業資訊與 OpeningHoursSpecification 這一類是針對有實體據點的本地商家。純線上服務或內容型網站沒有營業時間可標,直接跳過即可,把力氣放回結構化資料裡符合你內容類型的部分,例如文章用 Article、服務用 Product 或 FAQ。清單要依網站性質裁剪,不是每一項都適用每一種網站。
7.3 上線後才發現漏了某一類,補救來得及嗎
大多數項目上線後補都來得及,例如結構化資料、OG 標籤、alt 屬性,補上後重新請搜尋引擎抓取即可。真正麻煩的是牽動網址與結構的項目,例如網址規則錯誤、canonical 指向錯誤,這些改動可能影響已建立的索引,需要搭配 301 重導與 GSC 觀察。所以我才一再強調結構類要在上線前就確認,愈底層的東西愈不該事後才改。
7.4 驗收要花多久,可以壓縮嗎
一個中型網站完整跑一輪,含抽樣、比對、回饋、複驗,通常需要幾個工作天。可以壓縮的是加分項,不能壓縮的是必要項的抽查與複驗。我不建議為了趕上線而跳過複驗,因為修改本身也可能引入新問題,沒複驗過的修正等於沒被確認。與其上線後補救,不如在時程規劃時就把驗收時間預留進去。
7.5 工程團隊說內容都渲染得出來,為什麼我還要看原始碼
因為工程團隊看的通常是「檢查元素」也就是瀏覽器渲染後的最終畫面,那是使用者看到的版本;搜尋引擎最先讀到的卻是「檢視原始碼」的初始 HTML。兩者可能完全不同。一個前端渲染的頁面,在檢查元素裡內容俱全,在檢視原始碼裡卻可能只有一個空框架。這個落差正是我堅持親自看原始碼的原因,它是搜尋引擎與使用者視角差異最容易出事的地方。
7.6 這份清單多久要重新檢視一次
除了每次上線與改版必跑一輪,我建議至少每季對線上網站抽驗一次,因為網站是活的:內容持續新增、外掛更新、模板調整,都可能悄悄破壞原本合格的項目。特別是結構化資料與 canonical,常在改版或外掛更新後被無聲地改動。定期抽驗的目的是在問題影響到排名之前先攔下來,而不是等排名掉了才回頭找原因。
