博客自从使用了第三方评论系统后就删除了Akismet插件,也很少去看wordpress系统自带的评论功能,没想到从五一放假到今天,不到半个月时间就被一些所谓的搜索引擎优化工具(scrapebox?)狂刷了近万条垃圾评论,要命的是还都自动审核通过了,还好我使用了第三方评论系统多说,因此那些垃圾评论在前台并没有显示,全部成为黑链存在博客的源码里。
因为被系统自动审核通过,无法一键清除,这些垃圾评论如果用wordpress自带的批量删除功能恐怕得删好些天(一次只能批量删除一页也就是20条评论),一怒之下进数据库将存放评论那张表清空了(当然备份肯定是要先做的),清空后打算使用多说的数据同步功能将没有垃圾的评论同步到wordpress本地评论系统中,结果竟只同步了几条待审核的评论,问了问多说官方的人获知原因:多说每次同步到本地的时候都会标记已经同步过的数据,当你清空了本地的数据之后,多说认为多说服务器上有的数据都是已经同步到了本地的,所以清空了本地数据之后再次同步会出现同步不到本地的情况,解决办法也比较简单:
进入phpmyadmin,在wordpress的数据库的 wp_options 里搜索 option-name like duoshuo% 的项目,其中有 duoshuo_last_log_id 的项目,把这个项目置为0,
另外,wp_commentmeta 表里,还记录了之前同步回去的数据的对应关系,需要把所有 meta_key 为 duoshuo_post_id 和duoshuo_parent_id 的项目全部删除掉,这些都是为了保证一条评论不被反复写入数据库而保存的项目,在这个表的SQL里分别执行:
delete from wp_commentmeta where meta_key=’duoshuo_parent_id’;
delete from wp_commentmeta where meta_key=’duoshuo_post_id’;
不过我这样做了却没有成功,这个情况比较奇怪,暂时无解。于是还原数据库,所有本地评论又回来了,仔细研究后发现这近万条垃圾评论都是4月17日到当前时间,还在增加中,由50个IP分别群发的,用户名是一些产品关键词,URL是对于的SEO目标页面,邮箱是随机生成的,内容是围绕产品关键词相关的语句,看起来十有八九应该就是scrapebox干的!当然我可以在数据库中直接将4月17日到今天的评论批量删除:
delete from wp_comments where `comment_date`>=’2013/4/17′ and `comment_date`<=’2013/5/10′;
但是正常的评论也会被删除,最佳办法就是通过那些垃圾评论关联的IP地址来删除,将所有收集的垃圾评论IP列表后通过excel改为SQL语句,EXCEL里这么写:
173.213.110.225 “delete from wp_comments where `comment_author_IP` = ‘”&A1&”‘;”
178.216.48.149 “delete from wp_comments where `comment_author_IP` = ‘”&A2&”‘;”
然后就得到了:
delete from wp_comments where `comment_author_IP` = ‘173.213.110.225’;
delete from wp_comments where `comment_author_IP` = ‘178.216.48.149’;
OK,放心大胆的去执行吧,删除垃圾评论如拔腋毛一样是件很爽的事儿!!
另外WordPress的Trackback也是一个极少用到却方便了SEO群发工具发送垃圾广告的通道
除了在后台关闭这个功能外(接受从其它博客的链接通知(pingback 和 trackback))
这样,以后新增的文章或页面就不会启用pingback和trackback功能了,如果之前的文章已经启用,需要进入WP数据库中,执行命令:
UPDATE wp_posts SET `ping_status` = ‘closed’;
即可关闭所有的pingback和trackback功能。