1)存在时效性内容的站点,容易出现机器不可见的情况。如:
电商网站,商户下线了某个不再售卖的产品
团购网站,商户下线了某个不再优惠的活动
招聘网站,公司下线了某个不再招聘的职位
B2B网站,厂商下线了某个不再批发的产品
……………
当用户下线的某个产品/职位/活动,对应的前端页面,一般会有3种状态:
a、产品下线后,对应页面立马404状态
假如下线产品对应的页面,刚好在搜索引擎的待抓取列表中,当搜索引擎访问时,必然出现机器不可见的情况,因为是死链。所以SEO需要找技术定期(至少每天)索取下线产品对应的链接,及时提交死链给搜索引擎,规避惩罚风险
b、产品下线后,对应页面301到首页,或上级页面,或其他什么的页面
c、产品下线后,对应页面仍然200状态,页面上添加下线状态的标识
已经下线的产品,比如是电商网站某个不再售卖的产品,该页面对用户来讲,已经毫无价值,但前端仍是200状态,让搜索引擎消耗资源去抓取,所以站在搜索引擎的立场,并不友好。
具体的处理方式,SEO首先要去了解产品对于下线产品的处理逻辑,再根据实际情况来定夺,比如:
a、已下线的产品,若历史流量比价多,全都404显然是非常坑SEO的做法,是否需要有流量的200状态,没流量的都404
b、若产品被用户发布,然后下线后,之后还可以恢复上线。那发布和恢复上线时的url是不是一样的?若一样怎么处理,不一样怎么处理?
总之,需要根据实际情况,在用户感受、搜索引擎友好、SEO流量三者中做一个平衡。
2)需要访问权限才能查看的内容
若针对用户及搜索引擎,都设置访问权限,比如需要登陆之后才能看到正文,无疑对SEO影响巨大,爬虫无法执行人的登陆行为
一般可以披露部分内容,隐藏部分内容来处理,或者针对爬虫披露全部内容,针对用户隐藏内容
3)触发反爬虫策略,返回空页面或假页面
运维没有将搜索引擎加到白名单,搜索引擎被误判为“坏人”,触发反爬虫策略,返回空白页面。
更坑的是返回假数据,比如从100条预先准备的数据中,随机抽取一条返回给爬虫,爬虫抓了几万页面,实际上数据就那100条,对SEO造成严重影响。
从而引申出一条,SEO需要时刻跟运维保持同步,时刻了解最新的反爬虫措施,是否存在误伤搜索引擎的可能
4)POST请求
通过post请求返回的数据,常出现于多条件筛选框,如肯德基的门店内容:http://www.kfc.com.cn/kfccda/storelist/index.aspx
用户执行某个行为(点击按钮、输入字符串等),js获取到这个行为后,通过post方式请求web service,在当前已打开的页面中展示返回的数据,而不是在新标签页中显示数据,所以url是不变的。
爬虫无法模拟人的行为,自然也看不到数据。
解决办法:
a、通常用三方浏览器内核,遍历加载这批需要post的页面,将浏览器渲染后的网页,生成一个个静态页。之后web service判断来访用户,若为搜索引擎,则将post按钮(href=”javascript:void(0);”)替换为静态页面的链接(href=”{静态页链接}”)
b、如果post网页太多,技术一般不愿意按a的方式搞,因为一个模块得维护两套代码,麻烦。所以一般搞一套新页面,来承载这批post页面对应的关键词流量
5)服务器响应慢,导致内容没抓全
爬虫抓取网页,等待数据返回的时间是有限的,有timeout的。可访问做的不到位的网站,经常出现爬虫来不及抓取全部内容的情况,特征是快照中只存留网页部分内容,另外一部分没抓到,当时爬虫抓取的时候,超时了
6)iframe/ajax,不解释,ajax见上面的post部分,原理差不多
7)通过图片/flash来承载内容,爬虫无法理解图片和视频中包含的信息