最近,本人负责的其中一个站点收录出现了异常,趁着周末有空讲述一下整个诊断过程。核心问题有两点,服务器架构和网站程序架构导致的;本篇仅分享服务器架构导致的收录异常。
首先,介绍一下自己。本人就职于深圳某企业,长期混迹于乙方外包公司,众所周知seo外包公司接的是绝大部分是小企业网站,这些网站做的关键词往往也仅是改个TDK就完成排名的工作。
再加上,目前绝大部分中小站点的架构很简单,开源CMS+单一云服务器(虚拟主机)+CDN(这还是有点运维能力公司)。鉴于以上经验,导致本人完全没有意识到服务器架构方面也能出现问题。
一、收录异常的发现
从(图1)可以和明显的看出,在3月中下旬收录是偏向正常的,问题出现在3.31日-4.25日之间出现了浮动,也就是说,这个区间一定是站点出现了问题导致收录异常。
本人开始按常规方法排查,特别是服务器日志有些参数没有排除注意,以至于导致了问题发现,具体如下:
1.1、站长平台模拟爬虫抓取,正常。
1.2、搜索引擎爬虫抓取数量在提升,偏向正常。这里有异常,排查伪蜘蛛爬虫在抓数据,真实百度爬虫确实也在增长。
1.3、核心关键词排名浮动,但偏向且上升趋势靠前,目前核心大词处于前5名,正常。
1.4、服务器日志分析,爬虫对应的request_uri值(相对地址),暂属正常,请看下文。
1.5、服务器日志是阿里云的日志,http请求,7.18日、7.19日、7.20日以及7.26日出现小面积服务器500访问错误;但最多只出现有限的时间收录异常,不至于大范围不收录。
在服务器访问日志分析中,一般需要注意的项是:爬虫抓取时间值,爬虫页面URL值,爬虫在页面抓取顺序,时间内爬虫抓取数量,另一说蜘蛛IP值有权重高低之分(本人不确定,故不参考)
页面URL值:一般服务器日志是相对地址,本人诊断出现的问题在于忽略host值,真实抓取URL应该是,host+request_uri值组合。
页面抓取顺序:可检验网站架构的爬行情况,大概可以知道爬虫在网站页面中的爬行顺序,可以辅助使用爬虫软件或者开发经典爬虫(PY,PHP等)的爬行情况作为参考
时间内爬虫抓取数量:检验网站页面总量和时间段内抓取量的占比,判断网站的受欢迎程度。
说到这里,交代一下站点的服务器架构:
用的是负载均衡,文件服务器+数据服务器+前端服务器,数据服务器全部数据是由API接口、GET方式前端和app使用,网站URL是相对地址。服务器之间自然用的也是内网通讯。
综上,可能大家也看出有忽略的参数,是1.4中提到的日志host值,因为是相对地址,host+request_uri才是抓取的完整地址。一直忽略的Host值,原来是API的二级域名(图2)
说到这里,大家可能已经基本上可以确定知道原因了。
就是百度根本没有抓取到真实的页面URL,实际上抓取的是API域名+request_uri,
即假设数据库服务器API给前端渲染的数据路径是api.name.com,走内网IP,
抓取到的页面URL为:https://api.name.com/post/1.html
真实应该是外网IP的URL:https://www.name.com/post/1.html
既然核心问题已把握30%,下一步自然是数据证明,主要从几个点。
1、翻开发日志记录
2、4月前后的服务器日志整理对比
从1中发觉,4.13号负载均衡的数据服务器api取消代理,这样造成的后果是前端直接抓取了host主机值为api域名下的数据在前端渲染,因为是直接使用内网IP没经过代理,同时api二级域名为host主机值。
从2中发觉,4月前后日志的host主机值出现了改变,由www.name.com变成了api.name.com。
最终,问题就出现在host主机为api的站点,没有使用代理,也就是说只要api站点通过代理变成www的二级站点渲染即可。如果没有使用代理,百度GET返回的页面是内网IP,抓取到的也就是https://api.name.com/post/1.html 这个URL。
解决方案:
1、负载均衡的数据服务器api接口使用代理
2、Head区增加标签
3、前端渲染的HTML使用绝对路径
4、开发个API接口推送数据
本文完。鉴于本人仅是SEO,运维能力有限,单机服务器配置下站可以,负载均衡只是略微听过,如有运维方面错误之处请见谅。
作者:深圳传说