使用 target="_blank" 屬性連結至其他網站上的網頁時,可能會導致網站出現效能和安全性問題:
- 其他網頁可能與您的網頁在同一個程序中執行。 如果其他網頁執行大量 JavaScript,您的網頁效能可能會受到影響。
- 另一個網頁可透過
window.opener屬性存取window物件。 這可能會導致其他網頁將您的網頁重新導向至惡意網址。
在 target="_blank" 連結中加入 rel="noopener" 或 rel="noreferrer",即可避免這些問題。
Lighthouse 跨來源目的地稽核失敗的原因
Lighthouse 會標記連往跨原始來源目的地的不安全連結:
Lighthouse 會透過下列程序,將連結識別為不安全:
- 收集所有包含
target="_blank"屬性,但不包含rel="noopener"或rel="noreferrer"屬性的<a>標記。 - 篩除任何相同主機的連結。
由於 Lighthouse 會篩除相同主機的連結,因此在處理大型網站時,請留意以下特殊情況。如果一個網頁包含指向網站上其他網頁的 target="_blank" 連結,但未使用 rel="noopener",這項稽核的效能影響仍適用。不過,您不會在 Lighthouse 結果中看到這些連結。
提升網站效能並防範安全漏洞
在 Lighthouse 報表中的每個連結中加入 rel="noopener" 或 rel="noreferrer"。一般來說,使用 target="_blank" 時,請務必新增 rel="noopener" 或 rel="noreferrer":
<a href="https://examplepetstore.com" target="_blank" rel="noopener">
Example Pet Store
</a>
rel="noopener"可防止新網頁存取window.opener屬性,並確保新網頁在獨立程序中執行。rel="noreferrer"的效果相同,也會防止Referer標頭傳送至新網頁。
詳情請參閱「安全地共用跨來源資源」。