讲这个话题的起源,今天有人跟我痛诉网站几千的内容,全部被爬走了,一个不剩的那种;然后看了看他的站点,我只能说不爬你爬谁。大家猜猜为什么,我相信很多人的站点都会有这个问题,并且我见过的很多企业站点都有这个通病。
自增连号的URL
一切的始作俑者便是网站采用了自增连号的URL,这种URL结构通常是数据库中自动生成的,每当添加新的内容或记录时,数据库就会自动为新记录分配一个比前一个记录大1的ID,这个ID就是URL的一部分,页面地址(URL)是按照数字顺序连续增加的。
https://www.chateach.com/seo/1
https://www.chateach.com/seo/2
https://www.chateach.com/seo/3
2
3
如上所示,也许网站有很多不同栏目目录,但是栏目下的详情页之间是连续自增的数字;这种网址结构潘某人SEO认为实在所有设计中最不可取的形式。但是早期很多的建站都是这种形式,导致很多企业站点也是这种设计;毕竟那时候爬虫没有这么泛滥,也没有这种预防。
带来的危害
这个危害可以说是毁灭性的打击,你想一下你日以继夜付出的心血的内容,只要暴力枚举ID就可以在短短几分钟内,给你爬的渣都不剩。然后如果你站点的全站还不理想的情况下,对方还能比你先收录。
虽然说只要可以被访问的内容都是无法避免被爬虫的命运,但这种自增式的网址还比是家里门开着,别人可以随便进来;把门关上,就有门槛了,不会开锁撬门爬窗户的就进不来。像如果网站的网址是无序的,如果没有爬取路径的内容就很难被直接或者暴力枚举爬取。这里的无序不是简单的ID数字变为无序,简单的数字无序,位数又比较短无非是暴力枚举的久一点而已。
如何解决问题
解决这个问题其实也很简单,只要将网址最后的ID部分,变为无序不可预测的就可以避免被暴力枚举爬取。实现这种功能的方案有很多,比如:UUID、时间戳与随机数结合、哈希值等,网上有很多方法。
如果你坚持看到这里就有福了,潘某人SEO把自己在使用的方法分享给大家,采用数据库自增ID+随机字符串的形式,结构为N未纯数字+N位纯小写字母。
方案实现方法
与原来自增ID的形式时,还是同样的没增加一条记录的时候生成一个连续的自增ID,不同的是另外开辟一个新的字段,存储一个随机生成的字符串,如下所示。
https://www.chateach.com/seo/1000ssddsxdfxc
https://www.chateach.com/seo/1001xdfrfdd
https://www.chateach.com/seo/1002ftyhcef
2
3
其中自增ID部分,连续数字推荐从1000或者10000开始,而不是从1开始,否则位数太短影响整体的安全性;随机字符串部分,以随机的纯小写字母,并且位数也可以随机。长度随机很关键,在同样长度下,位数可在保证长度的情况下,一定程度的位数随机可以进一步增加破解难度,推荐字符串长度6-8位左右。
记住一定要自增ID和字符串作为两个字段来实现,然后在网址路径在访问的时候,通过正则差分数字部分,进行数据查询,然后在根据结果来校对字符串部分,这样可以获得最高的索引效率。
方案实现优势:
自增ID在每次插入新记录时都会自动递增,从而确保每个记录都有一个唯一的标识符。生成和管理相对简单,不需要额外的逻辑或算法。自增ID通常是连续的整数,连续的ID值可以减少索引的碎片,提高查询性能。数字的索引速度通常比字母(或字符)要快,尤其当内容数量增多比较庞大的时候,这种差异会变大。
最后,注意一点内容的列表展示一定的页码数量就够了,对于正常用户没人会通过不断翻页的形式访问,对于搜索引擎可以采用sitemap的方式提交,记住sitemap的路径复杂点,不要对外公开。这样对于这部分没有直接显示入口的网址链接,可以在正常收录的情况下,又能避免站点页面被大范围的爬取。快去转给你的还在使用的自增ID作为路径的冤种朋友把。