给博客评论区链接增加跳转页并修改 nofollow 设置

浏览: 100 次浏览 作者: 去年夏天 分类: 技术文章 发布时间: 2024-04-28 15:02

简而言之就是本站被标记为风险网站了,折腾一番后发现是之前有个评论的站点域名到期后被钓鱼网站用了,我这边就被连坐了。之前就知道直链有这种风险,但想着小破站的评论量这么低,应该遇不到吧,结果打脸了。网上一番学习后,发现大家一般会用 2 种处理方式。

  1. 超过X月的评论,自动取消超链接。
  2. 给链接加上跳转页,设置 nofollow

确定解决方案

鉴于我本来就有外链跳转页,所以决定就用给链接加上跳转页的方式。

如何修改

如何修改呢?将以下代码片段加进主题function.php中即可,如果想要使用,请根据你自己主题做适配性修改,我只是从第9行的代码,改成了第11行代码的样子。
将评论区填写的地址替换为带goto跳转的版本。

function remove_comment_links() {
    global $comment;
    $url = get_comment_author_url();
    $author = get_comment_author();
    if ( empty( $url ) || 'http://' == $url )
        $return = $author;
    else
        //原始状态,仅添加nofollow,直链。
        //$return = "<a href='$url' rel='nofollow' target='_blank'>$author</a>";
        //使用跳转路径,必须根目录有 goto文件夹 放置index.php跳转文件,做了伪静态
        $return = "<a href='/goto/?url=$url' rel='ugc external noopener nofollow' target='_blank'>$author</a>";
    return $return;
}
add_filter('get_comment_author_link', 'remove_comment_links');
remove_filter('comment_text', 'make_clickable', 9);

关于 nofollow 外链是否传递权重

nofollow 标签有几种

页面的 nofollow 标签目前谷歌和必应所承认的有4种状态

  • 什么也不写:当做默认的 follow 链接

  • rel="sponsored": 用于标注广告、赞助商或其它因利益而存在的链接。(比如AFF返利,赞助商)

  • rel="ugc": 这个新属性/标签用于UGC(用户产生内容)。(如论坛的帖子、博客的评论之类的)

  • rel="nofollow": 这个老的属性/标签依然用于没有任何赞助、背书意味的链接,不直接传递排名权重。

后边三种其实都算 nofollow 的,都不会被直接索引,只是允许细化区分,以便于搜索引擎参考。
根据谷歌和必应的说法,对于一个非 follow 的直链外链,他们不会100%传递权重,会把这个网页上的标签当作一种建议,会根据算法综合其它因素来决定分多少权重。百度目前没听说跟进,只认 nofollow ,并且100%不传递权重。(能查到的百度这一块儿最近的是 2022 年的说法)

  • rel="noopener" 可防止新页面访问 window.opener 属性,并确保它在单独的进程中运行。
  • rel="noreferrer" 具有和 noopener 相同的效果,但会进一步阻止将 Referer 标头发送到新页面。
  • rel="noopener" 告诉搜索引擎,这个链接不是本站链接,对于比较新的浏览器,其作用相当于target='_blank'

总结一下 nofollow

  • 谷歌和必应搜索引擎,相比较更重视来自高权重页面的 nofollow 链接,而忽略低权重页面的 follow 链接。比如本站的一个高排名页面明显是被知乎的多次引用带出来的。
  • 为了搜索引擎兼容性最好在标注 ugc 或 sponsored 后,重复打上 nofollow 标签。
  • 非 follow 的链接不会被搜索引擎主动编入索引,但如果链接已经被编入索引,其他站点内对其的 nofollow 链接,会根据算法得到部分 SEO 权重。
  • 最好可能情况下,一切非你自己控制的用户生成的外链,都设置为:rel="ugc external noopener nofollow" 标记外链为:用户生成、非本站、传递Referer 标头但防止新页面访问 window.opener 属性、阻止蜘蛛爬行。
  • 默认状态下 WordPress 评论区是 ugc + nofollow 的,部分主题会修改这部分,需要自己检查一下,我的主题是从比较老的版本一路改上来的,当年 WP 还是不默认带 nofollow 的配置,所以是主题自己实现的,就只增加了 nofollow ,结果这次还是被连坐了。(可见只有 nofollow 不是免死金牌,还是要为外链负责的)
  • 但这里有个疑惑查了一圈也没明确答案,直链设置rel="ugc external noopener nofollow"与不动链接属性,使用跳转页并在跳转页中设置<meta name="robots" content="noindex, nofollow" />,对于搜索引擎有什么区别?
5 条评论
  • Kevin's Space

    2024-05-07 16:11

    我感觉现在设置nofo效果差不多,但是设置noindex,是确实不会被索引的~

  • 石樱灯笼

    2024-04-28 22:25

    谷歌纯扯蛋,Edge Legacy 和 Internet Explorer 根本就不识别noopener。谷歌那精神病没事就睁眼说瞎话然后靠其影响力把所有人都搞瘸了。

  • 石樱灯笼

    2024-04-28 22:03

    只要链接不是本站的,都应该加noopener。
    这个字段本质上不是给搜索引擎用的,是给浏览器用的。对于浏览器,子页面可以直接调用母页面的权限,既是一个功能特性,又是一个安全隐患。
    早期浏览器不支持a标签的rel=”noopener”,以至于wordpress曾有一阵发疯似的见到a标签就添加nofollow。
    参考资料:https://mathiasbynens.github.io/rel-noopener/

    1. 去年夏天

      2024-04-28 22:11

      是的,看谷歌的Developers docs Links to cross-origin destinations are unsafe 的说法是:从 Chromium 版本 88 开始, target=”_blank” 的链接默认启用 noopener 。明确指定 rel=”noopener” 有助于保护旧版浏览器(包括 Edge Legacy 和 Internet Explorer)的用户。

      1. 石樱灯笼

        2024-04-28 22:26

        谷歌纯扯蛋,Edge Legacy 和 Internet Explorer 根本就不识别noopener,必须用noreferrer才行。
        谷歌那精神病没事就睁眼说瞎话然后靠其影响力把所有人都搞瘸了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据