推外网络专注营销型网站品牌策划与推广

FOCUS MARKETING WEBSITE BRAND PLANNING AND MARKETING PROMOTION

千万级内链系统架构(下)

2019-09-28 14:03:05 100000+ 编辑:推外网络 来源:本站原创

前面2个文章,其实已经讲完了,怎么匹配内链的问题。但是还有一部份更技术化的内容并没有涉及。本文来详细讨论讨论。

前文讨论的问题,有几个前提,并没有说明清楚。

一、文章需清理。

什么是文章需清理。大家想一下,假如文章里面我添加了一个图片,图片链接里面有中文,直接使用内链,可能会把图片链接里面的中文拿去分词处理,实际上我们是不需要的。我们需要的是对纯文本内容进行分词处理。

所以,在分词前,需要有一步,清理所有HTML标签。非常重要。

二、替换不简单

假如一篇800字的文章讲seo工具相关的一篇文章,我们已经用前面的方法匹配出来,SEO优化、SEO优化工具、SEO优化工具好不好,这3个词需要做内链。

是不是直接拿这3个词,把文章里面的SEO优化,替换成<ahref=”内链链接”target=”_blank”>SEO优化</a>就完事了。如果只是这样,我只能说Tooyoung,tonaïve。现在所有后台涉及文本编辑的地方,可都不是纯文本。那是富文本编辑器。比如下面这个:

这并不是真实的源代码。页面的源代码是带标签的:

我们在匹配的那步是清理完所有标签去匹配关键词的。这是没有问题的。但是匹配出来的词,我们要往HTML内容里面加链接就会遇到相当多的问题了。

以Img和Alt标签为例。假如代码是下面这样的

<imgsrc=”logo.jpg”alt=”SEO优化“/>我们需要的是文章里面的关键词加上链接。如果直接加上链接,这段代码会变成<imgsrc=”logo.jpg”alt=”<ahref=”link”target=”_blank”>SEO优化</a>“/>标签里面再嵌入了一层标签,这种做法显示是错的。到时候页面会出现大量的乱码。

解决方案当然是有的,经过大量的测试。我们只需要在添加内链之前,做一个处理就行了。使用的当然是最无敌的正则表达式。我把这个方法叫做替换还原法。步骤如下:

Step1:设定一个不可见字符,比如ん、⊙这种。把文章中的这种字符清理掉(正常文章应该不会有这种内容)。

Step2:匹配所有Img标签。替换并记录到字典。这句话很费解的,大概意思就是把所有<imgsrc=”logo.jpg”alt=”SEO优化“/>,按顺序替换为ん1ん,第二条替换为ん2ん,以此类推,然后把关系写到Map里面一一对应,在Java里面是Map,在C#里面是dictionary,在Python里面是dict,在PHP里面是数组。

结构会是这样的:

ん1ん=><imgsrc=”logo.jpg”alt=”SEO优化“/>

ん2ん=><imgsrc=”logo.jpg2”alt=”SEO优化2“/>

ん3ん=><imgsrc=”logo.jpg3”alt=”SEO优化3“/>

为什么这样做呢,我需要把文章里面不能动的内容抽出来,但是抽出来之后,得还原回去,所以需要把抽出来的内容,做一个位置标记。像ん1ん这样的就是一个位置标记。

Step3:同样替换A标签,匹配时,使用正则可以快速匹配。并一个个替换掉。

Step4:现在的文章里面,应该已经没有img和A标签了,已经被替换成了ん1ん这样的内容。加上一些正常的文字了。现在可以遍历分词法得到的关键词和链接,开始插入链接了。

简单的办法是:根据位置记录下关键词,替换下来之后,同样使用ん1ん替换占位,把结果放到Map里面。

Step5:终于要成功了,现在需要做的就是遍历Map里面的数据还原回来。把所有ん1ん还原为Map里面的Value的内容。这篇文章就处理完成了。

此外的逻辑相当复杂,就不贴代码了。代码超过400行。

方法还算比较巧妙,但是目前为止,我也没见过更好的算法可以实现。

三、收尾。

还有一些收尾工作,比如SEO优化只能加3次,加到之后,别的文章不再使用。

比如优先按最长的关键词加链接。在上面的Step4里面对关键词进行一轮排序,按长度从前往后排就行了。

比如记录每个页面的内网结果。需要保存之后,把页面ID和关键词内链表的ID关联起来保存下来即可。

结尾语:看似简单的关键词内链,其实是异常复杂的一套逻辑和架构。越是海量的内容,如果对SEO依赖非常高,对内链系统的建设来说,也是一套很挑战的技术。希望大家有所收获。


本站文章均为推外网络摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,我们谢绝直接复制和抄袭!感谢...