php网站可通过五种策略为外链添加rel="nofollow"以集中页面权重:一、正则匹配自动标注站外链接;二、wordpress钩子过滤文章内容;三、discuz!发帖时解析url并规范协议;四、帝国cms手工编写导航代码;五、织梦cms修改channel.lib.php动态注入属性。

如果您在PHP网站中发现页面权重被大量外部链接或低价值内部链接分散,导致核心内容页排名下降,则可能是由于未对非关键链接施加权重控制机制。以下是实现Nofollow属性以集中页面权重的多种策略:
一、为站外链接自动添加rel="nofollow"
该方法通过正则匹配HTML中的href属性,识别非本站域名的链接,并统一注入rel="nofollow",防止权重外泄。适用于文章正文、用户评论等动态内容区域。
1、定义PHP函数content_nofollow,接收原始HTML字符串和白名单域名参数。
2、使用preg_match_all匹配所有href="(.*?)"模式的链接地址。
3、遍历匹配结果,对每个URL执行strpos判断是否包含白名单域名。
4、若不包含,则调用str_replace将原链接替换为添加rel="external nofollow"的新链接。
5、同样处理src属性(如外部图片、脚本引用),避免资源类外链传递权重。
二、WordPress主题中过滤文章内容并增强外链控制
该方法在WordPress的the_content过滤钩子中介入,仅对缺失target="_blank"和rel属性的外部链接补充二者,兼顾用户体验与SEO权重管理。
1、注册add_filter('the_content', 'cn_nf_url_parse')函数。
2、获取当前站点URL作为基准域名,用于比对外链归属。
3、使用正则]*href=("??)([^" >]*?)\1[^>]*>提取全部a标签。
4、对每个匹配到的a标签,检查是否已含target="_blank";如无,则准备添加。
5、检查是否已含rel="nofollow"或rel="dofollow";如无,则准备添加rel="nofollow"。
6、若链接URL不以当前站点URL开头,则将补全后的属性插入原标签闭合前。
三、Discuz!论坛帖子中自动识别并标注外链
该方法专用于UGC密集型场景,在用户发帖时即时解析文本中的URL,强制添加nofollow并规范协议头,防止恶意或低质外链影响站点信誉。
1、在parseurl函数中启用正则匹配:((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\/|www\.)[^\["']+。
2、若匹配成功,提取完整URL并截断超长链接(长度>65字符时中间插入…)。
3、调用url=nofollow(url)逻辑,确保返回的a标签含rel="nofollow"。
4、对无协议头的www.开头链接,默认前置http://,再统一添加nofollow。
5、对非www.且无协议的URL,拼接$_G['siteurl']构成内部路径,避免误判为外链。
四、帝国CMS导航栏手动控制特定栏目nofollow
该方法适用于静态主导航结构,通过硬编码方式为“关于我们”“联系方式”等低更新频率、零内容扩展性的单页栏目精准添加nofollow,避免首页权重稀释。
1、放弃系统默认导航调用,改用手工编写HTML导航代码。
2、对需设nofollow的栏目链接,显式写入rel="nofollow"属性。
3、同时添加target="_blank"可选属性,确保用户点击时不跳出当前站点上下文。
4、在SQL查询中排除ispart=2(即外部链接类型)的栏目,仅对内部栏目做nofollow标记。
5、验证生成HTML中对应
五、织梦CMS(channel.lib.php)主导航动态注入nofollow
该方法修改底层导航标签库,在生成栏目列表时依据ispart字段值自动判断是否为外部链接,并动态注入target和rel属性,实现逻辑与表现分离。
1、打开/include/taglib/channel.lib.php文件。
2、在$needRel分支后插入两行:$row['target'] = ($row['ispart']==2) ? "target='_blank'" : "target='_self'";$row['nofollow'] = ($row['ispart']==2) ? "rel='nofollow'" : "rel='follow'"。
3、定位$linkOkstr=str_replace("typename", $row['typename'], $linkOkstr);语句。
4、在其后追加:$linkOkstr=str_replace("target", $row['target'], $linkOkstr); 和 $linkOkstr=str_replace("nofollow", $row['nofollow'], $linkOkstr);。
5、在模板中导航标签内使用[field:target/]与[field:nofollow/]占位符,使输出可控。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











