談談ROBOTS.TXT語法和做用php
咱們知道,搜索引擎都有本身的「搜索機器人」(ROBOTS),並經過這些ROBOTS在網絡上沿着網頁上的連接(通常是http和src連接)不斷抓取資料創建本身的數據庫。css
對於網站管理者和內容提供者來講,有時候會有一些站點內容,不但願被ROBOTS抓取而公開。爲了解決這個問題,ROBOTS開發界提供了兩個辦法:一個是robots.txt,另外一個是The Robots META標籤。 html
1、 robots.txtjava
一、 什麼是robots.txt?
robots.txt是一個純文本文件,經過在這個文件中聲明該網站中不想被robots訪問的部分,這樣,該網站的部分或所有內容就能夠不被搜索引擎收錄了,或者指定搜索引擎只收錄指定的內容。當一個搜索機器人訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,若是找到,搜索機器人就會按照該文件中的內容來肯定訪問的範圍,若是該文件不存在,那麼搜索機器人就沿着連接抓取。web
robots.txt必須放置在一個站點的根目錄下,並且文件名必須所有小寫。
網站 URL
相應的 robots.txt的 URL
http://www.jinpingmei.org.cn
http://www.jinpingmei.org.cn/robots.txtajax
http://www.w3.org/
http://www.w3.org/robots.txt數據庫
http://www.w3.org:80/
http://www.w3.org:80/robots.txtapi
http://www.w3.org:1234/
http://www.w3.org:1234/robots.txt網絡
http://w3.org/
http://w3.org/robots.txtide
二、robots 語法:
「robots.txt」文件包含一條或更多的記錄,這些記錄經過空行分開(以CR,CR/NL, or NL做爲結束符),每一條記錄的格式以下所示:
「<field>:<optionalspace><value><optionalspace>」。
在該文件中可使用#進行註解,具體使用方法和UNIX中的慣例同樣。該文件中的記錄一般以一行或多行User-agent開始,後面加上若干Disallow行,詳細狀況以下:
User-agent:
在」robots.txt」文件中,若是有多條User-agent記錄說明有多個robot會受到」robots.txt」的限制,對該文件來講,至少要有一條User-agent記錄。若是該項的值設爲*,則對任何robot均有效,在」robots.txt」文件中,」User-agent:*」這樣的記錄只能有一條。
若是在」robots.txt」文件中,加入」User-agent:SomeBot」和若干Disallow、Allow行,那麼名爲」SomeBot」只受到」User-agent:SomeBot」後面的Disallow和Allow行的限制。
Disallow:
這個值能夠是一條完整的路徑,也能夠是路徑的非空前綴,以Disallow項的值開頭的URL不會被robot訪問。例如」Disallow:/help」禁止robot訪問/help.html、/helpabc.html、/help/index.html,而」Disallow:/help/」則容許robot訪問/help.html、/helpabc.html,不能訪問/help /index.html。
「Disallow:」說明容許robot訪問該網站的全部url,在」/robots.txt」文件中,至少要有一條Disallow記錄。若是」/robots.txt」不存在或者爲空文件,則對於全部的搜索引擎robot,該網站都是開放的。
要攔截整個網站,請使用正斜扛。
Disallow:/
要攔截目錄及其中的全部內容,請在目錄名後添加正斜扛。
Disallow:/private_directory/
要攔截網頁,請列出該網頁。
Disallow:/private_file.html
Allow:
與Disallow項類似,這個值能夠是一條完整的路徑,也能夠是路徑的前綴,以Allow項的值開頭的URL是容許robot訪問的。例如」Allow:/hibaidu」容許robot訪問/hibaidu.htm、/hibaiducom.html、/hibaidu /com.html。一個網站的全部URL默認是Allow的,因此Allow一般與Disallow搭配使用,實現容許訪問一部分網頁同時禁止訪問其它全部URL的功能。
注意:Disallow與Allow行的順序是有意義的,robot會根據第一個匹配成功的Allow或Disallow行肯定是否訪問某個URL。
使用 * 匹配字符序列
您可以使用星號 (*) 來匹配字符序列。例如,要攔截對全部以」專用」開頭的子目錄的訪問,可以使用下列條目:
User-Agent:Googlebot
Disallow:/專用*/
要攔截對全部包含問號 (?) 的網址的訪問,可以使用下列條目:
User-agent:*
Disallow:/*?
使用 $ 匹配網址的結束字符
您可以使用 $ 字符指定與網址的結束字符進行匹配。例如,要攔截以 .asp 結尾的網址,可以使用下列條目:
User-Agent:Googlebot
Disallow:/*.asp$
您可將此模式匹配與 Allow 指令配合使用。例如,若是 ? 表示一個會話 ID,您可排除全部包含該 ID 的網址,確保搜索引擎蜘蛛不會抓取重複的網頁。可是,以 ? 結尾的網址多是您要包含的網頁版本。在此狀況下,可對 robots.txt 文件進行以下設置:
User-agent:*
Allow:/*?$
Disallow:/*?
Disallow:/ *? 一行將攔截包含 ? 的網址(具體而言,它將攔截全部以您的域名開頭、後接任意字符串,而後是問號 (?),然後又是任意字符串的網址)。
Allow: /*?$ 一行將容許包含任何以 ? 結尾的網址(具體而言,它將容許包含全部以您的域名開頭、後接任意字符串,而後是問號 (?),問號以後沒有任何字符的網址)。
下面是一些robots.txt基本的用法:
l 禁止全部搜索引擎訪問網站的任何部分:
User-agent: *
Disallow: /
l 容許全部的robot訪問
User-agent: *
Disallow:
或者也能夠建一個空文件 "/robots.txt" file
l 禁止全部搜索引擎訪問網站的幾個部分(下例中的cgi-bin、tmp、private目錄)
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /private/
l 禁止某個搜索引擎的訪問(下例中的BadBot)
User-agent: BadBot
Disallow: /
l 只容許某個搜索引擎的訪問(下例中的WebCrawler)
User-agent: WebCrawler
Disallow:
User-agent: *
Disallow: /
三、 常見搜索引擎機器人Robots名字
名稱 搜索引擎
Baiduspider http://www.baidu.com
Scooter http://www.altavista.com
ia_archiver http://www.alexa.com
Googlebot http://www.google.com
FAST-WebCrawler http://www.alltheweb.com
Slurp http://www.inktomi.com
MSNBOT http://search.msn.com
四、 robots.txt舉例
下面是一些著名站點的robots.txt:
http://www.cnn.com/robots.txt
http://www.google.com/robots.txt
http://www.ibm.com/robots.txt
http://www.sun.com/robots.txt
http://www.eachnet.com/robots.txt
五、 常見robots.txt錯誤
l 顛倒了順序:
錯誤寫成
User-agent: *
Disallow: GoogleBot
正確的應該是:
User-agent: GoogleBot
Disallow: *
l 把多個禁止命令放在一行中:
例如,錯誤地寫成
Disallow: /css/ /cgi-bin/ /p_w_picpaths/
正確的應該是
Disallow: /css/
Disallow: /cgi-bin/
Disallow: /p_w_picpaths/
l 行前有大量空格
例如寫成
Disallow: /cgi-bin/
儘管在標準沒有談到這個,可是這種方式很容易出問題。
l 404重定向到另一個頁面:
當Robot訪問不少沒有設置robots.txt文件的站點時,會被自動404重定向到另一個Html頁面。這時Robot經常會以處理robots.txt文件的方式處理這個Html頁面文件。雖然通常這樣沒有什麼問題,可是最好能放一個空白的robots.txt文件在站點根目錄下。
l 採用大寫。例如
USER-AGENT: EXCITE
DISALLOW:
雖然標準是沒有大小寫的,可是目錄和文件名應該小寫:
user-agent:GoogleBot
disallow:
l 語法中只有Disallow,沒有Allow!
錯誤的寫法是:
User-agent: Baiduspider
Disallow: /john/
allow: /jane/
l 忘記了斜槓/
錯誤的寫作:
User-agent: Baiduspider
Disallow: css
正確的應該是
User-agent: Baiduspider
Disallow: /css/
2、 Robots META標籤
一、什麼是Robots META標籤
Robots.txt文件主要是限制整個站點或者目錄的搜索引擎訪問狀況,而Robots META標籤則主要是針對一個個具體的頁面。和其餘的META標籤(如使用的語言、頁面的描述、關鍵詞等)同樣,Robots META標籤也是放在頁面的中,專門用來告訴搜索引擎ROBOTS如何抓取該頁的內容。
二、Robots META標籤的寫法:
Robots META標籤中沒有大小寫之分,name=」Robots」表示全部的搜索引擎,能夠針對某個具體搜索引擎寫爲name=」BaiduSpider」。content部分有四個指令選項:index、noindex、follow、nofollow,指令間以「,」分隔。
INDEX 指令告訴搜索機器人抓取該頁面;
FOLLOW 指令表示搜索機器人能夠沿着該頁面上的連接繼續抓取下去;
Robots Meta標籤的缺省值是INDEX和FOLLOW,只有inktomi除外,對於它,缺省值是INDEX,NOFOLLOW。
須要注意的是:上述的robots.txt和Robots META標籤限制搜索引擎機器人(ROBOTS)抓取站點內容的辦法只是一種規則,須要搜索引擎機器人的配合才行,並非每一個ROBOTS都遵照的。
目前看來,絕大多數的搜索引擎機器人都遵照robots.txt的規則,而對於Robots META標籤,目前支持的並很少,可是正在逐漸增長,如著名搜索引擎GOOGLE就徹底支持,並且GOOGLE還增長了一個指令「archive」,能夠限制GOOGLE是否保留網頁快照。例如:
表示抓取該站點中頁面並沿着頁面中連接抓取,可是不在GOOLGE上保留該頁面的網頁快照
例子:
# robots, scram
User-agent: *
Disallow: /cgi-bin
Disallow: /TRANSCRIPTS
Disallow: /development
Disallow: /third
Disallow: /beta
Disallow: /java
Disallow: /shockwave
Disallow: /JOBS
Disallow: /pr
Disallow: /Interactive
Disallow: /alt_index.html
Disallow: /webmaster_logs
Disallow: /newscenter
Disallow: /virtual
Disallow: /DIGEST
Disallow: /QUICKNEWS
Disallow: /SEARCH
User-agent: Mozilla/3.01 (hotwired-test/0.1)
Disallow: /cgi-bin
Disallow: /TRANSCRIPTS
Disallow: /development
Disallow: /third
Disallow: /beta
Disallow: /java
Disallow: /shockwave
Disallow: /JOBS
Disallow: /pr
Disallow: /Interactive
Disallow: /alt_index.html
Disallow: /webmaster_logs
Disallow: /newscenter
Disallow: /virtual
Disallow: /DIGEST
Disallow: /QUICKNEWS
Disallow: /SEARCH
User-agent: Slurp
Disallow: /cgi-bin
Disallow: /TRANSCRIPTS
Disallow: /development
Disallow: /third
Disallow: /beta
Disallow: /java
Disallow: /shockwave
Disallow: /JOBS
Disallow: /pr
Disallow: /Interactive
Disallow: /alt_index.html
Disallow: /webmaster_logs
Disallow: /newscenter
Disallow: /virtual
Disallow: /DIGEST
Disallow: /QUICKNEWS
Disallow: /SEARCH
如咱們DZ的程序 的寫法,你們結合上面的寫法說明 應該能看懂
#
# robots.txt for Discuz! Board
# Version 5.5.0
#
User-agent: *
Disallow: /admin/ Disallow: /api/ Disallow: /p_w_uploads/ Disallow: /customavatars/ Disallow: /p_w_picpaths/ Disallow: /forumdata/ Disallow: /include/ Disallow: /ipdata/ Disallow: /templates/ Disallow: /plugins/ Disallow: /mspace/ Disallow: /wap/ Disallow: admincp.php Disallow: ajax.php Disallow: digest.php Disallow: logging.php Disallow: member.php Disallow: memcp.php Disallow: misc.php Disallow: my.php Disallow: pm.php Disallow: post.php Disallow: register.php Disallow: rss.php Disallow: search.php Disallow: seccode.php Disallow: topicadmin.php