dify可自动识别seo文章中的锚点位置并插入合规内部链接:先通过双路知识检索(精准关键词路由+lsi语义扩展)从结构化url知识库中匹配目标页,再经python节点强制校验锚文本,禁用诱导词、复用原文关键词、兜底“深入理解”,全程无需人工标注且保持html结构完整。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify在生成SEO文章的同时,自动识别文中可锚点位置,并从你已有的网站内容库中匹配最相关的目标页面,插入合规的内部链接——整个过程不依赖人工标注、不跳过语义校验、不生成“点击此处”类违规锚文本。
准备内链知识库与结构化URL索引
登录Dify控制台→进入【知识库】→点击【新建知识库】→名称填“Site_Internal_Links_2026”,类型选“文档”。
上传一个CSV文件,字段必须严格为:url,title,primary_keyword,word_count,topic_cluster。其中url列必须是完整可访问的绝对路径(如https://example.com/javascript-error-handling),【primary_keyword必须与SEO_指南_2026中定义的主关键词完全一致,否则后续检索将无法命中】。
上传后进入该知识库【高级设置】→关闭“启用向量化预处理”→分块大小设为1024→分块重叠设为128→保存。这一步禁用向量化是关键,因为URL和关键词是精确匹配项,不是语义模糊项。
配置双路知识检索节点
方法一:精准关键词路由检索(推荐用于首段H1后紧邻的锚点)
拖入【知识检索】节点→绑定“Site_Internal_Links_2026”知识库→勾选“启用相关性过滤”→相似度阈值设为0.85→在“查询模板”中填:{{segment_text}} + “属于” + {{topic_cluster}}。此路径专用于匹配段落中明确出现的、且与当前文章主题簇强相关的页面。
方法二:LSI语义扩展检索(用于正文中间自然过渡处)
再拖一个【知识检索】节点→同样绑定该知识库→但相似度阈值降为0.62→查询模板改为:{{segment_text}} + “同义词|近义词|延伸概念” →启用“返回原始分块内容”→关闭“相关性过滤”。这步会召回语义宽泛但上下文贴合的候选页,供后续Python清洗节点做二次精筛。
注意:两个检索节点必须并行接入,不能串行——因为它们服务不同锚点场景,串行会导致首段锚点丢失或延迟。
编写内链插入与合规校验Python逻辑
拖入【代码】节点→语言选Python→粘贴以下脚本:
import re
def main(inputs):
segment = inputs.get('segment_text', '')
retrieved_links = inputs.get('retrieved_links', []) # 来自方法一的高置信结果
lsi_candidates = inputs.get('lsi_candidates', []) # 来自方法二的宽泛结果
keywords = inputs.get('keywords', '').split()
# 优先从retrieved_links中找能自然嵌入segment的锚文本
for item in retrieved_links:
if item['primary_keyword'] in segment and len(item['primary_keyword']) > 3:
anchor = item['primary_keyword']
url = item['url']
break
else:
# fallback:从lsi_candidates中选最长且未在keywords中重复的标题片段
anchor = next((c['title'] for c in lsi_candidates if c['title'] not in keywords and len(c['title']) > 8), '深入理解')
url = lsi_candidates[0]['url'] if lsi_candidates else ''
# 强制替换:禁止“了解更多”“点击这里”等诱导词
anchor = re.sub(r'(了解更多|点击此处|详情请见|点击查看)', '', anchor).strip()
return {'anchored_segment': segment.replace(anchor, f'{anchor}', 1) if url else segment}
这段代码执行三个硬性动作:①优先复用原文中已存在的关键词作锚文本;②fallback时截取目标页标题中最长有效片段;③【任何含诱导词的锚文本都会被立即清空,不会留空,而是用‘深入理解’兜底,确保HTML结构不崩】。
串联工作流并启用内链注入开关
第一步:在LLM生成正文节点之后,添加【Split Text】节点→按段落切分(分割符选“\n\n”)→输出为数组。
第二步:将Split Text节点输出→连接至【Iterator】节点→开启“并行执行”→每个迭代项传入前述两个知识检索节点+Python校验节点。
第三步:Iterator输出→接【Merge Text】节点→合并为单个字符串→再接入最终的【LLM】节点(仅作轻量润色,提示词中加一句:“保持所有标签原样,不修改href或anchor内容”)。
第四步:回到工作流顶部【开始】节点→右侧面板新增一个布尔型变量:insert_internal_links,默认值设为True。在IF节点中配置条件:{{insert_internal_links}} == True →才触发整个内链处理链路。这样你随时可关掉内链功能,只生成纯文本。











