TrueURL
TrueURL

選單

免費重新導向工具

Meta Refresh 重新導向檢查

並非所有重新導向都是 HTTP 狀態碼。TrueURL 會讀取重新導向鏈中每個頁面的 HTML,找出 meta refresh 標記和 JavaScript 重新導向,以及它們的目標網址與延遲時間。

什麼是 meta refresh 重新導向?

meta refresh(HTML 自動重新整理)是一種 HTML 標記,會告訴瀏覽器在指定的秒數後載入另一個網址:

<meta http-equiv="refresh" content="0; url=https://example.com/new-page">

延遲設為 0 時,它的行為就和一般的重新導向一樣。延遲較長時,訪客會先看到頁面,就像以前常見的「正在將您重新導向」頁面。JavaScript 重新導向則是以 location.href = '...' 或 location.replace('...') 等程式碼達成相同的效果。兩者都屬於用戶端重新導向:伺服器回應 200 OK,再由瀏覽器執行重新導向。

TrueURL 如何偵測用戶端重新導向

對於每個狀態為 2xx 的 HTML 回應,TrueURL 都會掃描頁面的前 256 KB,尋找 meta refresh 標記和簡單、無條件的 JavaScript 重新導向。作用與 meta refresh 相同的 Refresh HTTP 標頭也會一併偵測。找到之後,它會顯示該標記或指令碼片段、解析後的目標網址和延遲時間,將該躍點標示為 meta refresh 或 JavaScript,並從目標網址繼續追蹤重新導向鏈。只重新載入同一頁面的 refresh 不算重新導向,會直接略過。

您可以在進階設定中關閉任一類型的追蹤,以便查看頁面本身。TrueURL 不會執行 JavaScript:它會讀取頁面中的指令碼,辨識在頁面載入時一定會執行、指向固定網址的重新導向,不論是立即執行,還是位於最上層的 setTimeout 中。依條件而定(例如點擊、同意選擇或螢幕尺寸),或以程式碼組出目標網址的重新導向,則無法偵測。請使用 GET 而不是 HEAD,因為 HEAD 回應沒有可供掃描的主體。

搜尋引擎如何處理用戶端重新導向

  • 立即的 meta refresh(延遲 0):Google 會將它視為永久重新導向,就像 301 一樣。
  • 延遲的 meta refresh:視為暫時重新導向,因此原始網址往往會繼續保留在索引中。
  • JavaScript 重新導向:Google 要等到轉譯網頁後才會看到它們,而轉譯可能在檢索之後很久才進行。許多其他爬蟲和大多數連結預覽機器人則完全不會執行 JavaScript。

Google 建議只要能設定,就使用伺服器端重新導向,並以 meta refresh 作為備案,例如在無法送出 301 的靜態網站主機上。

無障礙與使用者體驗

定時重新導向是無障礙方面的問題:使用螢幕閱讀器的人,或只是閱讀速度較慢的人,會在頁面突然變換時失去閱讀位置。WCAG 將定時的 meta refresh 列為失敗案例(F40),而延遲為 0 的立即重新導向則是公認的技術(H76)。

如果必須在 HTML 中進行重新導向,請將延遲設為 0、加上指向新網址的 canonical 標記,並在頁面中放置一個可見的連結,供瀏覽器不會執行 refresh 的訪客使用。

相關指南

  • 閱讀時間 12 分鐘

    如何檢查網址轉址,並看懂重新導向鏈

    一步步用 TrueURL、curl 與 DevTools 檢查網址轉址,看懂重新導向鏈的每個躍點,並找出及修正重新導向迴圈、過長的重新導向鏈與 301/302 混用等常見問題。

    閱讀文章

常見問題

meta refresh 會像 301 轉址一樣傳遞 SEO 價值嗎?

Google 會將立即的 meta refresh(延遲 0)視為永久重新導向,因此實際上效果與 301 非常接近。延遲的 refresh 則會被視為暫時性的。其他爬蟲處理 meta refresh 的方式可能較不可靠,因此只要主機代管服務允許,請使用伺服器端的 301。

為什麼網頁在瀏覽器中會轉址,重新導向檢查工具卻顯示 200?

這是因為重新導向發生在網頁的 HTML 或 JavaScript 中,而不是在 HTTP 回應裡。只追蹤狀態碼的工具(例如 curl -L)會停在這個 200 頁面。TrueURL 會掃描頁面內容,並將用戶端重新導向顯示為一個獨立的躍點。

meta refresh 應該設定多少延遲?

如果目的是重新導向,就設為 0。任何延遲都會讓 Google 將它視為暫時重新導向,讓訪客空等,還會造成無障礙問題。只有在頁面必須先顯示訊息時,延遲才有意義,而且該頁面也應該提供清楚的連結,讓訪客繼續前往。

TrueURL 能偵測所有 JavaScript 轉址嗎?

不能,只能偵測頁面 HTML 中簡單、無條件且目標網址固定的重新導向,例如 location.href = '...'、window.location = '...' 或 location.replace('...'),位於最上層 setTimeout 中的也包括在內。位於外部指令碼檔案中、受條件限制、由使用者操作觸發,或以運算產生網址的重新導向,都需要實際的瀏覽器才能執行。如果重新導向鏈停在您明知會重新導向的頁面上,原因很可能就在這裡。

為什麼網站會使用 meta refresh,而不是 301 轉址?

通常是因為無法送出 HTTP 重新導向:例如沒有重新導向規則的靜態網站主機、網頁建置工具或老舊的 CMS。有些短網址服務和點擊追蹤器也會使用 HTML 重新導向,以便先執行分析指令碼,或控制目的地看到的參照網址(referrer)。

HEAD 要求能偵測 meta refresh 嗎?

不能。HEAD 回應只有標頭,沒有主體,因此沒有可供掃描的 HTML。使用 HEAD 檢查時,TrueURL 會發出警告;使用這項工具時請選擇 GET。