大部分的网站都不需要限制搜寻引擎来爬取、索引资料,但如果有需要限制的时候,应该怎么做呢?可以使用 robots.txt 跟 noindex 这两个语法来限制搜索引擎,robots.txt 负责「限制爬取」,noindex 则负责「限制索引」,限制搜寻引擎基本上跟SEO没有直接关系,但可以调配网站爬取与索引的资讯,让网站的收录内容更趋向一致,间接帮助了网站的SEO优化。
〈延伸阅读:SEO是什么? 简单说让你听得懂〉
爬取(检索)、索引哪里不一样?
「爬取」跟「索引」是搜寻引擎的两个工作阶段,搜寻引擎会先透过检索器来「爬取」网站资料,也是俗称的爬虫程式,爬完网站之后才会把爬到的资料建立「索引」也就是「收录」,而 robots.txt 就是一个告诉搜寻引擎「能不能爬取」的文字档,noindex 则是一个告诉搜寻引擎「能不能收录」的网页语法,这两个设定不能冲突,要彼此配合。
什么情况下用 robots.txt?
搜寻引擎不是只有 Google,还有 Yahoo、Bing、Ahrefs、Baidu…,还有数以百千计的搜寻程式,网站如果是上千页的网站,一直被抓取就会占用网站资源 (流量、CPU、RAM),这时候就可以使用 robots.txt 来限制搜寻引擎来爬网站,网站可以用 robots.txt 选择让哪些引擎可以抓,哪些引擎不能抓,以调节网站负载,再来,如果网站有很多跟排名无关的档案、影片,也不希望被抓取的就可以用拒绝爬取指令节省爬取成本,像是/downloads/、/videos/,千万不要用 robots.txt 来拒绝爬取网站后台,像是 /admin/、/wp-admin/,你不设还好,一设定连骇客都可以透过 robots.txt 查询你的网站后台网址,防止收录应该用 meta robots,而不是 robots.txt。〈延伸阅读:SEO工作内容是什么? 〉
什么是「搜寻引擎的爬取成本」?
搜寻引擎对每个网站都有不同的「网站爬取时间」,并不是公平分配时间爬取,这个时间成本我们称作「搜寻引擎爬取成本」,爬取时间是根据「Sitemap.xml」、「网站规模大小」、「网站权重高低」、「网站连结优化程度」、「连结健康程度」...,根据条件给予不同的爬取时间,希望排除对SEO没帮助的内容被抓取,可以使用 robots.txt 进行排除。
〈延伸閱讀:Sitemap是什麼?一次搞懂網站地圖提交〉
什么情况下用 noindex?
网站有不想被搜寻引擎收录的网页,像是网站后台网址、测试用网址、登入、注册、结帐…,无论是什么原因,只要不想被搜寻引擎收录,就可以用 noindex 来限制索引(收录),noindex在单一网页撰写在 meta 的语法,需要一页一页去写,也可以用程式以单元方式自动产生,如果有更重要的网页或档案,会建议用密码机制来保护档案,因为设定 noindex 无法保证一定不收录。
robots.txt 与 noindex 使用时机
项目 | robots.txt | noindex |
---|---|---|
使用时机 | 限制爬取内容、降低主机负载 | 限制内容被索引(收录) |
功能 | 告诉检索器可以「爬取」哪些内容 | 告诉检索器可以「收录」哪些内容 |
缺点 | 只能限制爬取,无法限制收录 | 被 robots.txt 限制后无法执行 |
撰写方式 | robots.txt 撰写后放到网站根目录 | 将语法写在 html 程式码中 |
指令栏位 | User-agent Allow Disallow Crawl-delay Sitemap |
meta name content index noindex follow nofollow |
产生器 | 有 | 无 |
测试器 | GSC robots.txt 测试工具 | 无 |
如何撰写 robots.txt?
写 robots.txt 之前,必须先认识这五个指令栏位,以及常见的检索器名称,才能依照栏位去撰写 robots.txt 文字档,robots.txt 可以用各种文字编辑进行编辑,像是 Notepad、TextEdit、vi 、emacs、TextEdit、Sublime、Atom、Notepad++、Visual Studio Code...都可以喔。
5个指令栏位介绍
User-agent:填写「检索器字串」名称 Allow:允许抓取的「网站内容的路径」
Disallow:不允许抓取的「网站内容路径」
Crawl-delay:设定检索器爬取网站的「间隔秒数」
Sitemap:Sitemap 放置的网址路径 (绝对网址)
常见搜寻引擎检索器
搜寻引擎 | 检索器字串 |
---|---|
Googlebot | |
Yahoo | Slurp |
Bing | bingbot |
DuckDuckBot | DuckDuckBot |
facebot | |
Apple | Applebot |
常被挡的检索器
搜寻引擎 | 检索器字串 |
---|---|
Yandex | YandexBot |
Majestic | MJ12bot |
Ezooms | Ezooms |
百度 | Baiduspider |
Ahrefs | AhrefsBot |
MOZ | rogerbot |
Semrush | SEMrushBot |
Petalsearch | PetalBot |
DotBot | DotBot |
robots.txt 要放在网站的根目录
8个 robots.txt 范例
范例一: 允许所有的检索器都可以来爬网站
User-agent: *
Disallow:
范例说明:「*」 就是全部检索器,Disallow 「空值」代表「不拒绝」就是「允许」的意思,即使没有放上 robots.txt 档案,网站预设就是全部允许,但还是建议放。
范例二: 拒绝所有检索器来爬取网站资料
User-agent: *
Disallow: /
范例说明:「*」 就是全部检索器,Disallow:「/」代表根目录,所有档案都拒绝的意思。
范例三: 只允许Google的检索器、Ads来爬取网站资料,其他检索器都拒绝
User-agent: Googlebot
User-agent: AdsBot-Google
Disallow:
User-agent: *
Disallow: /
范例说明:「Googlebot」 就是Google的「检索器名称」,Disallow 空值代表「允许」,「*」 就是全部检索器,「/」则代表全部档案,全部档案都拒绝的意思。
范例四: 仅拒绝百度检索器来爬网站资料,其他检索器皆允许
User-agent: Baiduspider
Disallow: /
User-agent: *
Disallow:
范例说明:「Baiduspider」 就是百度的检索器名称,「/」代表所有档案,所有档案都拒绝的意思,「*」 就是全部检索器,「Disallow: 空值」就是全部都允许的意思。
范例五:拒绝所有检索器爬网站,只允许 Google 爬取 category 目录。
User-agent: *
Disallow: /
User-agent: Googlebot
Allow: /category/
Disallow: /
范例说明:「*」 就是全部检索器,「/」所有档案,「Googlebot」就是Google的检索器名称,Disallow: / 全部拒绝的意思,Allow: /category/ 允许这个目录名称。
范例六: 不可以爬取有admin名称网址、case-review.html、download 目录下网址、封锁全部.xls档案
User-agent: *
Disallow: */admin/*
Disallow: /case-review.html
Disallow: /downloads/*
Disallow: /*.xls$
范例说明:「*」 就是全部检索器的意思, 「*」也代表任意字元,「*/admin/*」代表有出现admin,* 就是无论出现是什么字元,「$」代表特殊字串的网址,无论出现哪一种模式。
范例七: 所有的检索器都以五秒作为抓取网站内容的时间间隔。
User-agent: *
Crawl-delay: 5
范例说明:「*」 就是全部的意思,每5秒抓一次,1000页就是5000秒,5000秒,就是指1.3小时可以抓完1000页,设定抓取时间可以纾缓主机的负载,特别是大型网站。
范例八: 允许所有检索器来抓网站,告诉索引器 Sitema.xml 档案在哪个位置。
User-agent: *
Allow: /
Sitemap: http://www.example.com/sitemap.xml
范例说明:「*」 就是全部的意思,「/」所有档案,告诉爬虫程式网站的 Sitemap 档案放在 http://www.example.com/sitemap.xml。
robots.txt 的6个注意事项
robots.txt 无法阻挡收录
robots.txt 虽然限制了 Google 来抓取网站,但如果别人的网站放了你设定限制的连结,一样会被 Google 抓取并收录,所以 robots.txt 是无法限制搜寻引擎收录的,要限制收录要用noindex 而不是用 robots.txt。
要有网站根目录的上传权限
robots.txt 档案做好之后,只能传到网站的根目录,放到其他目录都是无效的,只能放在 https://www.domain.com/robots.txt,如果你没有上传根目录的权限,就无法使用 robots.txt ,要请网站设计公司帮忙放置,如果是 Wix、Wordpress 之类的网站,可以透过网站后台去编辑 robots.txt 档案。
并非所有检索器的语法都一样
大部分的搜寻引擎都会依照 robots.txt 指令,但不是每一个搜寻引擎都是看得懂 robots.txt 语法,因此要对不同搜寻引擎使用语法,如果只针对知名的进行限制或允许因此要对不同搜寻引擎使用不同语法,如果只针对常见的的几个搜寻引擎,那 robots.txt 基本语法已经很足够了。
robots.txt 格式有限制
网站的 robots.txt 只能有一个,而且名称只能是 robots.txt,一字不漏,且只能用小写不能用大写,robots.txt 档案大小限制 500K 以内,只能用 UTF-8 编码的纯文字档案,每行须以 CR、CR/LF 或LF 分隔,撰写完成后可用 robots.txt 测试工具去测试 robots.txt 写法是否正确。
robots.txt 可以指定多种型态
robots.txt 不是只有限制抓取网页,还可以限制档案、照片、影片…。
robots.txt 要避免跟 noindex 冲突
假设robots.txt 设定了abc.html 不抓取,又在abc.html 中设定不收录 (noindex),这样就会产生冲突,因为 robots.txt 设定abc.html 不抓取,造成 Google 爬虫找不到abc.html 中的不收录 noindex 的语法,如果有别的网站放置这个 abc.html 网址,就会造成收录,这时候只要把 robots.txt 的 abc.html 不抓取的指令移除,就可以化解冲突。
robots.txt 产生器
如果你不想打字,可以试试看 robots.txt 的产生器,但记得要移除第一行的「robots.txt generated by www.seoptimer.com」,将产生的 robots.txt 档案放到网站的根目录,再用测试工具测试一下语法的正确性。
【工具连结:SEOptimer】
robots.txt 测试工具
robots.txt 文件做好之后,要上传到网站的根目录,可以用 Google Search Console (GSC) 的 robots.txt 测试工具对文件进行验证,robots.txt 测试工具可以检查指令是不是可以正常运作,如果在 robots.txt 有设定限制某些检索器抓取,测试工具就会显示错误与警告资讯。
【工具连结:robots.txt 测试工具】
检查 robots.txt 是不是正确
如何撰写 noindex?
noindex 是一个 html 的 meta 中继标记,通常会写在每个网页 html 的 <head> 标签中,所以必须要有编辑网页 <head> 的权限,如果没有权限就只能请网页设计公司帮忙设定,如果是 Wix、Wordpress 之类的 CMS 网站,可以从后台修改 <head> 中继标记,也可以单元方式用程式自动写入,写 noindex 之前,必须先认识这五个指令栏位。
noindex 的5个指令栏位
meta name:检索器名称content:内容标签
index:允许网页索引(收录)
noindex:拒绝网页索引(收录)
follow:允许 Google 爬虫爬这个网页的所有连结
nofollow:拒绝 Google 爬虫爬这个网页的所有连结
noindex 是写在网页 html 里面
5个 noindex 范例
范例一: 拒绝所有搜寻引擎收录网页
<html>
<head>
<meta name="robots" content="noindex">
</head>
</html>
范例二:拒绝 Google 检索器收录网页
<html>
<head>
<meta name="googlebot" content="noindex">
</head>
</html>
范例三:拒绝所有搜寻引擎收录网页,并拒绝爬所有连结
<html>
<head>
<meta name="robots" content="noindex, nofollow">
</head>
</html>
注:如果是 <meta name="robots" content="noindex,nofollow"> ,可写成 <meta name="robots" content="none">
范例四:允许所有搜寻引擎收录网页与追踪所有连结
<html>
<head>
<meta name="robots" content="index, follow">
</head>
</html>
说明:如果是 <meta name="robots" content="index,follow"> ,可写成 <meta name="robots" content="all">
范例五: 拒绝所有检索器追踪网页的所有连结,且拒绝 Google 检索器收录网页
<html>
<head>
<meta name="robots" content="nofollow">
<meta name="googlebot" content="noindex">
</head>
</html>
如何移除已经被 Google 收录的网址?
如果有被收录到不想被收录的资料该怎么办呢?其他的搜寻引擎就不知道该怎么移除,但如果是Google的话,在 Search Console 有一个移除网址的功能,可以暂时移除6个月,在这期间可以去设定网页的 noindex 语法,就可以让网页不再被收录。
Google Search Console 移除网址功能
结论
一般网站很少需要去限制搜寻引擎的爬取(检索)、索引(收录),但如果真的有需要就可以使用 robots.txt 跟 noindex 这两个语法来限制搜索引擎,用 robots.txt 设定检索器的「限制爬取」,用 noindex 设定搜寻引擎的「限制收录」,如果想移除 Google 已经收录的网址,可以用 Google Search Console 的移除网址功能将网站移除,但还是要设定 noindex,不然6个月后还是会被 Google 收录,如果不会操作,可以找网页设计公司帮忙操作。
〈延伸阅读:网页设计公司不会告诉你的5个真相〉