WordPress防采集最佳办法和解决思路

张子凡 WordPress优化 2022-04-26 14:03:46 阅读(...) 评论(11)

要想防止网站被恶意采集,那么就需要了解大多数的采集方式和规则,这样才能够反其道而行之的去屏蔽和防采集,有时候我们辛辛苦苦写的一些文章或者大批量的文章内容成为了别人的嫁衣,同时别人采集还增加服务器负担,想想就觉得不值得啊。

WordPress

子凡我之所以决定要做这个防采集的想法有很久了,是因为前段时间有个网站不断的换 IP 来采集我们泪雪网的问答内容,我禁用一个 IP,他换一个 IP,我后来把那个地区所有的 IP 段都屏蔽了,这才基本到止为止。我这么忙的人总不能每天把时间都花在去看服务器 IP,去屏蔽 IP 这件事情上吧?

于是终于下定决心来做这件事情了,以前是想通过随机给 WordPress 正文内容中插入网站名称的字词,然后通过内链样式隐藏,但是这样别人依旧能把内容采集过去,所以也迟迟没有这样做,后来突然反应过来,采集最重要的就是采集规则,而想要更好的采集就需要获取到文章列表,这下子就很好做了。

简单的来科普一下,采集时大多数人都是根据文章栏目和列表获取采集文章的 URL 链接,所以最重要的就是翻页,这也是几乎所有网站暴露网站所有文章的一种方式,那么最简单的解决办法就是让网站列表不能无止境的翻页,这样就算能采集几十篇的内容,也无法把整站的内容都采集走了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//WordPress 禁止翻页屏蔽/防采集
add_filter('pre_get_posts','fanly_basic_query_posts');
function fanly_basic_query_posts($wp_query) {
	if($wp_query->is_admin || !$wp_query->is_main_query()) return;
	if ($wp_query->is_home || $wp_query->is_archive || $wp_query->is_search) {
		$paged = 10;//超过 10 页后就显示 404
		if($paged && $wp_query->get('paged') > $paged){
			//404 页面
			$wp_query->set_404();
			status_header(404);
			nocache_headers();
			include(get_query_template('404'));//需要主题的 404.php
			die();
			//404 页面
		}
	}
}

把以上代码复制放到当前主题的 functions.php 文件中,就可以实现当 WordPress 翻页超过 10 页后就会调用 WordPress 主题的 404 页面,可以通过修改代码的 paged 参数值修改翻页数量来自定义。

代码中会对所有的列表页面都生效,首页、文章归档(分类、标签、日期)、搜索页面等都一视同仁,还可以根据自己需要添加判断,根据不同的列表做不同的限制,子凡这里就不展开分享了。

另外如果你的翻译使用的是 get_next_posts_link(string $label=null, int $max_page) 来翻页下一页,还可以通过设置最大翻页来避免出现翻页死链的情况出现。

别看上面代码行数多,其实 404 页面那整段可以直接使用跳转到首页,甚至直接使用 die 结束,我这里分享只是为了漂亮的结束为 404 页面而已。

如果为了更好的防止 WordPress 被采集,那么还可以针对 feed、站点地图 sitemap 等方面做屏蔽,因为 WordPress 的翻页都有 page 参数所以还可以服务器屏蔽路径的方式。让采集获取不到网站完整的列表链接基本就能防止很大一部分采集。

由于我们 WordPress 交流群有人在问具体的栏目自定义屏蔽页数怎么办,所以就再来稍微修整一下,一下代码中的数字“10”就是可以自定义的,根据后面的备注修改就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//WordPress 禁止翻页屏蔽/防采集(自动版本)
add_filter('pre_get_posts','fanly_basic_query_posts');
function fanly_basic_query_posts($wp_query) {
	if($wp_query->is_admin || !$wp_query->is_main_query()) return;
	$paged = $wp_query->get('paged');
	if (($wp_query->is_home && $paged > 10)//首页
		|| ($wp_query->is_category('news') && $paged > 10)//指定分类
		|| ($wp_query->is_category && $paged > 10)//分类
		|| ($wp_query->is_tag && $paged > 10)//标签
		|| ($wp_query->is_author && $paged > 10)//作者
		|| ($wp_query->is_archive && $paged > 10)//归档
		|| ($wp_query->is_search && $paged > 10)//搜索
	) {
		//404 页面
		$wp_query->set_404();
		status_header(404);
		nocache_headers();
		include(get_query_template('404'));//需要主题的 404.php
		die();
		//404 页面
	}
}

好啦,以上就是子凡针对 WordPress 防采集提供的一段代码,自我感觉最实用最佳的防止采集的办法及解决思路,如果你有更好的解决方法,欢迎留言告诉我。

更多关于WordPress优化及疑问可以添加QQ群:255308000

除非注明,否则均为泪雪博客原创文章,禁止任何形式转载

本文链接:https://zhangzifan.com/wordpress-prevent-acquisition.html

发表评论

  1. 鸟叔
    1楼
    鸟叔 前天 18:48

    有人采集的,连个原文链接都不放,实在可恨

    • 张子凡
      回复
      张子凡 昨天 08:24
      回复 @鸟叔 :如果都放链接了,那都算是他转载了,如果真的放原文链接了,就不可恨了,哈哈哈
  2. 芭比
    2楼
    芭比 3 天前

    又多了一个wordpress小知识

  3. 莫大
    3楼
    莫大 05月01日

    似乎没啥用,很多人直接找你的网站地图,有你所有的文章url

    • 张子凡
      回复
      张子凡 05月03日
      回复 @莫大 :互联网展现的东西,没有绝对的隐蔽,而且同理网站收录率很好,网站地图也是一种可有可无的存在。
  4. 达怪
    4楼
    达怪 04月27日

    那么正常情况下的翻页浏览,超过10页也会被干掉么么?

    • 张子凡
      回复
      张子凡 04月27日
      回复 @达怪 :是的,根据自己需求设置,反正超过就没法继续阅读浏览翻页内容,包括搜索引擎,当然其实这些翻页对于网站优化其实没有那么多的帮助,而且还容易造成重复页。
  5. 笑话大全
    5楼
    笑话大全 04月27日

    防止恶意采集是网站长久运营必须要走的路,未雨绸缪总是好的。

    • 张子凡
      回复
      张子凡 04月27日
      回复 @笑话大全 :避免采集这种事情总是好的,就算是再好的原创,被一些站采集走了也会抢自己的流量,所以提前备着也可以。
  6. 明月登楼
    6楼
    明月登楼 04月26日

    从来没有管过采集的,因为我发现这些搞采集的其实就是在变相的给我做外链建设!倒是省了我很多事儿,当然有个前提就是内容一定要是原创的,原创越多越不怕被采集,反而采集越多越好!搜索引擎的智商是越来越高了!

    • 张子凡
      回复
      张子凡 04月27日
      回复 @明月登楼 :唉,采集得人但凡有点良心给我留外链,我也不至于要来防止采集。采集过去主要也没看他网站有啥权重,但是不断的来抓取我网站数据就浪费带宽和暂用资源了。