最近在想的事:HTTPS 安全標頭跟 SEO 到底有什麼關係?
最近在看一些伺服器設定的東西,然後就想到了這個問題... HTTPS 安全標頭 (Security Headers)。 🤔
網路上很多文章,有些寫得超級複雜,好像沒設定網站就會馬上被駭掉一樣;有些又說這對 SEO 超級重要,是 Google 排名關鍵。但說真的,感覺都有點誇大了。我自己的感覺是,這東西更像是在買保險。
你裝了,不代表排名會一飛沖天。 但是,如果你不裝,哪天網站真的出事,比如被塞了惡意程式碼、被拿去搞點擊詐騙 (Clickjacking),那對 SEO 的傷害可能就是毀滅性的。 所以,今天想用比較白話的方式,聊聊我的看法。
先說結論
搞這些安全標頭,我自己是覺得,主要目的不是為了「加分」,而是為了「不被扣分」。讓 Google 機器人和使用者覺得你的網站是個安全、可靠的地方。 很多時候,不出事,就是最好的 SEO。 就這麼簡單。
為什麼要聊這個?跟 SEO 的直接關聯是?
Google 很久以前就把 HTTPS 當作一個輕微的排名訊號了。 這大家都知道。但光有 HTTPS 的鎖頭其實不夠,安全標頭算是 HTTPS 的「強化包」。 它可以幫瀏覽器多加幾道防線,抵禦一些常見的網路攻擊。
從 SEO 的角度來看,關聯是間接的:
- 使用者信任感 (E-E-A-T): 當使用者的瀏覽器沒有跳出任何不安全的警告,他們對網站的信任感自然會比較高。 一個安全的環境會讓使用者更願意停留、互動,這些好的使用者體驗訊號,對排名是有正面幫助的。
- 防止負面 SEO: 如果你的網站被黑,內容被竄改,或被用來攻擊使用者,Google 很可能會把你的網站標示為「不安全」,甚至直接從搜尋結果中移除。 這時候再來補救就晚了。設定安全標頭就是預防這種慘劇發生。
- 網站速度: 有一個標頭叫 HSTS,它會強制瀏覽器直接用 HTTPS 連線,省掉一次從 HTTP 轉址到 HTTPS 的過程。 雖然只是毫秒之差,但對於追求極致速度的網站來說,也是一種優化。
所以,你說它跟排名有沒有直接關係?我覺得很難量化。但它肯定跟「建立一個高品質、值得信賴的網站」這件 Google 一直在強調的事有關係。
幾個重要的安全標頭,白話文解釋
安全標頭有很多,但不是每個都那麼緊急。國外像 OWASP (一個網路應用程式安全計畫組織) 就有完整的列表跟建議。 但我們挑幾個跟 SEO 和使用者體驗最相關的來講就好。這些設定通常是在你網站的伺服器設定檔(像 .htaccess 或 Nginx config)裡面加上幾行字而已。
| 標頭名稱 | 我的理解(白話文) | 對 SEO/使用者的好處 | 設定注意事項 |
|---|---|---|---|
| Strict-Transport-Security (HSTS) | 這傢伙最霸道,但也很可靠。它會跟瀏覽器說:「從現在開始一年內,你連到我這個網站,只能用 HTTPS,不准用 HTTP!」 | - 避免中間人攻擊,超安全。 - 少一次 301 轉址,速度快一點點。 |
設定前,要確定你「所有」的子網域都支援 HTTPS。不然那些子網域會連不上。 還有個 `preload` 選項,加了就很難反悔,要三思。 |
| Content-Security-Policy (CSP) | 最囉嗦的管家婆。它會嚴格規定網站上可以載入哪些來源的腳本、圖片、CSS...。不是白名單上的,一律擋掉。 | - 有效防止 XSS 跨站腳本攻擊。 網站比較不會被亂塞廣告或惡意程式碼。 | 超級麻煩!設定太嚴格,你網站的 Google Analytics、廣告、或是某些外掛可能會直接壞掉。 一定要先用 `Report-Only` 模式測試。 |
| X-Frame-Options | 很簡單,就是告訴所有瀏覽器:「別想用 ` | - 防止「點擊劫持」(Clickjacking) 攻擊。 避免使用者在不知情的狀況下,在假的透明頁面上點擊到你網站上的按鈕。 | 現在比較新的作法是用 CSP 的 `frame-ancestors` 指令來取代它,功能更強大。 但設定這個還是有好處,算是多一層保障。 |
| X-Content-Type-Options | 一個很專一的標頭。它會告訴瀏覽器:「我說這個檔案是文字檔,它就是文字檔,你不准自己亂猜把它當成腳本檔來執行!」 | - 防止瀏覽器「MIME 嗅探」造成的安全漏洞。 簡單說,就是降低被攻擊的風險。 | 這個最簡單,直接設 `nosniff` 就對了,幾乎沒什麼副作用。 |
設定這些會不會有什麼問題?
當然會。😂
特別是 CSP (Content Security Policy),真的是雙面刃。 我之前就遇過,為了讓 CSP 設定得超完美,結果反而把 Google Tag Manager (GTM) 的腳本給擋了,導致數據收不到。後來搞半天才發現是白名單沒設對。所以,真的不要一次就把規則訂到最嚴格。先用 `Content-Security-Policy-Report-Only` 這個模式跑一陣子,看看瀏覽器回報了哪些錯誤,再慢慢把規則加上去。
另一個是 HSTS (HTTP Strict Transport Security)。如果你把自己的網域加到「預載入清單」(preload list),那真的是一條不歸路。 因為它會被寫死在 Chrome、Firefox 這些主流瀏覽器的原始碼裡。萬一你哪天網站不想用 HTTPS 了(雖然不太可能),或是某個子網域出問題,那使用者就真的會完全連不上你的網站,而且你還沒辦法輕易修正。
那到底該不該做?
我的建議是,要做,但要有策略。
- 簡單的先做: `X-Content-Type-Options`、`X-Frame-Options` (或 CSP 的 `frame-ancestors`) 這些設定單純、風險低,可以先加上去。
- HSTS 慢慢來: 先設定一個比較短的 `max-age`,例如一個禮拜,確定網站所有東西(包含圖片、CSS、JS、所有子網域)都正常走 HTTPS 之後,再慢慢拉長時間到半年或一年。 不要一開始就申請 `preload`。
- CSP 當作長期目標: CSP 是個大工程。 如果你是用 WordPress 這類有很多外掛的系統,要設定好一個完美的 CSP 規則會很痛苦。可以先從一個比較寬鬆的規則開始,至少禁止 `unsafe-inline` 和 `unsafe-eval` 這些最危險的指令。
國外像 OWASP 都把這些列為基本功,台灣這邊... 我看像是政府網站,或是金融相關的服務,對於網站安全的要求也越來越高。 像是台灣網路資訊中心(TWNIC)或是一些提供 SSL 憑證的廠商,也都會推廣相關觀念。 這表示網站安全已經是個全球趨勢,不管從哪個角度看,提早準備總是好的。
總之,不要為了 SEO 而去設定安全標頭。而是要為了「打造一個更安全的網站」這個目標去做。當你的網站變安全了,使用者體驗變好了,Google 自然會更信任你。這才是對 SEO 最有幫助的地方。 👍
那你呢?你有檢查過自己網站的安全標頭嗎?用瀏覽器的開發者工具按 F12 看看吧,或是在下面留言你的網站,有空我幫你看一下 👀
