[ad_1]
網站會更改結構,刪除頁面,並且經常從一個域移動到另一個域。處理方式 重新導向 為了避免失去排名並幫助搜索引擎了解您所做的更改,正確正確至關重要。
重定向的狀態碼以數字3(即3XX)開頭。有 100種不同 可能的狀態碼,但只有一個 很少實施 攜帶某些信息。
在本指南中,我們將介紹與SEO相關的3XX重定向。
301:永久移動
此眾所周知的重定向向客戶端*指示資源已更改到另一個位置,並且它應將新的URL用於以後的請求。當搜索引擎看到301重定向時,它們會將舊頁面的排名傳遞給新頁面。
進行更改之前,在決定使用301重定向時需要小心。這是因為如果您以後改變主意並決定刪除301重定向,則舊的URL可能不再排名。
即使您交換了重定向,也無法幫助您將舊頁面恢復到之前的排名位置。因此,主要要記住的是,無法撤消301重定向。
(*對於可能與通用名稱混淆的初學者,將使用客戶端而不是瀏覽器,因為不僅瀏覽器能夠瀏覽URL,而且搜索引擎機器人不是瀏覽器。)
307:臨時重定向
在HTTP 1.1中,301重定向表示資源已臨時移動,客戶端應將原始資源的URL用於以後的請求。
對於SEO,這意味著客戶端應遵循重定向,但搜索引擎不應將其SERP中的鏈接更新到新的臨時頁面。
在307重定向中,PageRank不會從原始資源傳遞到新資源–與301重定向相反。
302:發現
這意味著客戶端正在尋找的資源是在HTTP 1.1版本的另一個URL上找到的,但已在HTTP 1.0中臨時移動了。
302和307
在幾乎所有情況下,302和307重定向都將是 對待一樣。但是302狀態代碼並不一定意味著客戶端必須遵循重定向,並且如果它決定呆在那裡,也不會被視為錯誤。
現代客戶很可能會跟隨新的目的地,但是一些老客戶可能會錯誤地停留在相同的URL上。
與302狀態代碼相反,307狀態代碼保證不會更改請求方法。例如,GET請求必須繼續進行GET和POST到POST。
使用302狀態代碼,一些舊的或有漏洞的客戶端可能會更改方法,這可能會導致意外行為。
對於臨時重定向,您可以使用302或307-但我更喜歡307。
對於例行重定向任務,應使用301(永久重定向)和307(臨時重定向)狀態碼,具體取決於您在網站上實施的更改類型。在兩種情況下,重定向的語法都不會改變。
您可以通過Apache上的伺服器配置文件.htaccess,Nginx上的example.conf文件或通過插件(如果使用WordPress)來處理重定向。
在所有情況下,它們都具有用於編寫重定向規則的相同語法。它們僅與配置文件中使用的命令不同。例如,在Apache上的重定向將如下所示:
選項+關注符號鏈接
在RewriteEngine上
重定向匹配301 ^ / oldfolder / / newfolder /
(您可以閱讀有關符號鏈接的信息 這裡 )。
在Nginx伺服器上,它看起來像:
重寫^ / oldfolder / / newfolder /永久;
用於告知伺服器狀態碼重定向的命令和操作命令不同。例如:
- 重定向伺服器的狀態碼:「 301」與「永久」
- 動作命令:「 RedirectMatch」與「 rewrite」。
但是重定向的語法(^ / oldfolder / / newfolder /)都相同。
在Apache上,確保在伺服器上啟用了mod_rewrite和mod_alias模塊(負責處理重定向)。
由於使用最廣泛的伺服器類型是Apache,因此以下是.htaccess apache文件的示例。確保.htaccess文件具有這兩行:
選項+關注符號鏈接
在RewriteEngine上
置於重定向規則上方,並將規則置於其下方。
要了解以下示例,您可以參考以下表格: 正則表達式 基本。
* | 零次或多次 |
+ | 一次或多次 |
。 | 任何單個字元 |
? | 零次或一次 |
^ | 字元串的開始 |
$ | 字元串結尾 |
a | b | OR運算符「 |」 a或b |
(z) | 記住調用$ 1時要使用的匹配項 |
重定向單個URL
刪除頁面或更改頁面URL時使用的最常見且使用最廣泛的重定向類型。例如,假設您將URL從/ old-page /更改為/ new-page /。重定向規則為:
RewriteRule ^ old-page(/?| /.*)$ / new-page / [R=301,L]
要麼
重定向匹配301 ^ / old-page(/?| /.*)$ / new-page /
兩種方法之間的唯一區別是,第一種使用Apache mod_rewrite模塊,第二種使用mod_alias。可以使用兩種方法來完成。
正則表達式「 ^」表示URL必須以「 / old-page」開頭,而(/?|/.*)$表示必須重定向「 / old-page /」後跟斜杠「 /」或不完全匹配的任何內容。到/ new-page /。
我們也可以使用(。*),即^ / old-page(。*),但是問題是,如果您有另一個具有類似URL的頁面,例如/ old-page-other /,則當我們只想重定向/ old-page /。
以下URL將匹配並定向到新頁面:
/舊頁/ | /新一頁/ |
/舊頁 | /新一頁/ |
/old-page/?utm_source=facebook.com | /new-page/?utm_source=facebook.com |
/ old-page / child-page / | /新一頁/ |
它將頁面URL的任何變體重定向到一個新的頁面。如果我們以以下形式使用重定向:
重定向301 /舊頁面/ /新頁面/
…如果沒有正則表達式,則所有具有UTM查詢字元串的網址,例如/old-page?utm_source=facebook.com(這是很常見的,因為URL通常用於在社交網路上共享),最終將以404開頭。
甚至沒有尾部斜杠「 /」的/ old-page也會以404結尾。
重定向所有除外
假設我們有很多URL,例如/ category / old-subcategory-1 /,/ category / old-subcategory-2 /,/ category / final-subcategory /,並且希望將所有子類別合併到/ category / final-subcategory /。我們在這裡需要「所有除外」規則。
RewriteCond%{REQUEST_URI}!/ category / final-subcategory /
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule ^(類別/)。 / category / final-subcategory / [R=301,L]
在這裡,我們要重定向第三行/ category /下的所有內容,除非第四行是/ category / final-subcategory /。第二行還有「!-f」規則,這意味著忽略任何文件,例如圖像,CSS或javascript文件。
否則,如果我們擁有諸如「 /category/image.jpg」之類的資產,它也將被重定向到「 / final-subcategory /」並導致圖像中斷。
目錄變更
如果您進行了類別重組,並且想要將舊目錄下的所有內容都移動到新目錄中,則可以使用以下規則。
RewriteRule ^舊目錄$ /新目錄/ [R=301,NC,L]
RewriteRule ^舊目錄/(.*)$ /新目錄/ $ 1 [R=301,NC,L]
我在目標伺服器中使用$ 1告訴伺服器,它應該記住/ old-directory /之後的URL中的所有內容(即/ old-directory / subdirectory /),並將其(即「 / subdirectory /」)傳遞到目的地。結果,它將被重定向到/ new-directory / subdirectory /。
我使用了兩個規則:一種情況是末尾沒有斜杠,另一種情況是有斜杠。
我可以在末尾使用(/?|.*)$ RegExp將它們組合為一條規則,但是當所請求的沒有尾部斜杠的URL有查詢字元串時,這會引起問題並在URL末尾添加「 //」斜杠(即,「 / old-directory?utm_source = facebook」將被重定向到「 / new-directory //?utm_source = facebook」)。
從網址中刪除單詞
假設您的網站上有100個網址,城市名稱為「芝加哥」,並且想要將其刪除。
例如,對於URL http://yourwebiste.com/example-chicago-event/,重定向規則為:
RewriteRule ^(。*)-芝加哥-(。*)http://%{SERVER_NAME} / $ 1- $ 2 [NC,R=301,L]
如果示例URL的格式為http:// yourwebiste.com/example/chicago/event/,則重定向將為:
RewriteRule ^(。*)/芝加哥/(.*)http://%{SERVER_NAME} / $ 1 / $ 2 [NC,R=301,L]
規範化
擁有規範的URL是SEO最重要的部分。
如果丟失,您可能會因為重複的內容問題而危及您的網站,因為搜索引擎會將具有「 www」和「非www」版本的URL視為具有相同內容的不同頁面。
因此,必須確保僅使用所選的一個版本來運行網站。
如果要使用「 www」版本運行網站,請使用以下規則:
RewriteCond%{HTTP_HOST} ^ yourwebsite .com [NC]
RewriteRule ^(。*)$ http://www.yourwebsite.com/$1 [L,R=301]
對於「非www」版本:
RewriteCond%{HTTP_HOST} ^ www .yourwebsite .com [NC]
RewriteRule ^(。*)$ http://yourwebsite.com/$1 [L,R=301]
尾部斜杠也是規範化的一部分,因為末尾帶有斜杠的URL也有不同的對待。
RewriteCond%{REQUEST_FILENAME}!-f
RewriteRule ^(。*[^/])$ / $ 1 / [L,R=301]
這將確保/ example-page重定向到/ example-page /。您可以選擇刪除斜杠而不是添加斜杠,然後您將需要以下另一條規則:
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule ^(。*)/ $ / $ 1 [L,R=301]
HTTP到HTTPS重定向
在Google鼓勵網站所有者使用SSL的舉措之後, 遷移到HTTPS 是幾乎每個網站都有的常用重定向之一。
下面的重寫規則可用於在每個網站上強制使用HTTPS。
RewriteCond%{HTTP_HOST} ^ yourwebsite .com [NC,OR]
RewriteCond%{HTTP_HOST} ^ www .yourwebsite .com [NC]
RewriteRule ^(。*)$ https://www.yourwebsite.com/$1 [L,R=301,NC]
基本上,您可以使用此方法將www或非www版本重定向合併到一個HTTPS重定向規則中。
從舊域重定向到新域
當您決定進行品牌重塑並且需要更改域時,這也是最常用的重定向之一。以下規則將old-domain.com重定向到new-domain.com。
RewriteCond%{HTTP_HOST} ^ old-domain.com $ [OR]
RewriteCond%{HTTP_HOST} ^ www.old-domain.com $
RewriteRule(。*)$ http://www.new-domain.com/$1 [R=301,L]
它使用兩種情況:一種是URL的「 www」版本,另一種是「非www」,因為出於歷史原因,任何頁面都可能具有指向這兩種版本的傳入鏈接。
大多數網站所有者使用WordPress,並且可能無需使用.htaccess文件進行重定向,而可以使用插件。
使用插件處理重定向可能與我們上面討論的稍有不同,並且您可能需要閱讀其文檔才能正確處理特定插件的RegExp。
從現有的插件中,我會推薦一個免費插件,名為 重新導向 其中有許多參數可以控制重定向規則, 有用的文檔。
重定向不良做法
1.將所有404損壞的URL重定向到主頁
當您懶於調查所有404 URL並將它們映射到適當的登錄頁面時,通常會發生這種情況。
根據Google的說法,它們仍然都被視為404。
是的,這不是一個好習慣(會使用戶感到困惑),而且我們還是將它們視為404(它們是軟404),因此沒有太大的發展空間。它不是嚴重損壞/壞處,但是由於沒有充分的理由而增加了複雜性,請改用更好的404頁面。
-?約翰(@JohnMu) 一月8,2019
如果您有太多這樣的頁面,則應考慮創建 精美的404頁 並通過顯示搜索選項吸引用戶進一步瀏覽或找到他們所尋找的內容以外的其他內容。
Google強烈建議重定向的頁面內容應與舊頁面相同。否則,這種重定向可能會被視為軟404,您將失去該頁面的排名。
2.錯誤的移動頁面特定重定向
如果您為台式機和移動網站使用不同的URL(即台式機為「 yoursite.com」,行動電話為「 m.yoursite.com」),則應確保將用戶重定向到移動版本的相應頁面。
正確:將「 yoursite.com/sport/」更改為「 m.yoursite.com/sport/」
錯誤:「 yoursite.com/sport/」改為「 m.yoursite.com」
另外,您還必須確保,如果桌面上的一個頁面是404,則移動設備上的頁面也應該是404。
如果頁面沒有移動版本,則可以避免重定向到移動版本,並將其保留在桌面頁面上。
3.使用元刷新
可以使用meta refresh標籤進行重定向,如下例所示:
如果在/ old-page /中插入此標記,它將立即將用戶重定向到/ new-page /。 Google並未禁止此重定向,但他們顯然不建議使用它。
元刷新類型重定嚮應該可以正常工作。我們不推薦這樣做的原因有兩個:UX(使頁面保持在瀏覽器歷史記錄中,即afaik)和處理時間(我們需要解析頁面才能看到它)。處理後,就像重定向一樣。
-?約翰(@JohnMu) 2018年3月2日
根據約翰·穆勒(John Mueller)的說法,搜索引擎可能無法正確識別這種重定向類型。 JavaScript重定向也是如此。
4.重定向過多
當您使用錯誤的正則表達式設置時,將顯示此消息,並最終導致無限循環。
通常,當您具有重定向鏈時,會發生這種情況。
假設您很久以前已將page1重定向到page2。現在您可能已經忘記了將page1重定向,並決定再次將page2重定向到page1。
結果,您將得到如下規則:
RewriteRule ^ page1 / page2 [R=301,NC,L]
RewriteRule ^ page2 / page1 [R=301,NC,L]
這將創建一個無限循環併產生上面顯示的錯誤。
結論
當您啟動永久重定向時,通過刪除重定向無法輕鬆地將其改回(「永久」一詞表示「硬永久」)。
這是因為Google一旦檢測到這樣的重定向,就會將PageRank傳遞到新頁面,並更改SERP中的URL以使用新頁面。
如果您正在將一個具有數萬個頁面的大型網站從舊域遷移到新域甚至從HTTP遷移到HTTPS,建議您首先執行302臨時重定向,並確保所有重定向規則均正常運行並查找Google分析數據以確保沒有意外結果(即,導致大量404頁的某些語法錯誤),然後將開關302重定向到301永久。
如果您對301永久重定向的目標輸入有誤,並且想要切換到另一個URL,建議您 避免鏈接重定向 並將所有鏈接更改為新URL。
圖片積分
特色圖片:Paulo Bobita
屏幕截圖由作者拍攝