百度官方的WordPress插件Baidusubmit存在一个bug,会导致生成递交的sitemap里出现大量404链接。对于新站来说大量递交的404显然是对SEO有毁灭性的打击的(会导致被降权k站之类……),笔者自己就遭遇了这样的悲剧。
本文仔(luo)细(suo)地叙述了事情的经过以及推理的过程,最终给出了插件代码改进建议。
故事的开始都是美好的
前两天帮朋友用WordPress搭了个企业网站(http://www.wxjinri.com/),三天时间百度收录首页,曾经输入企业名搜索结果可以正常出现在第一页。
然后悲剧就开始了……
抓取频次直线下降,27号直接归零了……感觉就是被百度K了的节奏啊~
可是到底是哪里出了问题呢?百度站长平台能发现在22号和24号的时候都出现了大量的(虽然只有十几个,但是新站页面本来就不多)404抓取异常,即页面不存在,但是由于当时忘了开服务器访问日志,百度站长平台也没有提供抓取异常的链接具体位置。
其次,在某天凌晨我晕乎乎的关闭了SEO by Yoast的插件,导致description变空,第二天起床就发现百度搜不到排名了,不知道这是不是也是原因之一。
Baidusitemap……
还有一件诡异的事情就是Baidusubmit插件每天都有几十到好几百的递交量。
终于今天开启了BAE日志后发现了类似如下的记录——
123.125.71.49 www.wxjinri.com [2015-07-29 21:21:40] 200 1146 69648 2243 "GET /wp-content/plugins/baidusubmit/sitemap.php?m=sitemapall&start=1&p=c60af1349ced96b2 HTTP/1.1" "" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
也就是百度蜘蛛抓取baidusubmit插件生成的sitemap的记录,于是我加上域名访问了一下该链接(http://www.wxjinri.com/wp-content/plugins/baidusubmit/sitemap.php?m=sitemapall&start=1&p=c60af1349ced96b2),看看它到底生成了哪些sitemap……
点开以后我惊奇地发现里面有大量奇怪的链接,类似domain/2015/06/16/postname
这样,其中postname是一些menu的名字,例如会有domain/2015/06/16/首页,这样明显是404的页面链接。
那么问题来了,这些链接到底是怎样通过插件生成出来的呢?那就去分析一下Baidusubmit插件的源代码吧。
根目录下有main.php
是插件入口文件,这个文件末尾看到add_action('init', array('BaidusubmitGenerator', 'init'), 1000, 0);
,说明插件钩子的位置是init
,触发优先级为1000(优先级1是最先触发的意思),由于之前没有二次开发过WordPress,所以这次顺手查了一下init
钩子。http://codex.wordpress.org.cn/Plugin_API/Action_Reference/init 解释说:
Runs after WordPress has finished loading but b