SEO 問題修正指南

這裡是免費 SEO 體檢報告裡每一個項目的實際做法:問題長什麼樣、怎麼改、以及改完之後怎麼確認真的生效。附可直接複製的範例。

全部免費,不需註冊。我們賣的是「跨整個網站把這些事做完」與「判斷哪些值得做」,不是把做法藏起來 — 你自己動手修完,對我們也是好事。

第一優先:這幾項沒過,這頁等於不存在

這一組的共同點是【零症狀】—— 網站在你自己瀏覽器裡完全正常,沒有錯誤訊息,Google 也不會寄信通知你。它只是安靜地不收錄這一頁。所以這幾項不主動檢查就不會發現,而且比任何內容問題都嚴重:後面三組都是在「已經被收錄」的前提下才有意義。

搜尋引擎索引許可

體檢報告上會看到:報告顯示「頁面帶有 noindex 標記」。

  1. noindex 可能藏在兩個地方,而且第二個在瀏覽器的「檢視原始碼」裡看不到:HTML 的 meta 標籤,以及伺服器回應的 X-Robots-Tag 標頭。檢查後者要開開發者工具的 Network 分頁,點第一個請求看 Response Headers。只找 HTML 沒找到就以為沒問題,是這一項最常見的誤判。
  2. WordPress 站先看「設定 → 閱讀 → 搜尋引擎可見度」那個勾選框。它是為了讓開發中的網站不被收錄而存在的,而上線時忘記取消勾選是這個症狀的頭號原因。
  3. Wix、Shopify、Webflow 各自有「隱藏此頁面」或「不允許搜尋引擎索引」的開關,位置不同但作用一樣,通常在單頁設定的 SEO 分頁裡。
  4. 如果是自己寫的網站,搜尋整個專案的 noindex 字串 —— 包含伺服器設定檔(nginx.conf、.htaccess)與 CDN 的回應標頭規則,不是只有樣板檔。
<!-- 允許收錄:把整行拿掉即可,不需要寫 index -->
<meta name="robots" content="noindex">   <!-- ← 刪掉這行 -->

怎麼確認修好了:重新體檢,這一項要顯示「沒有 noindex,允許被收錄」。接著到 Google Search Console 的網址審查工具貼上這一頁,確認狀態從「已排除:noindex」變成「可編入索引」,再按「要求建立索引」。狀態真的翻過來才算修好 —— 體檢通過只證明標籤沒了,不證明 Google 已經重新收錄。

正規網址 canonical

體檢報告上會看到:報告顯示 canonical「指向另一個網域」或「指向同站的另一頁」。

  1. 先確認這是不是刻意的。canonical 指向別頁只有一種正當用途:這一頁確實是另一頁的重複版本,例如帶排序參數的列表、列印版、或同一商品的不同顏色頁。如果是這種情況,維持現狀是對的。
  2. 若不是刻意的,通常是這三個原因之一:網站搬家後樣板寫死了舊網域;測試站複製到正式站時網址沒改;SEO 外掛的設定把全站 canonical 都指到首頁。第三種最難發現,因為每一頁單獨看都「有 canonical」。
  3. 正確的寫法是指向這一頁自己的正式網址。用絕對網址(含 https://),而且 www 的有無、結尾斜線的有無,都要跟你實際希望被收錄的網址一致 —— 不一致本身就會造成重複內容。
  4. 整站修的話,確認樣板是用「目前這一頁的網址」動態產生 canonical,而不是寫死一個常數。
<!-- 放在 <head> 裡,指向這一頁自己 -->
<link rel="canonical" href="https://example.com/your-page">

怎麼確認修好了:重新體檢,這一項要顯示「已宣告且指向這一頁本身」。在 Search Console 的網址審查裡,「使用者宣告的標準網址」與「Google 選擇的標準網址」兩欄要一致 —— 只看前一欄不夠,Google 有可能忽略你的宣告而選了別的網址,那代表問題還在。

robots.txt 設定

體檢報告上會看到:報告顯示 robots.txt「封鎖了所有爬蟲」,或「找不到 robots.txt」。

  1. robots.txt 一定放在網域根目錄,也就是 https://你的網域/robots.txt。放在子目錄完全沒有作用 —— 爬蟲只會讀根目錄那一份。
  2. 如果看到 Disallow: / 單獨一行且上面是 User-agent: *,那就是封鎖整站。開發階段常這樣設,上線時要改掉。
  3. 沒有 robots.txt 不會讓你不被收錄,Google 仍會照抓。但你因此失去兩件事:排除後台與搜尋結果頁這類不該被索引的路徑,以及宣告 sitemap 位址。建一份最小可用的即可。
  4. 不要用 robots.txt 來隱藏不想被看到的內容 —— 它只擋抓取,不擋收錄,而且檔案本身是公開的,等於把你想藏的路徑列成清單給所有人看。真的要擋要用 noindex 或登入牆。
User-agent: *
Disallow: /admin/
Disallow: /search
Allow: /

Sitemap: https://example.com/sitemap.xml

怎麼確認修好了:直接在瀏覽器開 https://你的網域/robots.txt,要看得到內容而不是 404。再用 Search Console 的 robots.txt 報告確認 Google 讀到的版本與你看到的一致 —— CDN 快取讓兩者不同步是很常見的狀況。

內容是否免 JS 就看得到

體檢報告上會看到:報告顯示伺服器回傳的 HTML 只有很少的可讀內容,而 script 佔了整頁大部分。

  1. 先自己驗證一次:在瀏覽器關掉 JavaScript 後重新載入這一頁,或直接用「檢視網頁原始碼」(不是開發者工具的 Elements 分頁 —— 那顯示的是 JS 跑完之後的結果,看不出問題)。如果原始碼裡找不到頁面上的文字,爬蟲看到的就是空殼。
  2. Google 確實會執行 JavaScript,但那是第二輪、排在資源允許的時候,而且不保證每頁都做。其他搜尋引擎與多數 AI 爬蟲則多半完全不執行。所以「Google 看得到」不等於沒問題。
  3. Next.js、Nuxt 這類框架把頁面改成伺服器端渲染(SSR)或靜態產生(SSG)即可。純前端框架(Create React App、Vue CLI)則需要加預渲染,或把重要頁面改成靜態輸出。
  4. 如果整站改架構不可行,退而求其次:至少讓 title、description、H1 與主要的段落文字直接寫在伺服器回傳的 HTML 裡,互動功能才交給 JS。

怎麼確認修好了:重新體檢,這一項要顯示伺服器回傳的 HTML 裡已經有足夠的可讀內容。另外用 Search Console 網址審查的「已檢索的網頁」看 Google 實際拿到的 HTML —— 那才是權威來源,比任何第三方工具準。

搜尋結果上長什麼樣

有了排名之後,決定「有沒有人點」的是這幾項。它們不會讓你從第 20 名跳到第 3 名,但同一個名次下,點擊率差兩三倍是常見的事。

標題 title

體檢報告上會看到:報告顯示沒有 title、太短,或超過 60 字會被截斷。

  1. 每一頁都要有自己的 title,而且要不一樣。整站共用同一個 title 是很常見的錯誤,結果是搜尋引擎無法分辨這幾頁的差異,通常只收錄其中一頁。
  2. 把最重要的詞放前面。搜尋結果會從尾端截斷,而且使用者掃視時只看得到前半段。
  3. 長度抓在 60 個字元以內。中文字在搜尋結果裡佔的寬度大約是英文的兩倍,所以中文標題實際上抓 28~30 字比較安全。
  4. 寫給人看,不要堆關鍵字。「台北牙醫 牙醫推薦 台北牙醫診所 植牙」這種寫法既不會提升排名,點擊率也差。
  5. 品牌名放在最後,用分隔線隔開 —— 前提是這一頁的主題已經說完了。
<title>大安區植牙推薦|自體骨移植與即拔即植 — 好口碑牙醫</title>

怎麼確認修好了:重新體檢確認長度與內容。要看 Google 實際顯示什麼,在搜尋框輸入 site:你的網址 就會看到 —— 值得注意的是 Google 有時會自行改寫標題,如果它一直不用你寫的那個,通常代表你的標題與頁面實際內容不符。

描述 meta description

體檢報告上會看到:報告顯示沒有 meta description,或長度不在 50~160 字之間。

  1. description 不是排名因素,Google 已多次公開說明這件事。它的作用是決定「有排名之後有沒有人點」—— 所以該用寫廣告文案的方式寫,不是用塞關鍵字的方式寫。
  2. 直接回答使用者的問題,並說出這一頁能給他什麼。沒寫的話 Google 會自己從內文抓一段,抓到的常常是導覽列或版權宣告。
  3. 長度抓 50~160 字元。同樣地,中文大約 70~80 字就會到上限。
  4. 每一頁寫不一樣的。整站共用同一段描述,等於放棄了每一頁各自的點擊機會。
<meta name="description" content="大安區植牙推薦。說明自體骨移植與即拔即植的差別、適合的條件與恢復期,並附上實際費用區間與常見風險。">

怎麼確認修好了:重新體檢確認長度。實際顯示效果一樣用 site: 查詢看 —— Google 會依搜尋字詞決定要用你寫的描述還是另外擷取一段,兩種都正常。

社群分享卡

體檢報告上會看到:報告顯示缺少 og:title 或 og:image。

  1. OG 標籤與 Google 排名無關,但它決定連結被貼到 LINE、Facebook、Threads 時長什麼樣。沒有的話只會是一行光禿禿的網址,點擊率差很多。
  2. og:image 用絕對網址,尺寸建議 1200 x 630。相對路徑在多數平台抓不到。
  3. og:title 可以和 title 不同 —— 社群上的分享卡不需要放品牌名和分隔線,直接講重點更好。
  4. 圖片檔案不要太大。多數平台有抓取逾時,超過就退回沒有圖的樣式。
<meta property="og:title" content="大安區植牙推薦:自體骨移植與即拔即植">
<meta property="og:description" content="適合的條件、恢復期與實際費用區間。">
<meta property="og:image" content="https://example.com/img/og-implant.jpg">
<meta property="og:url" content="https://example.com/implant">
<meta property="og:type" content="article">

怎麼確認修好了:用 Facebook 的分享偵錯工具(Sharing Debugger)貼上網址,會顯示各平台實際抓到什麼。改過之後要在同一個工具按「重新抓取」—— 各平台都有快取,不重抓會一直看到舊的。

結構化資料

體檢報告上會看到:報告顯示沒有 JSON-LD 結構化資料。

  1. 結構化資料不直接提升排名。它的用途是讓搜尋結果能顯示額外區塊(評分星等、常見問題展開、麵包屑),也讓 AI 搜尋更容易正確引用你的資訊。
  2. 用 JSON-LD 格式寫在 script 標籤裡,不要用舊的 microdata 把屬性散在 HTML 標籤上 —— 前者是 Google 明確建議的做法,也好維護得多。
  3. 從最基本的兩個開始:Organization(公司名、網址、logo、聯絡方式)與 WebSite。實體店家加 LocalBusiness,有問答內容加 FAQPage,文章頁加 Article。
  4. ★標記的內容必須與頁面上真的看得到的內容一致。標了 FAQPage 但頁面上沒有那些問答,是違反規範的,會被取消整站的複合式搜尋結果資格。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "好口碑牙醫診所",
  "url": "https://example.com",
  "telephone": "+886-2-1234-5678",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "台北市",
    "addressRegion": "大安區",
    "addressCountry": "TW"
  }
}
</script>

怎麼確認修好了:用 Google 的複合式搜尋結果測試工具貼上網址,要顯示偵測到的類型且沒有錯誤。警告可以先放著,錯誤一定要修 —— 有錯誤等於整段標記不生效。

頁面基礎

單獨看每一項影響都不大,但它們是搜尋引擎判斷「這個網站有沒有被好好維護」的累積訊號,而且多數改起來只要幾分鐘。

主標題 H1

體檢報告上會看到:報告顯示沒有 H1,或有多個 H1。

  1. 一頁一個 H1,內容是這一頁的主題。它和 title 可以不同:title 是寫給搜尋結果看的,H1 是寫給已經進來的人看的。
  2. 沒有 H1 最常見的原因是設計時用了大字級的 div 或 span 當標題。視覺上看起來一樣,但語意上搜尋引擎收不到任何主題訊號。
  3. 多個 H1 最常見的原因是網站 logo 用 H1 包起來,於是每一頁的 H1 都是公司名。改成用 div 或 p 包 logo,H1 留給頁面主題。
  4. 字級大小用 CSS 控制,不要為了讓標題變小就改用 H3 —— 標籤決定語意,CSS 決定外觀,兩件事分開。

怎麼確認修好了:重新體檢要顯示「恰好一個 H1」。也可以在開發者工具的 Console 執行 document.querySelectorAll('h1') 直接數。

標題層級

體檢報告上會看到:報告顯示標題層級有跳級,例如 h1 之後直接出現 h3。

  1. 標題層級是內容的大綱。h1 底下是 h2,h2 底下才是 h3 —— 跳級會讓搜尋引擎與螢幕報讀器判斷不出段落之間的從屬關係。
  2. 跳級幾乎都是為了外觀:想要小一點的標題就直接用 h3。改成用正確的層級標籤,再用 CSS 調整字級。
  3. 如果是外掛或佈景主題產生的標題造成跳級,多數佈景主題的區塊設定裡可以指定標題層級。

怎麼確認修好了:重新體檢要顯示「標題層級逐層遞進」。瀏覽器的無障礙檢查工具(Lighthouse 的 Accessibility 項目)也會列出同樣的問題。

行動版 viewport

體檢報告上會看到:報告顯示沒有 viewport meta。

  1. Google 用手機版的內容決定排名(mobile-first indexing),這是全站已經生效的預設。沒有 viewport,手機上會呈現縮小的桌機版,使用者要放大才讀得到。
  2. 加一行 meta 到 head 裡就好,這是整份報告裡投報率最高的一項修正。
  3. 不要加 maximum-scale=1 或 user-scalable=no —— 那會禁止使用者放大,是無障礙缺陷,Lighthouse 會扣分。
  4. 加了 viewport 之後版面若跑掉,代表 CSS 本來就沒有做手機版,那是另一件要處理的事,但不該因此把 viewport 拿掉。
<meta name="viewport" content="width=device-width, initial-scale=1">

怎麼確認修好了:重新體檢確認標籤存在,再用開發者工具的裝置模擬切到手機尺寸,看版面是否正常。

HTTPS 加密

體檢報告上會看到:報告顯示這一頁不是 HTTPS。

  1. HTTPS 是 Google 公開確認的排名因素之一,更直接的影響是瀏覽器會在網址列標示「不安全」,多數訪客看到就離開了。
  2. 憑證現在是免費的。多數主機商後台有一鍵啟用 Let's Encrypt 的選項;用 Cloudflare 的話在 SSL/TLS 設定裡開啟即可。
  3. 啟用之後要設定 http 到 https 的 301 轉向,否則兩個版本會同時存在,被當成重複內容。
  4. 轉向設好之後,把站內所有寫死 http:// 的連結一併改掉 —— 靠轉向能動,但每一次轉向都是多一次來回。

怎麼確認修好了:在瀏覽器輸入 http:// 版本的網址,要自動跳到 https:// 且網址列出現鎖頭。再重新體檢確認這一項通過。

混合內容

體檢報告上會看到:報告顯示有數個資源仍以 http:// 載入。

  1. HTTPS 頁面裡用 http:// 載入的圖片、CSS、JS 會被瀏覽器擋掉或警告,結果是圖片破圖、樣式壞掉,而且鎖頭圖示會消失。
  2. 開開發者工具的 Console,混合內容會直接列出是哪些網址,逐一改成 https:// 即可。
  3. 如果是資料庫裡的舊文章內容寫死了 http:// 圖片網址,用資料庫的字串取代批次處理 —— 動手前先備份。
  4. 第三方資源若對方不支援 https,只能換一家或把檔案下載回自己站上放。

怎麼確認修好了:重新體檢要顯示「沒有以 http:// 載入的資源」,且 Console 裡沒有 Mixed Content 警告。

語言宣告

體檢報告上會看到:報告顯示 html 標籤沒有 lang 屬性。

  1. 語言宣告讓搜尋引擎知道該把這一頁放進哪個語言的搜尋結果,也讓螢幕報讀器用正確的發音讀出來。
  2. 繁體中文用 zh-Hant(或 zh-TW),簡體用 zh-Hans。只寫 zh 不夠精確。
  3. 如果同一個網站有多語版本,除了各自的 lang,還要用 hreflang 標籤互相指向 —— 那是另一個主題,但兩者要一起做才完整。
<html lang="zh-Hant">

怎麼確認修好了:重新體檢要顯示 html lang 的值。

內容份量

體檢報告上會看到:報告顯示可見內容偏少(少於約 300 字)。

  1. ★字數不是目標。把「湊到 1000 字」當成任務,產出的是搜尋引擎與讀者都不需要的填充內容,通常比原本更糟。
  2. 正確的問法是:使用者搜到這一頁時想知道什麼,這一頁回答完了嗎。把實際會被問到的問題補齊,字數自然會到。
  3. 如果這一頁本來就沒什麼好講(例如只是分類的入口頁),那它可能不該是一個獨立的頁面 —— 併進上層頁通常比硬撐更好。
  4. 內容如果要靠 JavaScript 才出現,體檢會低估字數。先確認上面的「內容是否免 JS 就看得到」那一項有沒有通過。

怎麼確認修好了:重新體檢看字數。但這一項通過不代表內容夠好 —— 內容切不切合搜尋意圖,任何工具都判斷不了,這需要人看。

圖片替代文字

體檢報告上會看到:報告顯示部分圖片缺少 alt 屬性。

  1. alt 讓搜尋引擎讀懂圖片內容,也是視障使用者唯一能取得圖片資訊的方式。圖片搜尋的流量也來自這裡。
  2. 描述圖片實際的內容,不要塞關鍵字。「植牙手術前後對比照」是好的,「台北植牙 植牙推薦 牙醫」不是。
  3. 純裝飾用的圖片(背景花紋、分隔線)要寫成空的 alt="",不是省略不寫。空 alt 明確告訴螢幕報讀器「跳過這張」,省略則會讓它去唸檔名。
  4. WordPress 在媒體庫每張圖片都有替代文字欄位,補在那裡會套用到所有引用處。
<img src="https://example.com/img/implant-before-after.jpg" alt="植牙手術前後的口腔對比照">
<img src="https://example.com/img/divider.svg" alt="">

怎麼確認修好了:重新體檢確認缺少的數量歸零。Lighthouse 的 Accessibility 項目也會逐一列出。

meta refresh 轉向

體檢報告上會看到:報告顯示這一頁用 meta refresh 轉向到另一個網址。

  1. meta refresh 是舊式的轉向寫法。搜尋引擎對它的權重傳遞不如 301,而且使用者按「上一頁」會被立刻彈回來,等於困住。
  2. 真的要轉向請用伺服器端的 301(永久)或 302(暫時)。Nginx、Apache、Cloudflare Rules 都做得到,靜態站台的主機商多半也有轉向設定。
  3. 如果只是想在幾秒後帶使用者去別的地方(例如「訂單成立,即將返回首頁」),那不是轉向而是介面行為,用 JavaScript 做並提供一個可以直接點的連結。
# Nginx
return 301 https://example.com/new-page;

# Apache .htaccess
Redirect 301 /old-page https://example.com/new-page

怎麼確認修好了:用開發者工具的 Network 分頁看第一個請求的狀態碼,要是 301 而不是 200。重新體檢時這一項應顯示「沒有使用 meta refresh 轉向」。

sitemap 宣告

體檢報告上會看到:報告顯示 robots.txt 沒有宣告 Sitemap 位址。

  1. sitemap 是你主動告訴 Google「我有哪些頁」的清單。沒有它 Google 仍會靠連結慢慢發現,但新頁與深層頁會慢很多。
  2. WordPress 內建就會產生 /wp-sitemap.xml,Yoast、Rank Math 這類外掛也會各自產生一份。先確認你的站實際是哪一個網址。
  3. 在 robots.txt 加一行 Sitemap: 完整網址。用絕對網址,一份 robots.txt 可以列多行。
  4. ★sitemap 只是告知存在,不傳遞權重。一個頁面若沒有任何站內連結指向它,就算在 sitemap 裡也很難有排名 —— 這兩件事要一起做。
Sitemap: https://example.com/sitemap.xml

怎麼確認修好了:重新體檢要顯示「robots.txt 裡有宣告 Sitemap 位址」。再到 Search Console 的 Sitemap 頁面提交一次,狀態要顯示「成功」並列出已讀取的網址數量 —— 提交後顯示「無法讀取」是常見狀況,通常是網址打錯或被 robots.txt 自己擋住。

AI 搜尋能見度

流量不再只從搜尋結果的藍色連結來。這一項與傳統 SEO 無關 —— 擋掉 AI 爬蟲不會影響 Google 排名,所以它比前面幾項更容易被忽略好幾年。

AI 搜尋爬蟲存取

體檢報告上會看到:報告列出 robots.txt 封鎖了哪幾個 AI 爬蟲。

  1. ★先確認這是不是刻意的。不想讓自己的內容被 AI 拿去訓練或引用,是完全合理的立場 —— 那樣的話維持現狀就好,這一項對你不是問題,是取捨。
  2. 如果不是刻意的,多半是 CDN 的「封鎖 AI 爬蟲」開關、資安外掛的預設值,或是複製別人的 robots.txt 範本帶進來的。Cloudflare 有一個一鍵封鎖 AI 爬蟲的設定,開了之後 robots.txt 不會變,是在邊緣直接擋 —— 這種情況要去 CDN 後台看,不是改檔案。
  3. 要開放的話,把 robots.txt 裡對應的 User-agent 區塊移除。常見的有 GPTBot(ChatGPT)、ClaudeBot、PerplexityBot、Google-Extended(Google AI 概覽與 Gemini)。
  4. ★分清楚兩件事:Google-Extended 只控制 AI 用途,擋掉它不影響一般 Google 搜尋排名;但如果擋的是 Googlebot 本身,那是整站不被收錄,屬於上面第一組的問題。
# 只擋 AI、保留一般搜尋
User-agent: Google-Extended
Disallow: /

# 全部開放:把上面這種區塊整段刪掉即可

怎麼確認修好了:重新體檢要顯示「robots.txt 沒有封鎖 AI 搜尋的爬蟲」。若是 CDN 邊緣封鎖,robots.txt 看起來會是乾淨的但實際仍被擋 —— 要到 CDN 後台確認開關狀態,這是體檢工具讀不到的部分。

這份指南不包含什麼

上面每一項都是技術基礎 — 全部做完,代表你的網站在搜尋引擎面前沒有明顯的障礙。但技術基礎是門檻不是優勢:它讓你有資格被排名,不決定你排第幾。

真正決定名次的三件事,這份指南與任何自動化工具都給不了答案:

  • 該做哪些關鍵字 — 要看實際搜尋量、競爭強度,以及那些搜尋的人是不是你的客戶。搜尋量最大的詞往往最不值得做。
  • 搜尋結果上現在是誰 — 前十名的頁面型態決定了你該產出什麼。如果第一頁全是比較清單,你放一頁商品介紹上去不會有機會。
  • 你自己的 Search Console 資料 — 哪些頁有曝光沒點擊、哪些關鍵字排在第 8 到 15 名(那是投報率最高的一段)、哪些頁被排除在索引外。這些只有你的帳號看得到。

我們不販售保證排名的方案,也不提供假評論。任何人向你保證特定名次,都請直接跳過 — 排名的決定權在 Google,不在服務商手上。

改完了,再測一次

不需註冊。體檢不會保存你查詢的網址,只支援可公開連線的網站。

看不懂報告,或想請人處理?

留下聯絡方式,我們會回覆可行的做法與範圍 — 先看清楚要做什麼、要花多少,再決定要不要合作。

用來判斷哪些做法對你實際可行 — 不影響我們回不回覆你。

我們不販售保證排名的方案,也不提供假評論。