网站建设

WordPress针对百度星火计划2.0原创保护的优化措施

Jager · 1月23日 · 2016年 · · 5928次已读

今天在看百度站长平台的时候,发现 1 月 18 日发布了一篇介绍星火计划 2.0 的文章。仔细看了下,感觉到可用之处,就对张戈博客加了一些代码,算是针对性优化。WordPress针对百度星火计划2.0原创保护的优化措施

下面分享给大家,推荐使用!

一、星火计划

什么时候百度星火计划?其实我也是第一次听到,不过其内容肯定是像我这种原创博客都非常关心的——原创保护。

文章介绍中提到了什么是原创和伪原创,看得我都不想因为本文摘抄其内容而变成了伪原创了。所以感兴趣的可以自己点开看:http://zhanzhang.baidu.com/college/articleinfo?id=782

总之,百度星火计划就是对原创文章进行保护,让那些只会采集剽窃、甚至是篡改他人作品的网站统统死啦啦的。

就像文章说的一样(无奈,我还是要摘抄一下):

星火计划 2.0 项目的意义:
1,对于有转载的原创网页,百度搜索会从众多相同内容中识别出原创网页,使之在搜索结果中的排序不被对应的转载网页超越;
2,对于通过百度站长平台主动推送的原创数据,我们在识别成功后,会在搜索结果处进行“原创”标记 ,进一步凸显原创内容的价值,为原创者正名。

不过,对于是否真的不被超越,比如站长之家转载了张戈博客文章之类的,咱们拭目以待!

二、如何优化

文章的最后提到了网站针对星火计划能够进行的一些优化措施,具体为:

①、使用百度站长平台的主动推送链接功能

这是必须的,原创与否的先决条件肯定是谁发布的早!作为原创的我们,点击发布的同时立即向百度推送发布通知,告知这篇文章是从我们博客首发的,其他相同或相似的文章统统是转载或伪原创!

对于开启这个主动推送功能,有多种方式:

  • 百度提供的通用 js 代码(貌似不支持 https,会报错)【相关文章
  • 百度主动推送插件(张戈博客优化版)【相关文章
  • 百度主动推送代码(张戈博客原创版)【相关文章

其中,第一个 js 代码适合所有建站程序,而且实现简单,推荐使用!后面一个是插件一个是代码,只适合 WordPress,当然最终功能都一样,自行选择即可。

②、在网站添加星火计划可识别的 Meta 标签

如下是百度文章中分享的 DEMO:

<meta property="og:type" content="article"/>
<!-- 该字段是固定且必选的,表明当前页面类型符合 OG 协议中的文章作品类型 -->
<meta property="article:published_time" content="2015-12-16T17:47:53+08:00" /> 
<!-- 最早发布时间,该字段必选,可以不在页面中做展示,内容格式要求符合 ISO8601 规范的 UTC 格式,标准格式应当是“YYYY-MM-DDTHH:MM:SS+时区” -->
<meta property="article:author" content="百度站长平台" /> 
<!-- 作者署名字段必选,需要在页面做展示 -->
<!-- *如果该文章由多个作者共同完成,可再加一行作者署名代码:<meta property="article:author" content="百度站长学院"/> -->
<meta property="article:published_first" content="百度站长平台, http://zhanzhang.baidu.com/college/articleinfo?id=744" /> 
<!-- 原发媒体名称和链接,用于区分原创和转载,该字段为可选。原创时,链接与自身相同;转载时,链接是另外不同的地址-->

会 DIY 的朋友基本不用往下看就能自己动手修改了吧?、

三、部署代码

将如下代码添加到 WordPress 主题的 functions.php 当中即可在前台输出星火计划代码:

2016-05-20 更新:补充适合 360 搜索的智能摘要 Meta 申明。

/**
* WordPress 星火计划原创保护专用 META 优化代码(最终版) By 张戈博客
* 文章地址:https://zhang.ge/5084.html
*/
add_action('wp_head', 'starfire',0);
if(!function_exists('starfire')){
  function starfire(){
    //新增判断,如果是原创文章才加入星火计划 META 申明
     global $wpdb;
     $post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
     $copy = get_post_meta($post_id , 'author', true);
     if (is_singular() && empty($copy)) {
        date_default_timezone_set('PRC');
        echo '<meta property="og:type" content="article"/>
        <meta property="article:published_time" content="'.get_the_date('c').'"/>
        <meta property="og:release_date" content="'.get_the_date('c').'"/>
        <meta property="article:author" content="';bloginfo('name'); echo '" />';
        echo '<meta property="og:author" content="';bloginfo('name');echo '" />';
        echo '<meta property="og:url" content="';the_permalink(); echo '"/>';
        //输出文章标题+分隔符+网站名称,不喜欢这种形式的请自行改造(如果不需要这个标签,请删除以下三行)。
        echo '<meta property="og:title" content="'.trim(wp_title('',0)).' | '; bloginfo('name'); echo '" />';
        //输出博客名称,如果想改成其他内容,比如作者请自行修改 bloginfo('name')
        echo '<meta property="article:published_first" content="';bloginfo('name');echo ',';
        the_permalink();
        //默认截取文章 220 个字作为摘要,可以自行修改下行 220 为其他整数
        echo '" /><meta property="og:description" content="'.get_mypost_excerpt($post_id, 220).'……" />
        <meta property="og:image" content="'.get_mypost_thumbnail($post_id).'" />
        <meta itemprop="image" content="' . get_mypost_thumbnail($post_id) . '" />';
    }
  }
}
/**
* WordPress 获取文章摘要整理版 By 张戈博客
*/
function get_mypost_excerpt($post_ID,$len){
    if (!function_exists('utf8Substr')) {
        function utf8Substr($str, $from, $len) {
            return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                '$1',$str);
        }
    }
    if(!$post_content){
            $post = get_post($post_ID);
            $post_content = $post->post_content;
   }
    if ($post->post_excerpt) {
            $description  = $post->post_excerpt;
    } else {
        if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
            $post_content = $result['1'];
        } else {
            $post_content_r = explode("\n",trim(strip_tags($post->post_content)));
            $post_content = $post_content_r['0'];
        }
        $description = utf8Substr($post_content,0,$len);
        return $description;
    }
}
/**
* WordPress 获取文章图片加强版 By 张戈博客
*/
function get_mypost_thumbnail($post_ID){
    if (has_post_thumbnail()) {
            $timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), 'full' ); 
            $url = $timthumb_src[0];
    } else {
        if(!$post_content){
            $post = get_post($post_ID);
            $post_content = $post->post_content;
        }
        preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', do_shortcode($post_content), $matches);
        if( $matches && isset($matches[1]) && isset($matches[1][0]) ){       
            $url =  $matches[1][0];
        }else{
            $url =  '';
        }
    }
    return $url;
}

Ps:以上代码利用 wp_head()函数将星火计划代码输出到前台,如果分享上述代码没有效果,说明你的主题未在 header.php 中调用 wp_head() 函数,请自行解决。

三、前台效果

成功加入代码后,刷新网站前台,然后查看源代码就能看到效果了:

WordPress针对百度星火计划2.0原创保护的优化措施

五、其他说明

2016 年 02 月 13 日发现百度站长平台发布了关于星火计划违规的通知【传送门】,看了下原来滥用星火计划也可能坏事。

所以,我们只需要提交原创文章,转载或整理分布的文章最好不要放置这个星火计划 META 申明。

那我们如何来控制是否放置代码呢?很简单,使用文章自定义栏目即可(上文代码已支持)!

①、自定义栏目

如果不是原创文章,我们可以新增一个自定义栏目,比如 author,值任意或者填写原文地址,而原创文章则不新增这个栏目:WordPress针对百度星火计划2.0原创保护的优化措施

②、回溯修改

接下来我们需要在非原创文章中新增自定义栏目 author,值为非空任意值,比如就填写原文地址或数字等,这个随你了。否则,没有这个标签的文章都会当作原创处理!

好了,如上修改后,代码就只会在原创文章页面中插入星火计划的 META 申明了,不至于违反百度的游戏规则咯!

80 条回应
  1. 邢台网站建设 2016-1-23 · 21:56

    感谢 这种有时效性的东西才是真的有价值 32个赞 希望百度别再呼(chui)。。。

  2. 七支剑 2016-1-23 · 23:27

    曲径通幽,逼格更高 浓浓的绅士味道 :grin:

  3. 图解电影 2016-1-25 · 13:22

    博主,你的这篇文章电脑端怎么不显示呢?我是从手机复制链接粘贴到电脑上才找到的。我换了好几个浏览器都是这样,首页最早的文章是那个利用js生成图片的文章。好神奇。

    • avatar
      Jager 2016-1-26 · 14:59

      不同网络访问到的节点不一样,首页缓存也不一样,所以有差别。

  4. 香港虚拟主机 2016-1-25 · 15:00

    保护原创的话,只需要把所有页面搞成只读的就可以了吧,这样别人想复制都没机会

    • avatar
      Jager 2016-1-26 · 15:24

      只读对采集软件没有影响,而且还有损用户体验。比如,文章有代码就需要复制吧

  5. aunsen 2016-1-25 · 15:16

    我比较怀疑百毒的德行

  6. 余斗余斗 2016-1-25 · 16:48

    不错!这么快就用上了!

  7. Summer 2016-1-25 · 18:12

    正好在找这个代码,感谢博主!

  8. rainman 2016-1-26 · 1:48

    我觉得即使是站长之家转载了您的文章,您的排名也应该排在站长之家之前。
    原创就是原创,对这篇文章有绝对的解释权,也可以为评论区的一些网友答疑解惑。
    至于原创网址旁显示「原创」标记,相信这是所有网友都支持的。
    (然而如果百度误判了将转载网页标上「原创」二字那么原创作者是不是心更塞了 :shock: )

    • avatar
      Jager 2016-1-26 · 15:25

      我擦,那确实跟吃了苍蝇一样郁闷。

      • rainman 2016-1-27 · 0:31

        是的,所以这样的保护原创计划虽然好,但也是对百度的考验。同时百度也提到了「伪原创」,我倒是觉得伪原创比转载不标版权更讨厌,改成伪原创之后晦涩难懂,让很多想看文章的网友一头包- -

  9. 图解电影 2016-1-26 · 19:22

    博主,看你把网址升级成https模式已经快两个月了,貌似百度并没有怎么领情啊,至今未收录https,收录还是1.0时的网址。现在真的有必要升级吗,还是等百度完善后再考虑更好一些?

    • avatar
      Jager 2016-1-26 · 19:29

      百度自己启用了https,都没被收录。
      这个东西随便吧,想怎么弄就怎么弄,个人网站折腾第一。

  10. joieching 2016-1-26 · 22:33

    赞一个!!!

  11. 管理学书籍 2016-1-26 · 23:17

    这个,,获取当前页面地址需要这么麻烦么,直接the_permalink(),还有PHP输出百度要求的标准时间是date('c'),WORDPRESS的话在FUNCTION里加date_default_timezone_set('PRC')就可以使用get_the_date('c')输出+8了,记得ECHO哦,另外管理学书籍http://www.12reads.cn是直接为single制作一个HEADER哈。

    • avatar
      Jager 2016-1-27 · 10:53

      :!: 是我搞复杂了,我这个算是加强版的获取页面地址,排除各种多余参数,适合所有WordPress页面。待会更新下文章,多谢提醒。

  12. 好文章 2016-1-27 · 9:25

    支持一下

  13. 帅气小琦琦 2016-1-27 · 10:26

    其实怎么说呢,现在的软文已经越来越多了,其实这里我也说来惭愧,我也是讲别人的WordPress代码自己操作一番之后在用自己的话写出一篇文章,不知道这样的文章是不是原创呢?已经分不清楚了

  14. aunsen 2016-1-27 · 17:48

    刷了好几次才刷出来页面,而且文章底部的分享按钮错位了,火狐43下

  15. aunsen 2016-1-27 · 17:51

    发发阿 啊疯额

  16. aunsen 2016-1-27 · 17:54

    发发阿啊疯额

  17. yyyyyyyhb 2016-1-28 · 16:17

    度娘歧视PW,不理他,这星火计划到底有多少用处也不知道,毕竟有HTTPS的前车之鉴

  18. 樱花木叶 2016-1-28 · 16:33

    第一段代码那里好像多了一个<?php,就是第一个?直接复制出现500错误了

  19. boke112导航 2016-1-30 · 10:09

    看来我也要赶紧加上这些代码才行,谢谢分享

  20. Gengsir 2016-1-30 · 10:29

    博主你好~发现一小段注释可能在某些主题上不太适合~

            //输出博客名称,如果想改成其他内容,比如作者请自行修改 bloginfo('name')
            echo '
            //默认截取文章220个字作为摘要,可以自行修改下行220为其他整数
            ID, 220).'……" /&gt;
            ID).'" /&gt;';

    在9iPHP主题中,这一段注释(//默认截取文章220个字作为摘要,可以自行修改下行220为其他整数)直接在最上方显示 现在呢我自己已经去掉 :razz:

    • avatar
      Jager 2016-1-30 · 13:48

      没看明白你的意思。。。

      • 帅气小琦琦 2016-1-31 · 13:17

        就是注释会出现在移动端的文章上方 我还以为少了一个'; 看来并不是这样

        • avatar
          Jager 2016-1-31 · 19:23

          是写错了,文章已更新。修改如下即可:

           the_permalink();
                  //默认截取文章220个字作为摘要,可以自行修改下行220为其他整数
                  echo '" /><meta property="og:description" content="'.get_mypost_excerpt($post->ID, 220).'……" />
          
      • 黑苹果乐园 2016-1-31 · 23:12

        他意思谁说这段注释没有被注释掉,网页中还是会显示。

  21. 陌小雨博客 2016-1-30 · 17:21

    经常过来偷学xin技能,不冒泡都不好意思了 :lol:

  22. 微页网站目录 2016-1-30 · 19:54

    WordPress开发的人真多

  23. 帅气小琦琦 2016-1-31 · 13:07

    版本II代码中的第24行 貌似少了'; 在移动端会显示下面的注释语

    • avatar
      Jager 2016-1-31 · 19:30

      是由这个问题,手误。
      已修改。

  24. 西贝博客 2016-2-1 · 19:59

    好东西!赞一个!

  25. 流星 2016-2-3 · 22:35

    博主你那代码背景选择框怎么弄的?有编号那个

  26. 明月登楼 2016-2-4 · 22:57

    纯原创的网站可以这样搞搞!

    • avatar
      Jager 2016-2-19 · 9:27

      已加入原创文章判断,都可以用

      • 明月登楼 2016-2-20 · 0:51

        噢!那我得试试了!谢谢了!

  27. 上谷歌 2016-2-7 · 21:10

    这样的好东西是必须要顶的

  28. 跨境电商 2016-2-10 · 14:06

    非常不错!感谢!

  29. Qa 2016-2-11 · 2:06

    原来还有这玩意要添加

  30. 楚书业 2016-2-17 · 16:36

    直接扔就可以了吧?跟主题应该没啥关系?

    • avatar
      Jager 2016-2-17 · 18:27

      没啥关系,扔了后前台确认下代码即可。

  31. MC服主网 2016-2-18 · 21:54

    你好Jager我又来了- -请问这个代码部署之后为什么源码看星火og协议的meta段没有换行呢- -你的网站是http压缩了我的没有……

    • avatar
      Jager 2016-2-19 · 9:12

      是没有加入换行符,没啥必要。效果一样。

  32. 明月登楼 2016-2-20 · 1:02

    最后的完善版本有一个问题呀?
    比如已经有很多文章的博客,用起来不是要把以前的文章都添加以便自定义域了,可不可以判断自定义域来认定是原创文章,这样可以在以后使用时用自定义域来表明原创!

  33. Qa 2016-2-29 · 12:09

    获取图片有个蛋疼的问题,现在网站一般都是开了CDN加速的。图片地址变成二级CDN域名了。这个代码抓取的图片地址也是CDN地址而不是原地址。

    • avatar
      Jager 2016-2-29 · 18:27

      图片二级域名不影响SEO

  34. 狂族晨曦 2016-3-5 · 23:26

    弱弱的问一下,"新增自定义栏目author",是需要自己在文章编辑下面点击"输入新栏目"输入"author",而不会在functions.php添加代码后自动出现"author自定义栏目"吧?

    • avatar
      Jager 2016-3-6 · 13:31

      恩,是的,如果不是原创的文章,就新增一个author的自定义栏目,值可以输入原文地址啥的。

      • 狂族晨曦 2016-3-6 · 13:34

        谢谢张哥,另外怎么今天访问你的博客的时候经常弹出窗口“请求超时,请稍后再试”啊?

  35. 明月登楼 2016-3-28 · 17:13

    跪求博主赐教:

    $copy = get_post_meta($post-&gt;ID, 'author', true);
        if (is_singular() &amp;&amp; empty($copy)) {

    这里我想改成有author自定义栏目的才认定为原创文章,怎么修改呢?

    • avatar
      Jager 2016-3-28 · 18:56
         $copy = get_post_meta($post-&gt;ID, 'author', true);
          if (is_singular() &amp;&amp; !empty($copy)) {
      

      加一个惊叹号取反即可,表示自定义栏目不为空

      • 明月登楼 2016-3-28 · 19:50

        十分的感谢,晚上就去试试看!

      • 明月登楼 2016-3-28 · 21:21

        博主,不行呀!只要我加上你的代码,我所有的文章都是原创了!都会出现星火计划的的,郁闷呀!感觉哪个判断的根本就不起作用了!

        • avatar
          Jager 2016-3-29 · 13:31

          不可能,逻辑上没问题,先取得自定义字段author的值,如果自定义字段不为空才执行插入代码。

          • 新马甲 2016-4-21 · 23:13

            博主,$copy = get_post_meta($post->ID, 'author', true);这段代码好像获取不到值,所以会造成所有文章都是原创星火计划的代码。

            • avatar
              Jager 2016-4-22 · 13:07

              我自己一直用的好好的

  36. alex 2016-4-6 · 13:50

    你好,个人觉得og的标签还是很有用的,如果有人想分享文章到facebook或者twitter的话,og的标签能够很方便的提示抓取那些内容。比如我的网站以前没有og的标签,用文章底部的分享按钮到facebook的话,facebook那里显示的特色图片就非常混乱,感觉是随便抓了张图片显示过去,根本不是本篇文章的图片。现在加了代码之后,就非常准确了。所以每篇文章不管是不是原创都应该加og的标签。对于社交软件的分享会有非常大的帮助。
    另外,我看到知更鸟主题里实际上已经有了一个copyright的自定义栏目,觉得不需要再自定义author了。
    所以我把你的代码稍微改了一下,在function中加了后面的两段定义,然后直接在header中间直接加了

    <meta property="article:author" content="" />
    <meta property="og:description" content="" />
    <meta property="og:url" content=""/>
    <meta property="og:image" content="" />
    ID, 'copyright', true) ) : ?>
    ID, 'copyright', true); ?>
    <meta property="article:published_time" content=""/>

    <meta property="article:published_time" content=""/>
    <meta property="article:published_first" content=", " />

    这样如果是转载的文章就不会输出published_first的内容,而如果是原创的话就会输出这部分内容,应该就比较好了。想和您探讨一下。
    另外,因为我的网站有些文章是其他朋友投稿的,所以我想把article:author的内容从blog的名字改成作者名字,但是用了的函数,显示的始终是空值,换了其他的几个函数也是一样,我的理解是不是因为在之前的都是没有进入loop循环的,所以输出不了author的这些函数,那么应该如何修改呢,百度了一上午也没能找到。

    • avatar
      Jager 2016-4-6 · 15:20

      get_post_meta($post->ID, 'author', true); 这样拿不到值?

      • alex 2016-4-6 · 15:50

        拿不到,显示的都是空值,
        是直接在和之间加入

        &lt;meta property=&quot;article:author&quot; content=&quot;ID, 'author', true); ?&gt;" /&gt;

        最后显示的就是

        
        
        • alex 2016-4-6 · 15:52

          为什么显示的代码有问题,

          &lt;meta property=&quot;article:author&quot; content=&quot;ID, 'author', true); ?&gt;" /&gt;&lt;
          • avatar
            Jager 2016-4-6 · 22:17

            估计是作用域不一样,考虑新增一个函数,专门取值或输出,放到functions,然后调用这个函数即可。

  37. Summer 2016-4-6 · 19:19

    已经不知道到底那一个可以用了!

    /**
    * WordPress 星火计划原创保护专用META优化代码 By Jager博客
    * 文章地址:https://zhang.ge/5084.html
    */
    add_action('wp_head', 'starfire',0);
    if(!function_exists('starfire')){
      function starfire(){
        if (is_singular()) {
            date_default_timezone_set('PRC');
            echo '
            
            
            ';
        }
      }
    }

    这个还可以用吗?

    • avatar
      Jager 2016-4-6 · 22:16

      把文章从头到尾,不错过任何细节看一遍,就知道该用哪一个代码了,太浮躁了不好。

  38. 狂族晨曦 2016-4-12 · 15:21

    og:type中的content可不可以填两个呢?百度让填的是"article",360只能摘要要求的又是"blog",能不能直接填content="article;blog"这种呢?

    • avatar
      Jager 2016-4-12 · 15:27

      另外起一行

  39. 时光在路上 2016-6-21 · 1:44
    $copy = get_post_meta($post-&gt;ID, 'author', true);

    这段代码在使用

     is_singular() &amp;&amp; empty($copy) 

    时不起作用。你在后面回复网友时说:”考虑新增一个函数,专门取值或输出,放到functions“。能具体说一下么?本人小白,望赐教

    • avatar
      Jager 2016-6-22 · 9:14

      将以下代码加入functions.php

      function get_meta_key(){
           global $wpdb;
           $post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
           $copy = get_post_meta($post_id , 'author', true);
           return $copy;
      }

      然后将

      $copy = get_post_meta($post-&gt;ID, 'author', true);

      改成

      $copy = get_meta_key();

      试试。

      • 时光在路上 2016-6-23 · 11:31

        这回成了。谢谢大牛,已经把你放在友情链接里面了。从你这里学到了不少知识。

        • avatar
          Jager 2016-6-23 · 14:11

          我已经在整个代码中添加了这个代码,不需要额外添加函数。

  40. 李光春 2016-12-20 · 0:07

    我也加入了。

  41. 老金@金博客 2017-2-28 · 12:05

    看了很多遍,想加入,有没有简单的一键方法?

  42. 33小游戏 2017-3-29 · 10:01

    张哥的博客对wordpress含金量很高啊,有没有关于wordpress的category和tag的短连接方面的文章啊

    • avatar
      Jager 2017-3-29 · 17:01

      这个真没有。。

      • 33小游戏 2017-3-30 · 8:51

        我就是想/category/xx/page/2/ 变成 xx/page_2.html 有没有办法啊啊 张哥 tag同样

  43. 耐腐蚀泵 2017-6-17 · 9:50

    感谢Jager,已成功应用,并引用了你的代码,见:http://www.mydidi.com/didi-dangan/1060.html 正文送外链两个表示感谢 :smile: 。

  44. 大火船 2019-10-31 · 21:03

    return $description; 的位置错了