rel=noreferrer noopener 到底該不該加?網站設計師一定要懂的資安與 SEO 真相

⚠️ 意想不到的資安警告

近期有個網站設計專案,剛好內容裡放了一條 Google Map 的外部連結

照理說這只是再常見不過的小功能,卻在弱掃報告裡被挑出了警告
因為 target="_blank" 沒有加上 rel="noreferrer noopener"

認真研究發現,這似乎只是語法上的小細節,但它為什麼會被資安工具點名?
難道一個不起眼的超連結屬性,真的可能影響到網站安全,甚至 SEO 表現?

先搞懂 rel=”nofollow noopener noreferrer” 是什麼

在進入資安與 SEO 的討論之前,我們先釐清「這三個屬性到底是什麼意思」。
rel 代表 relationship (關係),用來描述目前文件與連結資源的關係。最常見的例子是:

<link rel="stylesheet" href="/style.css">

這代表引入的檔案與文件之間是「樣式表」的關係。
rel 被用在 <a> 標籤裡,就能透過不同的屬性值,指定連結的「行為規則」。

✅ 適用情境

  • 廣告或贊助連結: 當連結來源屬於商業推廣或置入內容時,務必加上 rel="noreferrer noopener"
  • 使用者留言中的外部網址: 留言區的連結可能來自未知來源,加上 rel 屬性能避免潛在資安風險。
  • 不熟悉、無法保證品質的交換連結: 若對方網站內容不明確或缺乏可信度,建議保護自己網站的同時加上 rel 屬性。

rel=”nofollow” 是什麼?

nofollow 是 Google 在 2005 年推出的一個連結屬性,目的是為了防止垃圾連結(spam links)污染搜尋結果
它的作用很直接:告訴搜尋引擎「我放了這個連結,但我不替它背書」。

為什麼會有這東西?
早期很多人會在留言板、論壇、甚至部落格底下瘋狂貼外部連結,想靠這些「假推薦」騙取 Google 排名。
於是 Google 推出了 rel="nofollow",讓網站管理者能主動告訴搜尋引擎:

「這個連結只是附上參考,不代表我信任它。」

🍊 小提醒:不是所有外部連結都要加 nofollow

👉 但是,如果今天你的文章裡放的是 維基百科、Google 官方文件,甚至 政府單位網站, 那這種高權重網站就不用加 nofollow

因為這類網站就像「全班公認的學霸」一樣,引用他們只會讓你的文章更有說服力, Google 也會覺得你有參考正統資料。

相反地,廣告連結或陌生網站才需要 nofollow, 因為誰知道對方會不會突然「變壞學生」把你拖下水呢?😅

rel=”noopener” 是什麼?

(▲ 圖片經過仿製,概念來源:thesecuritybuddy)

noopener 的用途是 阻止新分頁透過 window.opener 回頭控制原分頁
它主要是為了防範資安風險,特別是 tabnabbing 攻擊(後面會深入介紹)。

範例:

<a href="https://example.com" target="_blank" rel="noopener">安全外部連結</a>

這樣設定後,外部網站就無法透過 JavaScript 操作你的網頁。

為什麼 target=”_blank” 會被列為資安警告?

白話一些的解釋就是:如果你在連結裡加上 target="_blank", 意思就是「開新分頁顯示」。聽起來很方便,因為這樣使用者就能一邊瀏覽外部網站,一邊保留你原本的頁面。

但問題來了!新開的分頁其實會透過一個叫 window.opener 的東西,拿到「回頭控制」你網頁的權限。 這代表什麼?想像一下👇

  // 在新開的分頁中
  window.opener.location = 'https://fake-login.com';
  

結果?使用者再切回你的網站分頁時,畫面早就被換成假登入頁,還以為自己還在原網站,乖乖輸入帳密…… 這就是所謂的 tabnabbing 攻擊。 聽起來是不是很驚悚?😨 而且更糟的是,這種攻擊根本不需要駭客多厲害, 任何人都能複製一段程式碼就做到。

所以 rel="noopener" 的作用,就是在告訴瀏覽器: 「嘿!新分頁別想回頭碰我!」 一旦加上這個屬性,新開的頁面就完全失去對舊頁的控制權,大幅降低被 tabnabbing 的風險。

👉 簡單來說: noopener 就像你幫網站裝了一道防火門, 新分頁再怎麼吵鬧,也燒不回你的主網站 🔥。

rel=”noreferrer” 是什麼?

noreferrer 的作用是 不傳送 HTTP Referer header
當使用者從你的網站點出去,目標網站通常可以看到「來源網址」是誰。
如果加上 noreferrer,對方就無法得知流量來自哪裡。

這樣做對隱私保護很好,但同時也會帶來一個問題:
網站分析工具(例如 Google Analytics)會失去正確的 referral data,流量會被歸類成「直接流量 (direct)」。

🌿 noreferrer 是什麼?

白話一點,其實它的功能很單純: 不要讓對方知道你是從哪裡來的

當你加上 rel="noreferrer" 時, 對方網站就看不到「引用來源」(Referrer),也就是不會知道你是從哪個頁面點過來的。 這在保護使用者隱私、或避免外部網站蒐集行為資料時特別有用。

🌱 小結: noopener 負責防止被控制、noreferrer 負責隱藏你的身分。 兩者常常搭配一起使用,就是我們常見的 rel="noreferrer noopener"

一般來說,當使用者從你的網站點一個外部連結,目標網站會在 HTTP 請求的 Referer 標頭裡看到來源資訊。

📘 舉例

  • 情境:你在自己的文章裡放了一個連去 example.com 的連結。
  • 結果:使用者點擊後,example.com 就能知道「流量來自你這個網頁」。

有些時候,這會造成隱私或商業上的顧慮。
比方說:

  • 你寫了一篇分析「網站設計價格」的文章,裡面連到某家報價系統。
  • 對方一看 Referer 就知道你在比較他們的價格, 這感覺是不是有點赤裸裸?😅

這時候 rel="noreferrer" 就派上用場了。它能讓對方完全看不到來源網址,保護使用者隱私,也避免洩漏太多商業資訊。

⚠️ 注意這個小陷阱

不過,這裡有個小陷阱:
如果你加了 noreferrer, Google Analytics 或其他流量分析工具就收不到正確的來源, 會把這些點擊全都算進「直接流量 (direct)」。

換句話說,你原本想追蹤「有多少人是從某篇文章點去外部網站的」,結果數據被吃掉了。

👉 換句話說: noreferrer 就像幫使用者戴上墨鏡、換了套衣服偷偷溜出去, 對方根本不知道他是從哪來的。
但同時,你自己的監視器也拍不到他的背影了。

範例:
<a href="https://example.com" target="_blank" rel="noreferrer">不洩漏來源的連結</a>

三者的差異與組合

屬性功能說明簡單記法適用情境
nofollow不傳遞 SEO 權重「我貼這連結,但不代表我幫他背書」廣告、贊助、留言、交換連結
noopener阻止新分頁控制原分頁,防止 tabnabbing 攻擊「你可以開新門出去,但別想回頭亂動我家」所有 target="_blank" 外部連結
noreferrer不傳送 Referer header,隱藏來源資訊,同時具備 noopener 效果「我幫你戴墨鏡偷偷出門,沒人知道你從哪來」不想洩漏來源的外部連結(但避免用在內部連結)

實務上,三者經常組合使用,例如:

<a href="https://example.com" target="_blank" rel="noopener noreferrer nofollow">外部連結</a>

這一行的意思是:

不傳遞 SEO 權重
(rel=”nofollow”)
阻止新分頁操控原頁
(rel=”noopener”)
不洩漏來源資訊
(rel=”noreferrer”)

這樣一來,SEO、資安與隱私三個層面都被照顧到。

資安風險:為什麼需要 noopener?

(圖片來源:網頁開發雜記)

window.opener 的機制

當一個連結使用 target="_blank" 開新分頁時,瀏覽器會自動建立一個 window.opener
這代表新開的分頁其實可以「回頭」對原分頁下指令。

對一般使用者來說,這幾乎是隱形的機制,不會察覺到有什麼風險。
但對駭客而言,這就是一個後門。

🍊 我的小故事

這讓我想起,我早期在開發一個功能的時候,剛好在玩「子視窗控制父視窗」這個技巧。那時候透過這樣的方式我可以操控原本的頁面,傳值、更新狀態、甚至觸發事件。

不過後來透過這次研究我才知道,window.opener 的延伸應用,對於有心人士來說是一個極具威脅的工具!惡意網站甚至能「反控制」你的主頁面。

對一般使用者來說,這幾乎是隱形的機制,不會察覺到有什麼風險;但對駭客而言,這正是一個可以被利用的後門。

Tabnabbing 攻擊案例

⚠️ 想像一個真實情境:典型的 tabnabbing 攻擊

你的網站裡放了一個連結,使用者點擊後在新分頁專心瀏覽外部網站,完全沒注意舊分頁的狀態。
在這段空檔,惡意網站透過 window.opener 偷偷下了一段程式碼:

  // 在新開的分頁中執行
  window.opener.location = 'https://fake-login.com';
  

結果:你的網站分頁畫面瞬間被換成「假登入頁」。等使用者切回來時,還以為自己仍在原網站,可能就會乖乖輸入帳號密碼這就是 「tabnabbing」 攻擊。

更可怕的是,駭客常加入延遲觸發(例如幾十秒或一分鐘後才跳轉),讓使用者更難察覺異常,等回頭時已中計。

防護重點:在所有外部連結加上 rel="noopener noreferrer"(若為付費/廣告連結,另加 nofollow),即可切斷新分頁對舊頁的回控。

為什麼這麼危險?

⚠️ 攻擊風險要點

  • 低技術門檻:這種攻擊方式程式碼超簡單,幾乎任何人都能複製。
  • 高隱蔽性:使用者大多專注在新分頁,不會注意舊分頁發生了什麼。
  • 嚴重後果:一旦被用來導向釣魚頁,損失的不只是使用者帳號,還可能拖垮品牌信任。

換句話說,只要少了一個 rel="noopener",就等於留了一個讓駭客「偷換門面」的機會。

瀏覽器的補救:預設 noopener

💡 注意

  • 好消息是:瀏覽器也意識到了這個風險。
  • Chromium 88 起:(含新版 Chrome、Edge)所有 target="_blank" 預設會隱含 rel="noopener"
  • 其他瀏覽器:Firefox 52 與 Safari 10.1 之後也陸續採用相同保護機制。

這代表在大多數現代瀏覽器裡,其實已經自動具備防護機制。以今天 (2025/10/05) 來看, Google Chrome 已經進展到 140 版, 早就把這個保護當成「預設行為」,所以在最新環境裡幾乎不會再出現舊時代的 tabnabbing 風險。

所以從「實務必須性」角度來說,如果你的專案主要受眾都在使用最新版本的 Chrome、Edge、Firefox、Safari,那麼就算沒寫 rel="noopener",也不會立刻暴露在風險之下。

🔒 保守派的建議

不過,如果你是比較保守、想要在細節上更完整的人,或是需要過弱掃機器的人,還是建議顯式寫上。這麼做的好處有三:

  • 1. 兼容老舊環境:IE、Edge Legacy、舊版 Safari 仍可能存在。
  • 2. 語意明確:讓看到程式碼的人一眼知道有資安考量。
  • 3. Lighthouse 不會跳警告:Google 工具仍會判斷 target="_blank" 沒有 rel 是不安全的。

👉 換句話說,在 2025 年的今天,「已經不是一定要加」,但如果想把細節做到位,還是加上 rel="noopener" 比較保險。

SEO 與網站經營的考量

nofollow:要不要幫對方背書?

前面提過,Google 把外部連結視為一種信任背書。
你在網頁裡放了一個連結,就等於替對方網站投了一票。
如果對方是維基百科、Google 官方文件、政府單位,這類高權重網站,那完全不用擔心,因為引用這些內容反而能增加你文章的可信度與 EEAT。

但如果是廣告、贊助合作,或者你無法確保品質的交換連結,那就一定要加上 nofollow
簡單來說:

  • 信任的來源 → dofollow(不加 nofollow)
  • 廣告或陌生來源 → nofollow

noreferrer:隱私與數據的兩難

noreferrer 能保護使用者隱私,不讓外部網站知道流量來源。
聽起來很好,但問題在於:
一旦加上 noreferrer,你的 Google Analytics 等分析工具就失去「流量來源」資訊,這些點擊會被歸到「直接流量 (direct)」。

因此,建議做法是:

  • 內部連結 千萬不要加 noreferrer,否則 Google 會失去網站架構的脈絡。
  • 外部連結 視需求決定,如果很在意隱私或不想暴露商業行為,可以加上;但如果需要追蹤轉換,就別加。

💡 進階補充:關於聯盟行銷(Affiliate Marketing)

絕大多數聯盟行銷平台,都是靠你專屬的 ID 參數(例如 aff_id=xxx)在 URL 進行歸因。只要使用者點擊的連結中包含這個 ID,不論是否有加 noreferrer,佣金都會照常被計算。換句話說,noreferrer 不會讓你拿不到錢。

但也有少部分較舊或客製化的聯盟系統,仍然依賴 HTTP Referer 來判斷來源。如果該平台明確要求「必須能看到來源網址」才能認定有效轉換,那這時候就不建議使用 noreferrer,否則可能會導致漏算佣金。

建議做法

  • 內部連結:千萬不要加 noreferrer,否則 Google 會失去網站架構的脈絡。
  • 外部連結:視需求決定。如果你很在意隱私或不想暴露商業行為,可以加上;但若連結涉及行銷追蹤、轉換或聯盟收益,就建議不要加。

noopener:SEO 沒有影響,但安全必須有

從 SEO 的角度來看,noopener 沒有任何正負影響。
它單純只影響瀏覽器的行為,不會改變 Google 爬蟲的收錄或排名。
所以這個屬性你可以放心使用,既不會影響 SEO,又能保護資安。

👉 這樣安排,工程師、行銷人員、SEO 負責人都能找到各自該注意的點。

開發實務與工具支援

WordPress 與其他 CMS 的預設保護

如果你有用 WordPress 這類框架,會發現很多時候系統會自動幫你補上 rel="noopener"
這是因為框架開發者早就知道這是資安常見問題,所以乾脆把「安全預設」內建在系統裡,讓網站管理員不用額外記。

換句話說,如果你用 CMS 產生連結,它通常已經替你做了最小限度的保護。
不過,是否加上 nofollownoreferrer,仍需要根據 SEO 與隱私需求手動調整。

前端工程師與 SEO 團隊的協作

這些屬性看起來只是「一行 HTML」,但實際上往往是 工程師 + 行銷 + SEO 團隊 必須一起協作的議題。

👥 不同角色的重點關注

  • 工程師:確保網站沒有資安漏洞(noopener
  • 行銷 / SEO:確保追蹤數據正確(noreferrer 與否),避免漏掉來源分析
  • 網站經營者:確保外部連結符合 Google 規範(nofollow

換句話說,這個小細節其實就是「網站設計專案中的跨部門協作縮影」。

小細節,其實是大課題

在網站設計專案裡,很多人常常忽略 rel="nofollow noopener noreferrer",覺得它只是語法細節,甚至只是「看起來專業」的裝飾。
但深入研究後會發現,這個小屬性背後其實牽涉到三個領域:

  • 資安:沒有 noopener,你的網站可能暴露在 tabnabbing 攻擊中,讓使用者掉進釣魚陷阱。
  • 隱私與數據:加了 noreferrer 可以保護使用者隱私,但同時會犧牲 GA 的流量來源追蹤。
  • SEOnofollow 則影響「要不要幫別人背書」,廣告、贊助一定要加,可信來源則可以不用。

雖然現代瀏覽器(像 Chrome 已經來到 140 版)大多已經預設防護了,但對於一個專案來說,是否顯式加上 rel,往往是「你有沒有做到細節」的象徵。

對工程師來說,這是資安習慣;對行銷與 SEO 來說,這是數據與規範;對網站經營者來說,則是專業感的展現。

👉 換句話說,這個屬性雖然小,卻是一道跨越資安、SEO、隱私三合一的考題。

如果你是講求完整性的網站設計師,建議養成習慣:凡是 target="_blank" 的外部連結,都先想清楚「這三個屬性要不要加」,讓你的專案不只漂亮,還能兼顧安全、數據與信任。

💬 一起讓這篇文章更完整

如果你有實務上的經驗或不同觀點,
也歡迎留言交流。
若我有哪裡說得不夠精準,也請不吝指教,
一起讓這篇文章更完善、讓知識更具延伸價值。

我要留言分享觀點

返回頂端