我的工作要求我向我们网站上的 WordPress RSS 提要添加 rel='nofollow'
。现在 RSS 提要 已经 将 rel='nofollow'
添加到所有工作正常的 <a href>
标签中。他们真正要求的是将 nofollow
添加到实际的 RSS node
本身。
他们基本上想要 <link rel='nofollow'>
而不是 <link>
在节点级别添加 nofollow
实际上会做任何事情吗?我知道它在 href
级别工作,但在这里这样做似乎很奇怪。如果这确实按预期工作,那么使用 PHP 如何修改此节点以添加此命名空间?
这是我的 RSS 提要的示例。
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>
<channel>
<title>Article Title here</title>
<link>http://fakewebsiteurl.com</link>
<description>article description here</description>
<language>en-US</language>
<generator>https://wordpress.org/?v=4.5.2</generator>
<item>
<title>Test Article</title>
<link>http://fakewebsiteurl.com/news/test-article/</link>
<comments>http://fakewebsiteurl.com/news/test-article/#respond</comments>
<pubDate>Thu, 05 May 2016 18:16:50 +0000</pubDate>
<description><![CDATA[<p>Description text here</p>
<p>The post <a rel="nofollow" href="fakewebsiteurl.com/news/test-article/">Test Article</a> appeared here</p>
]]></description>
</item>
<item>
...
</item>
</channel>
我有一个自定义的 PHP 页面,它已经修改了这个 RSS,但我不确定是否需要完全替换节点,或者是否可以直接修改它。我正在考虑使用
str_replace
但这没有用。<?php
namespace X;
class RssFeed {
public function __construct() {
add_filter( 'the_content_feed', array( $this, 'add_nofollow_href' ) );
}
function add_nofollow_namespace($content) {
if (is_feed()) {
$link = '<link>';
$linkno = '<link rel="nofollow">';
$updated = str_replace($link, $linkno, $content);
return $updated;
}
}
}
?>
提前致谢。代码示例表示赞赏。
最佳答案
我使用 rel="nofollow"
标签上的 <link>
属性测试了 W3C Feed Validator:
所以修改后的提要不会 validate :
根据 rss2 规范,<link>
标记是 required,因此删除(通过插件或自定义模板)不是一个选项。一种激进的方法是完全禁用整个提要(例如提到的 here )。
可以通过 rss2_ns
Hook 和自定义 channel 节点通过 rss2_head
Hook 添加自定义命名空间。原子命名空间已经包含在以下自我关系中:
<atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
出于好奇,我测试了:
<atom:link href="<?php bloginfo_rss('url'); ?>"
rel="nofollow" type="application/rss+xml" />
这提供了一个有效的提要,但有关于
nofollow
为未注册的 link relationship 的警告。但我不确定搜索机器人是否会考虑这种方法?上一个答案:
除了创建自定义提要模板(如@mevius 所述)之外,我能想到的唯一解决方法是通过
rss_tag_pre
和 rss2_head
Hook 进行以下输出缓冲攻击:add_action( 'rss_tag_pre', function( $tag )
{
if( 'rss2' === $tag )
ob_start();
} );
add_action( 'rss2_head', function()
{
echo str_replace( '<link>', '<link rel="nofollow">', ob_get_clean() );
} );
我们的目标是 rss2 提要模板。
如果您认为拥有这样一个属性是值得的,那么您可以随时为它创建一个 ticket。