通过Ajax防止网站内容被搜索爬虫抓取

如网站部分内容只想让浏览者看到,而不想被搜索爬虫抓取,可通过Ajax动态加载页面内容,而不是直接在HTML中显示,页面源代码中也看不到隐藏的内容,搜索爬虫正常情况下不会识别Ajax加载的内容,自然也无法获取到,下面就说一下具体方法。

添加JS文件

在主题目录js目录添加一个名称为my-script的JS文件

/js/my-script.js

在其中添加:

jQuery(document).ready(function($) {
	var data = {
	'action': 'zm_action',
	'data': 'zm_data'
	};
	$.post(zm_script.ajax_url, data, function(response) {
		$('.zm-content').html(response);
	});
});
加载JS文件

将下面代码添加到主题函数模板functions.php文件中

// 加载JS文件
function load_zm_script() {
	wp_enqueue_script( 'my-script', get_template_directory_uri() . '/js/my-script.js', array('jquery'), '1.0', true );
	wp_localize_script( 'my-script', 'zm_script', array(
	'ajax_url' => admin_url( 'admin-ajax.php' )
	));
}
add_action( 'wp_enqueue_scripts', 'load_zm_script' );
添加Ajax动作函数

将下面代码添加到主题函数模板functions.php文件中

// 添加ajax动作
add_action('wp_ajax_zm_action', 'zm_action_callback');
add_action('wp_ajax_nopriv_zm_action', 'zm_action_callback'); 

function zm_action_callback() {
	echo '不想被搜索爬虫抓取的内容';
	wp_die();
}

修改其中的文字。

前端调用

最后,在准备显示内容的位置添加

<div class="zm-content"></div>

因文字内容是通过Ajax加载的,搜索爬虫抓取不到,只有正常打开网页才会看到。


上面的Ajax动作函数只是加载了一段文字,也可以调用WordPress文章,比如,随机调用5篇文章:

// 添加随机调用5篇文章Ajax动作
function zm_action_callback() {
	echo '<ul>';

	$args = array(
		'orderby' => 'rand',
		'posts_per_page' => 5
	);

	$query = new WP_Query( $args );
	while ( $query->have_posts() ) : $query->the_post();
		echo '<li>';
		echo '<a href="';
		echo the_permalink();
		echo '">';
		echo the_title();
		echo '</a>';
		echo '</li>';
	endwhile;
	wp_reset_postdata();
	echo '</ul>';
	wp_die();
}

上面代码同样加到functions.php,将:

echo '不想被搜索爬虫抓取的内容';

改为:

echo zm_acti_callback();

 

 

上述随机文章调用并不会被静态缓存,保持每次刷新随机显示文章。

通过Ajax防止网站内容被搜索爬虫抓取

本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!

weinxin
我的微信
微信号已复制
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
 
知更鸟
评论  4  访客  3  作者  1
    • 无不为
      无不为 4

      如果用密码保护是不是可以是另一种替代方案呢?
      把密码公开,任何想看的人都可以输入密码才能看到那部分文字。
      之所以这样想是因为jquery有时候弄不好会阻碍页面加载,所以不想引用jquery。

      • 咩票电影
        咩票电影 2

        靠搜索的应该就不能这样搞了

        • 蓝莲花
          蓝莲花 3

          上述随机文章调用并不会被静态缓存,这个怎么实现不被缓存的???

          我装了个缓存插件,最新文章一直排除不掉

        匿名

        发表评论

        匿名网友
        :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

        拖动滑块以完成验证