標準化
概述
URL標準化,英文:
urlcanonicalization來自matt cutts的部落格文章:SEO advice: url canonicalization 中文翻譯:
SEO的建議:URL標準化 “URL標準化”是一個動名詞,不好直接解釋,我把它反過來一下:
標準化URL
很多情況下,我們認為以下這幾個連結都指向同一個頁面(首頁):
但是從URL傳送請求並返回網頁內容的過程來看,這些URL都是互不相同的。對於上述URLs,Web伺服器完全可以返回完全不同的內容。當這些URL所對應的內容都一樣時(一般情況下都一樣的),谷歌需要從上述URLs中選一個具有代表性的,而忽略其餘的。那么這個被谷歌選擇了的URL,就是一個標準化的URL。谷歌選擇的這個過程稱為“標準化”。
特別注意
根據不同的伺服器就會有不同的URL重寫規則,比如 iis apache nginx 這三種重寫方式都是不同的,並非完全一樣的。
靜態化
概述
這是SEO過程中經常碰到的問題,也是必須解決的問題。因為搜尋引擎喜歡
靜態頁面。從Web伺服器的角度,這個問題轉變為:如何將靜態化的檔案名稱稱轉化成參數。
需要兩步處理
⒈把網頁上帶連結的地方,都換上新的靜態化連結。搜尋引擎和瀏覽器將通過該連結來發生請求。(有些人做修改不是在網頁上,而是進行
動態連結向
靜態連結的轉向,這是嚴重錯誤的)
⒉在httpd.conf或.htaccess中使用RewriteRule:
RewriteRule "^/dir/ ([^./]*) \.html" "/dir/script.cgi?doc=$1" [PT]
[PT]標記告訴Apache執行後續的所有操作。
通過這個功能,使
動態頁面以靜態連結的形式展示給搜尋引擎,從而達到URL最佳化的目的。
好處
功能好處
重寫URL是非常有用的一個功能,因為它可以讓你提高搜尋引擎閱讀和索引你的網站的能力;而且在你改變了自己的網站結構後,無需要求用戶修改他們的書籤,無需其他網站修改它們的友情連結;它還可以提高你的網站的安全性;而且通常會讓你的網站更加便於使用和更專業。
重寫式跟蹤
當客戶機不接受cookie時,server就使用URL重寫作為會話跟蹤的基本方式.URL重寫,添加了附加數據(會話ID)到請求的URL路徑上.
會話ID必須被編碼作為該URL字元串中的路徑參數。該參數的名稱為jsessionid,
例如:
index.html;jsessionid=1234
優點
⒉易於用戶記憶和鍵入。
⒊易於被搜尋引擎收錄。
重定向
製作404頁面
很多時候,我們考慮把無效的URL比如:用戶拼錯的URL、不存在的URL重定向到別的網頁,例如網站的首頁、
404頁面等。
在httpd.conf或.htaccess檔案中使用ErrorDocument來捕獲404 (找不到檔案)錯誤:
ErrorDocument 404 /index.html
DirectoryIndex index.html /path/to/notfound.html
本功能會讓所有的404錯誤——每次當某人請求無效的URL 時,都返回URL / index.html 提供的
網站首頁。
注意事項
⒈直接指向首頁是否是合適的?或者讓它指向到一個
404頁面會更好些?如果在404頁面用javascript做一個跳轉到首頁,也是SEO允許的做法。
⒉即使返回有效的檔案,仍然會將404 狀態碼返回給客戶端和搜尋引擎。這表示
搜尋引擎機器人來確認網站上的連結時,仍然會得到正確的結果(404狀態碼)。
新建方法
操作方法
檔案位置:apache->conf->httpd.conf
請在httpd.conf中使用Alias指令:
Alias /new
url/www/htdocs/oldurl
如:用戶訪問新的地址/newurl/id34.html 伺服器將提供的內容原地址是/www/htdocs/oldurl/id34.html。
注意:Alias只會改變本地URL,如/newurl/id34.html 的/newurl/id34.html 部分,而無法改變URL的主機名稱部分若要更改URL的主機名稱部分,請使用Redirect或RewriteRule指令。
菜鳥指南:本功能的Alias指令在 httpd.conf中是這一句:#Alias /webpath /full/filesystem/path 去掉前面的#,並做下相應的修改即可。
SEO用到功能
⒈當檔案移動或
檔案目錄名稱發現改變,出於SEO需要,你需要保持舊的URL;
⒉網站改版了,網站導航和連結發生變化,為了繼續持有原連結帶來的流量,你需要保持舊的URL;
⒊你希望不同的人用不同URL來連結同一個的內容。(SEO一般不建議這樣做)
重定代碼
截獲請求代碼
⒈要重寫,首先是截獲
url請求,然後分析當時的url,最後跳轉到相應的頁面.所以我們第一步是要截獲url請求.為此新建一個類庫叫URL,在該類庫中引用URLRewriter.dll.新建一個類myrewritter.cs,代碼如下
namespace URL
{
public class myrewritter : URLRewriter.BaseModuleRewriter
{
protected override void Rewrite(string requestedPath,HttpApplication app)
{
if (requestedPath.Contains("news/2011/3/2.html"))
app.Context.RewritePath("/news.aspx?id=2&year=2011&month=3");
else
app.Context.RewritePath("/here.aspx");
}
}
}
可以看到該類繼承了URLRewriter.BaseModuleRewriter。只要當前的
url請求是news/2011/3/2.html,我們就會將頁面重寫到/news.aspx?id=2&year=2011&month=3.
這只是一個簡單的例子,實際上對於url的判斷,一般是用
正則表達式來完成.而頁面和頁面間的對應關係,可能需要通過查詢資料庫完成.
web.config代碼
接下來在網站項目中引用這個類庫.然後修改下web.config,下面的:
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<httpModules>
<add type="URL.myrewritter" name="URL" />
</httpModules>
<compilation debug="true" />
<authentication mode="Windows" />
</system.web>
</configuration>
步驟總結
大家可以看到我新加了個httpModules.這個的作用是,如果有
url請求,asp/net會先把請求傳到你指定的這個類中來.add那一行了,前面的是要接收請求的類,後面的是這個類所在的dll的名字.
添加完這一句後,一切就快結束了.由於我們要處理的是.html的頁面,所以需要配置下iis.因為默認asp/net的處理引擎不會管.html.我們要做的是用處理asp .net的那個程式來處理html頁面.打開iis.找到你的網站,點右鍵打開屬性.找到主目錄(Home Directory),打開配置(Configuration)對話框. 在Application extensions列表里找到.aspx,點擊編輯(Edit...),複製Executable框的內容。
處理引擎
Apache
Microsoft Internet Information Server(IIS)
URL Rewrite Module for IIS 7.0,由微軟官方發展
IIS Mod-Rewrite。
IISRewrite。
URL Replacer。
Ionic's ISAPI Rewrite Filter (IIRF),無須 .NET,免費的開放原始碼組件。
.NET URL Rewriter and Reverse Proxy,免費的 URL Rewriting 與反向代理組件,支持 .NET 2.0/3.5,IIS 6.0/7.0。
2EEServlet
Lighttpd