我有一个这样的数组:
$keywords = array( 'php', 'html', 'css' );
我有一个db查询来返回一个段落,其中包含先前在数组中提到的关键字。
我有一个像这样的链接模板:
$linktpl = '<a href="%s" title="%s">%s</a>';
我想要一个简单的函数来扫描该段落并在运行中,只要找到关键字,它就会使用上面的链接模板将其转换为链接。
如果可能的话,我希望它考虑到单数和复数(如框架和框架)
SEO是否可以安全地进行自动关键字链接?
任何想法?
答案 0 :(得分:4)
$string = 'this is the php test subject.';
// associate keywords with their urls
$urls = array(
'php' => 'http://www.php.net',
// and etc...
);
// this callback will take the matches from preg and generate the
// html link making use of the $urls dictionary
$linker = function($matches) use($urls) {
$urlKey = strtolower($matches[1]);
return sprintf(
'<a href="%s" title="%s">%s</a>',
$urls[$urlKey], $matches[1], $matches[1]
);
};
// do the magic
$regex = '/\b(' . preg_quote(implode('|', $keywords), '/') . ')\b/i';
preg_replace_callback($regex, $linker, $string);
使用正则表达式的好处是我们可以利用\b
修饰符来确保我们捕获(php)
,PHP.
或phpp
等案例并正确处理它们
答案 1 :(得分:2)
这可行,但不一定是最好的方法。它使用管道字符连接数组,并使用该字符串构建正则表达式。 preg_replace()
然后做其余的事情。要求您更改链接模板以使用preg_replace()
样式而不是printf()
样式
preg_replace("/\b(" . implode("|", $keywords) .")\b/", "<a href='\\1'>\\1</a>", $paragraph);
编辑:添加了\b
字边界,因此您只匹配整个单词而不是内部子字符串。
答案 2 :(得分:1)
首先,这看起来可能更复杂。也就是说,这将替换单词内的单词,如果我们script
javascript
,{{1}}这个词将是半链接,半字。如果你关心,我不知道。修复它的一种方法是在单词之前和之后添加空格。但同样,这就像它的问题一样,标点符号呢? (。,!?)等。
根据您的需要,您可能需要执行一些正则表达式并使其复杂化。如果您的文本可以包含链接,还可以在链接中创建链接。
只需要考虑一些事项。我认为在SO上有很多这样的例子,所以搜索这个网站以查看你能找到的内容可能是值得的。鉴于过于复杂,我无法提供该代码。如果您只需要简单的方法,那么已发布的其他人应该可以正常工作。
一些参考文献:
答案 3 :(得分:1)
对于您的主要问题,上述3个答案中的一个应该足够了。
关于这个问题:
and is it safe for SEO to make this automated keyword linking?
足够安全..
但有些问题需要解决
检查此SEO Guide by Google中的第13页。所以,它总是更好 有好的锚文本。我假设 通过这种方法你不会得到一个 非常合适的。
正如布拉德解释的那样,不要过分。 因此,可能只有2-3 每页关键字,每个链接1个 段落中的关键字和总计 一页中的6-7个链接。你需要 小心没有很多 链接。
“title属性指定额外的 有关元素的信息。“所以 在那里只倾倒一个关键字 可能没有帮助。
最好选择手动方法,而不是自动化搜索你的东西。
答案 4 :(得分:0)
str_replace()
几乎肯定是执行搜索/替换的最快方式
我建议你首先构建一系列搜索词,然后替换,然后执行替换。
$searches = array("php", "html", "css");
$replacements = array();
while($row = mysql_fetch_assoc($r) {
$replacements[] = sprintf($linktmpl, $row['url'], $row['title'], $row['word']);
}
$html = str_replace($searches, $replacements, $html);
答案 5 :(得分:0)
$paragraph = /* YOUR PARAGRAPH CONTENT */;
$paragraph = str_replace( array( 'php' , 'html' , 'css' ) , array( '<a href="url/php/" title="php">PHP</a>' , '<a href="url/html/" title="html">HTML</a>' , '<a href="url/css/" title="css">CSS</a>' ) , $paragraph );
答案 6 :(得分:0)
SEO是否可以安全地进行自动关键字链接?
取决于您如何使用它。如果它太明显并且搜索引擎看到一种模式,你可能会在一天醒来并发现你的网站被禁止使用SERPS。