使用正则表达式检测dofollow反向链接

时间:2014-03-19 07:58:53

标签: php regex

此正则表达式的目的是查找网页是否包含指定域的反向链接以及所有必须在标记上具有rel =“nofollow”属性。如果满足则为真,否则为假,如果任何不包含rel =“nofollow”。

在任何网页上,我想检查是否存在这样的内容:

<a ... href="http://www.mysite.com/xyz...." ... >

Addtionally 在找到的所有此类链接中一定不能有“rel = nofollow”属性。

鉴于域名www.mysite.com已知且我想在评论中或页面中的任何位置进行检查。

<小时/> 我可以自己做,但我无法想到使用单一模式的优化方式。

我可以通过href =“mysite.com”查找标签的所有出现,并查看即使单个匹配是否包含rel = nofollow,也可以使用一种未经优化的方式。

有没有聪明的&amp;制作正则表达式模式的单行方式?

PS:不想解析DOM,因为由于解析错误而错过反向链接存在风险,Google的DOM解析器可能会有所不同。我希望人们只关注那些可能导致搜索引擎遭受反向链接惩罚的网页链接。如果评论中的链接被标记为反向链接并且带走了一些人的注意力,那么没问题。但不惜任何代价来说,色情网站必须被抓住。最后,我想准备一份我可以在Google网站管理员Disavow tool中提交的垃圾链接列表。对于每个站点,每个网站管理员必须在一个月内完成此练习。我买不起这种付费服务:www.linkdetox.com

4 个答案:

答案 0 :(得分:2)

通常,使用正则表达式解析HTML是一个坏主意(这里是famous reason why)。你冒着奇怪的错误,因为正则表达式无法完全解析HTML。

但是,如果您的输入是&#34;安全&#34; (即没有改变很多,或者你已经为奇怪的错误做好了准备)并且回答你的问题,当你在a标签上时,你可以使用这样的东西来捕捉与{的链接{1}}您希望并且没有href

rel="nofollow"

演示:http://regex101.com/r/hC8lV9

<强>声明

这并不意味着检查您的输入是否格式正确,假设它的格式正确。这不会记录转义#<a\s+(?![^>]*rel\s*=\s*(['"])\s*nofollow\s*\1)[^>]*href\s*=\s*(["'])http://www.mysite.com[][\w-.~:/%?#@!$&'()*+,;=]*\2[^>]*> <a\s+ # start of the a tag followed by at least a space (?! # negative look-ahead: if there isn't... [^>]* # anything except tag closing bracket rel\s*=\s* # 'rel=', with spaces allowed (['"]) # capture the opening quote \s*nofollow\s* # nofollow \1 # closing quote is the same as captured opening one ) # end of negative look ahead [^>]* # anything but a closing tag href\s*=\s* # (["']) # capture opening quote http://www.mysite.com # the fixed part of your url [][\w-.~:%/?#@!$&'()*+,;=]* # url-allowed characters \2 # closing quote [^>]*> # "checks" that the tag is ending 或转义报价等内容,您很可能需要根据自己的需要进行调整。基本上,没有正则表达式会给出完整的答案

如果您需要处理各种输入或可能格式错误的HTML,解析器将比正则表达式执行更安全,更好的工作

但是我把这个放在这里,让你知道在这个问题上可以做些什么,因为在非常严格和狭义的环境中,正则表达式实际上可以是一个相关的解决方案。

答案 1 :(得分:1)

首先,不要使用正则表达式来解析网页的dom。 PHP得到了它自己的文档对象模型,它完成了整个工作。只需查看http://de1.php.net/manual/en/class.domdocument.phphttp://de1.php.net/manual/en/class.domxpath.php

答案 2 :(得分:1)

正则表达式

<a(?=[^>]*?rel=nofollow)(?=[^>]*?href="http:\/\/www\.mysite\.com\/.*?")[^>]*?>

如何运作

它使用正向前瞻来验证rel=nofollowhref="mysite标记的字符串。

在线演示: http://regex101.com/r/pX0yF5

答案 3 :(得分:0)

如果你一直在做关于建立链接的任何阅读,那么你可能已经看到有人提到nofollow和dofollow links。这些是非常重要的术语,可以帮助您了解何时建立回到您网站的精彩链接,以提高您的搜索引擎排名。但是,对于所有这一切都是新手的人来说,这可能会让人感到困惑。我打算帮你打破它。

要告诉蜘蛛抓取链接,您不必做任何事情。只需使用上面显示的格式,search engine蜘蛛就会抓取所提供的链接。