先來看一段引文:
谷歌、雅虎和live search 宣佈支持Link的一個新屬性Canonical,為網頁指定權威鏈(authoritative|canonical URL),以解決復制內容(duplicate content)問題。
復制內容或復制網頁是指相同或十分相近的內容卻有多個不同的URL,如打印頁、或者有sessionid的URL等。現在網站管理員可以在相同內容的網頁的頭部(head)上加一個link標簽,指定首選URL,以此聲明一個權威網頁做為復制網頁的標準版本,使鏈接和搜索結果都集中到這個首選的版本上。
<link rel=canonical href=authoritative | canonical URL/>
* href可以是絕對地址或相對地址;但不能指向不同的域名,否則會被忽略;允許指向不同的子域名;
*link rel=canonical屬性可以被傳遞,即A頁面聲明B為權威鏈接,B聲明C為權威網頁,則SE會認為C是A和B共同的首選權威版本。
*如果權威頁指向的是一個404頁,則SE仍會索引這個頁的內容,並試圖找到一個標準頁。
什麼時候適合使用cononical:在制作網站中仍需減少復制網頁或者使用301跳轉規范化網址,如果都不行再用link rel= canonical 這個標簽。在google的博客中還看到,如果指定的權威網頁沒有被索引,將可能被立即被索引,因此這個標簽,在其它任何方法都無法消除復制網頁時,指出權威網頁,將是最好的方法。
為瞭讓菜鳥們充分理解這個屬性,我就拿個簡單的網站做說明,假設為一個DZ做的論壇,那要加強網頁權重,我們可以做那些事,當然我們說的是rel= canonical這個標簽:
一,使用偽靜態,註意一下3點:
1.在robots.txt中禁止所有動態地址Disallow: /*.php;
2.禁用Archiver,理由可以GOOGLE下Archiver優化。
3.修改forumdisplay.php文件,將$extra = rawurlencode(page=$page$forumdisplayadd);改為$extra = rawurlencode(page=1$forumdisplayadd);
解釋:帖子的URL形式是thread-(tid)-(page)-(forumdisplay page).html,最後一節表示此帖在列表頁的第幾頁。所以當帖子越來越多,這個帖就會由第一頁到第二頁…,它的URL就會不斷的變化。解決辦法就是它都變成1。不足就是當從這個帖子返回列表頁時,隻能返回到第一頁瞭。
這樣處理站內鏈接形式單一、規范而且通暢,不影響收錄。如果不想禁止動態形式,或有別人鏈接瞭不規范形式,也可以做下面的修改.
二,動態URL形式,給非標準URL頁面加canonical tag,指向權威網頁
以discuz 7.0 為例
1.給viewthread.php加link rel=canonical
修改viewthread.php文件,在$page = max($page, 1);上面(程序調用包含文件結束),加一行$extrahead .='<link rel=canonical href=viewthread.php?tid=’ .$tid. ‘ />’;
2.給打印頁(有printable參數的)加canonical tag
修改打印頁模板templates\default\viewthread_printable.htm文件,在<head>部分加 $extrahead 。
3.給redirect.php形式的頁子加權威鏈接
這個程序其實對參數處理後,調用的就是viewthread.php,所以自然就有link rel=canonical瞭。
4.為archiver頁加link canonical標簽
1)修archiver/index.php文件:在global $boardurl, $_DCACHE, $charset, $navtitle, $headerbanner, $headernav;行下加一行:global $extrahead;
在<meta http-equiv=Content-Type content=text/html; charset={$charset} />行下加一行:$extrahead 。
2)修必archiver\include\thread.inc.php:此文件中有兩個showheader();,在第二個的上面加一行:$extrahead .='<link rel=canonical href=viewthread.php?tid=’ .$tid. ‘ />’;
至此帖子所有形式的URL(動態、打印頁、redirect.php、靜態和archiver)都有link rel=canonical標簽,指定viewthread.php?tid=888 這種形式為標準版本,權重和收錄都會轉到它。
對於列表頁,因形式簡單,且archiver列表頁未與正常列表一一對應,沒有做修改。
三,既有偽靜態又加link canonical到靜態地址的做法
1.將第二點中所有 $extrahead .='<link rel=canonical href=viewthread.php?tid=’ .$tid. ‘ />’; 換成$extrahead .='<link rel=canonical href=thread-‘ .$tid. ‘-1-1.html />’; 即改成以thread-3-1-1.html這種靜態形式為首選版本。
2.將archiver內容頁最下的完整版本鏈接改為靜態形式
修改archiver/include/thread.inc.php,將 viewthread.php?tid=$tid替換為thread-{$tid}-1-1.html
3.為redirect.php頁做301跳轉到靜態形式URL
修改文件,使用php代碼實現301跳轉,把require_once DISCUZ_ROOT.’./viewthread.php’;替換為header(HTTP/1.1 301 Moved Permanently);
header( Location: thread-{$tid}-1-1.html );
文件中共有四個地方要替換,但在7.0的前臺隻看到瞭lastpost這個形式。
其中2.3.其實都會有link canonical,但百度不支持,直接到標準形式為好。
供稿 醫美網