在安企CMS的日常运营中,我们经常需要在网站内容中展示外部链接。这些链接如果只是简单的文本,不仅影响用户体验,也无法有效传递信息。同时,为了遵循搜索引擎优化(SEO)的**实践,特别是对于指向外部站点的链接,我们通常希望为它们添加 rel="nofollow" 属性,以避免不必要的“权重流失”或传递不必要的信任。安企CMS提供了简洁高效的方法来解决这一问题。

核心功能揭秘:urlize 过滤器

安企CMS的模板引擎提供了强大的过滤器功能,其中 urlize 过滤器正是解决“将URL字符串自动转换为可点击超链接”需求的核心工具。它的作用是智能地识别文本内容中的URL字符串(无论是 http://https:// 开头,还是 www. 开头的网址,甚至是邮箱地址),并将其自动包装成可点击的HTML <a> 标签。

更重要的是,urlize 过滤器在转换过程中会自动为生成的超链接添加 rel="nofollow" 属性。这使得您在模板中处理任何包含URL的纯文本内容时,都能轻松实现链接的可点击性和SEO友好性。

如何使用 urlize 过滤器:

在安企CMS的模板文件中,您可以将任何可能包含URL的变量通过管道符 |urlize 过滤器连接起来。由于 urlize 过滤器会生成HTML代码,为了确保这些HTML代码能够被浏览器正确解析而不是作为纯文本显示,您还需要紧随其后添加 |safe 过滤器。

基本语法如下:

{{ 您的变量 | urlize | safe }}

其中:

  • 您的变量:指代包含URL字符串的模板变量,例如文章内容 (archive.Content)、单页内容 (page.Content) 或其他自定义文本字段。
  • urlize:执行URL到超链接的自动转换,并添加 rel="nofollow"
  • safe:告诉模板引擎该输出内容是安全的HTML,应按原样渲染,而不是进行HTML实体转义。

为什么会自动添加 nofollow 属性?

rel="nofollow" 属性是搜索引擎用来识别“不应该跟随或传递权重”的链接。对于大多数指向外部站点的链接,特别是那些非合作性质或用户生成内容的链接,添加 nofollow 是一种推荐的SEO做法。安企CMS的 urlize 过滤器正是基于这一**实践,在自动转换URL为超链接时,默认为您添加了 rel="nofollow",从而省去了手动添加的繁琐。

此外,安企CMS在后台的 内容设置 中,也提供了全局选项来管理外部链接的行为。在 帮助文档 -> 后台设置 -> 内容设置 (help-setting-content.md) 中有提到:

是否自动过滤外链:当您不希望您发布的内容中,有外部站点的链接,可以选择过滤外链。这样在发布文档的时候,检测到有外部链接就会被自动清除。如果选择不过滤外链,外链的链接会得到保留,但是会被加上 rel="nofollow" 标签。

这意味着,即使您没有在模板中使用 urlize 过滤器,如果后台开启了“不过滤外链”选项,系统也会在内容保存时自动为检测到的外部链接添加 rel="nofollow"urlize 过滤器则是在前端渲染时,为那些可能未被后台处理的纯文本URL提供了同样的 nofollow 功能。

在哪些场景下应用这个技巧?

这个方法在多种内容类型中都非常实用:

  1. 文章和产品详情页内容 (archive.Content): 这是最常见的应用场景。当编辑在文章或产品描述中直接粘贴了网址,通过 urlize 过滤器,这些网址就能自动变成可点击的链接,并带有 nofollow
  2. 单页面内容 (page.Content): 对于“联系我们”、“关于我们”等单页,如果其中包含公司网站、社交媒体主页的纯文本URL,也可以使用 urlize 进行转换。
  3. 自定义文本字段: 如果您在内容模型中定义了自定义的文本字段(例如一个“参考资料URL”字段),且该字段可能包含纯文本URL,同样可以通过 urlize 过滤器进行处理。
  4. 友情链接: 虽然友情链接通常通过 linkList 标签和后台管理功能进行集中管理,并可能在后台显式设置 nofollow 属性(如 item.Nofollow == 1),但如果某些友情链接或其他站外推荐链接以纯文本形式嵌入到非结构化内容中,urlize 也能提供兜底的 nofollow 效果。

操作步骤与代码示例

假设您希望在文章详情页 ({模型table}/detail.htmlarchive/detail.html) 中,让文章正文中的所有URL字符串自动转换为可点击的 nofollow 链接。

  1. 打开您的模板文件: 找到渲染文章内容的相应模板文件。通常这会是 /template/{您的模板名称}/archive/detail.html 或者类似路径下的文件。

  2. 修改内容输出代码: 找到输出文章内容 (archive.Content) 的代码行。它可能看起来像这样:

    {% archiveDetail articleContent with name="Content" %}
    {{ articleContent|safe }}
    

    将其修改为使用 urlize 过滤器:

    {% archiveDetail articleContent with name="Content" %}
    {{ articleContent|urlize|safe }}
    

    同样,如果您的内容包含在其他变量中,例如一个自定义字段 my_custom_url_field,您可以这样使用:

    {% archiveDetail myCustomUrlField with name="my_custom_url_field" %}
    <p>更多信息请访问:{{ myCustomUrlField|urlize|safe }}</p>
    

示例效果:

如果 articleContent 变量中包含如下文本:

欢迎访问我们的官网 https://www.anqicms.com,这是一个优秀的CMS系统。您也可以通过邮箱联系我们:support@anqicms.com。

经过 {{ articleContent|urlize|safe }} 处理后,页面上实际渲染的HTML将是:

欢迎访问我们的官网 <a href="https://www.anqicms.com" rel="nofollow">https://www.anqicms.com</a>,这是一个优秀的CMS系统。您也可以通过邮箱联系我们:<a href="mailto:support@anqicms.com" rel="nofollow">support@anqicms.com</a>。

URL和邮箱地址都被成功转换为带有 rel="nofollow" 属性的可点击链接。

注意事项

  • **`|