sitemap.xml 和 robots.txt
什么是 sitemap.xml 和 robots.txt
这俩是啥呢?简单地说,每个网站几乎必备的两个说明文档。
我们在辛辛苦苦完成了一个网站的开发后,通常肯定希望会有很多用户来访问,也就是有流量。流量从哪里来?一个很大的来源是搜索引擎。
那搜索引擎怎么知道有这个网站存在?或者聊得再深入一点,搜索引擎怎么根据关键词来提供网站列表?
大家都知道搜索引擎是根据爬虫程序来检索网页的,爬虫程序会在各个网站点击链接,保存网页内容。
如果你的网站被其他网站引用了(比如友情链接),爬虫顺着那个网站就找到了你的网站,那么你的网站内容就被保存到搜索引擎的数据存储中了。这似乎省去了一些 SEO 的工作。
但你刚建好的网站,指望别人友情链接到你这里,可能比较难。所以你可能得自己去向 Google 这种搜索引擎提交申请,告诉搜索引擎:我这里有一个网站,请你收录。
但很快又出现一个新问题:搜索引擎的爬虫怎么知道你的网站上有哪些页面可以爬取,哪些内容不可以爬取?比如用户的个人信息页、设置页,还有一些废弃的过期链接,你可能就不想被爬取。
还有一种情况,就是你的网站规模特别大,比如 B 站有舞蹈区、美食区、动画区,每个区都有很多视频,你不希望爬虫漫无目的地来回爬,你希望提供一个内容大纲,告诉爬虫网站是怎么分类的,以提高爬虫的爬取效率。
再有,比如你想说明哪些内容是每小时都更新的,欢迎爬虫每小时都来看看;哪些内容是常年不动的,爬虫你来这一次就够了,别增加服务器的负担。此外还有一些孤岛页面——所谓孤岛页面,就是这个页面爬虫无法通过任何链接点击跳转过去,就像被隐藏起来了。爬虫正常情况下是不知道这个页面存在的。总之,你可能需要提供一个说明文档,向爬虫具体介绍你网站各个页面的情况。
看看 B 站的配置
robots.txt 和 sitemap.xml 就是上文的说明文档。我们可以以 B 站为例,点开看看里面是怎么描述的。
先看 robots.txt,里面第一部分如下:
User-agent: *
Disallow: /medialist/detail/
Disallow: /index.html
解读一下:不管是谁,禁止爬取这两个页面。第一个 medialist/detail 已经访问不了了,不知道为啥禁止了;第二个可能是老的网站架构,链接里带有 index.html。现在不需要带着这个来访问了,所以就别爬取了。其他各个主流搜索引擎都是欢迎爬取的。
例外的是底部的 Facebook 和 Twitter(如下),B 站只让爬取 https://www.bilibili.com/tbhx 这个页面。这个页面是一个游戏的推广页,可能是设计海外市场的推广业务。
User-agent: facebookexternalhit
Allow: /tbhx/hero
User-agent: Facebot
Allow: /tbhx/hero
User-agent: Twitterbot
Allow: /tbhx/hero
最后有一个:
User-agent: *
Disallow: /
意思是其他的、上文没列举到的奇奇怪怪的小爬虫,你就别爬取了。
这属于白名单策略,避免一些初学者或别有用心的小公司直接从 GitHub 下载一个爬虫,天天爬,给 B 站增加无意义的服务器负担。虽说爬虫可能不理会这个说明文档,但能屏蔽一些没有能力修改开源代码的人。
再看看 sitemap,通过浏览器访问 sitemap.xml,这是典型的 sitemap 套 sitemap。我发现一些 sitemap 会重定向到 404,可能只有核心内容是开发人员手动维护的。这很正常,但也仅仅是我的猜测。
但也能看到,这里会故意引导爬虫去访问 ranking,这可能是引流到全站最热门、最火的内容。
还有的部分可能是专门给百度的爬虫看的,告诉它有哪些分区,帮助优化爬虫工作效率。
还有这个 read/detail.xml,应该是帮助搜索引擎收录一些图文专栏,其实都是很有用的,因为我们去搜索一些文章很容易就被引导到 B 站来了,其实也是 B 站给自己引流的一种方式。
最后值得补充的是,这些只是一个规范,是君子协定,并不是绝对的。
你可能禁止了一切,但爬虫还是不管不顾地来。你可能允许访问一切,但 Google 没收录你的域名,还是不会被爬取。