前言
wordpress的文章中,经常会带有链接,包含站内链接和站外链接。如果是站内链接,一般是在新窗口中打开。而对于站外链接,需要注意加上rel=”nofollow”属性,告诉搜索引擎”不要追踪此网页上的链接或不要追踪此特定链接。这两点看似不重要,但是却是影响体验及SEO的重要点。
关于nofollow
nofollow是一个HTML标签的属性值。它的出现为网站管理员提供了一种方式,即告诉搜索引擎”不要追踪此网页上的链接”或”不要追踪此特定链接”。
nofollow标签是一个“反垃圾链接”的标签,告诉搜索引擎这个链接不是经过作者信任的,引用nofollow标签的目的是:用于指示搜索引擎不要追踪(即抓取)网页上的带有nofollow属性的任何出站链接,以减少垃圾链接的分散网站权重!
简单的说就是,如果A网页上有一个链接指向B网页,但A网页给这个链接加上了 rel=”nofollow” 标注,则搜索引擎不把A网页计算入B网页的反向链接。搜索引擎看到这个标签就可能减少或完全取消链接的投票权重。
解决方案
在functions.php的地步加上以上代码即可,非常重要的一步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
// 文章外部链接加上nofollow add_filter( 'the_content', 'cn_nf_url_parse'); function cn_nf_url_parse( $content ) { $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>"; if(preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) { if( !empty($matches) ) { $srcUrl = get_option('siteurl'); for ($i=0; $i < count($matches); $i++) { $tag = $matches[$i][0]; $tag2 = $matches[$i][0]; $url = $matches[$i][0]; $noFollow = ''; $pattern = '/target\s*=\s*"\s*_blank\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' target="_blank" '; $pattern = '/rel\s*=\s*"\s*[n|d]ofollow\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' rel="nofollow" '; $pos = strpos($url,$srcUrl); if ($pos === false) { $tag = rtrim ($tag,'>'); $tag .= $noFollow.'>'; $content = str_replace($tag2,$tag,$content); } } } } $content = str_replace(']]>', ']]>', $content); return $content; } |
效果
此代码会自动给文章及页面的站外链接添加nofollow属性(rel=”nofollow”),并且在新窗口打开这些链接(即添加 target=”_blank”属性)。如果已手动给链接添加 rel=”dofollow”或target=”_blank”,就不会重复添加对应属性。
不错 谢谢大神 我找了好多代码 就你的好了
已测试,还是本窗口打开,本站连接也加上了nofollow
可以用,楼主很棒