程序实现自动构建高相关度SEO内链的方法

       在我们学习SEO的初期,大家应该都已经了解过链接之于互联网的重要性,同样的SEO内链优化之于网站的重要性不用我多讲大家应该也都知道。内链(外链也一样)的好坏,相关度是很重要的指标。内链建设的方法有很多,有没有什么好的能够自动构建高相关度内链的方法呢?本文将以 discuz 程序为例,浅述怎样利用 coreseek 全文搜索系统建设高相关性的内链。

       一、现状

       现在自动生产内链一般有两种方法:

       一是通过插入有相同tag的内链;

       二是预先指定关键词,在文章内遇到相应关键词则自动插入内链的方法来做内链。

 

探讨自动构建高相关度内链方法

       不过这两种方法各有缺点, 前一种方法如果是自动生成 tag 的话常常用生成大量没有的tag,相关度也没法保证,如果手动设置tag的话则是一项长期的非常繁琐工作;后一种方法要手动预设关键词,一来繁琐,二来没有预设的关键则不会自动生成内链,三来这种方法 一般是文章中要遇到相应关键词则生成同一内链,这种方法会导致内链权重分散。

       disuz 自带的相关帖子功能也分为两种。一种是tag实现的,存在上面说的缺点;另一种为是纵横搜索带的,不过坑爹的是这种相关帖子是用javascript 实现的,对于seo基本没用。

       二、怎样才能自动生成相关度高的内链呢?

       首先要解决的如何判断相关度高低的问题。 我们可以用目标文章的标题去跟 数据库中存在的文章标题或全文用类似 Levenshtein 之类算法作比较, 找出相关性高的前一个或数个来做内链,而不是简单的捕捉某个特定的关键词或者tag。 据我所了解 coreseek 全文搜索系统采用基于短语相似度和统计(BM25)的复合Ranking方法,可以轻松高效实现这样的功能,我们可以方便地拿来使用,有能力的也可以自己写程序来实现。

       三、下面以 discuz 为例说明如何实现。

       思路如下:每当贴子被访问时自动拿帖子的标题去 coreseek 里搜索,找出 匹配度高的文章。然后把找到的文章链接添加到帖子中。

       1、首先要先正确安装 coreseek,安装方法可以参考官网,安装看着很复杂,其实安装不难,跟着教程一步步做就行了。

       2、写一个 discuz 的插件实现上面所说的功能: 不懂编程的先别飙汗,插件已经写好。

       这里只大概说一下插件的工作原理是:discuz 的模版里面放了很多 hook 钩 子,这里我们使用 viewthread_postbottom,打开贴子后, viewthread_postbottom 触发插件中的对应方法,该方法拿拿帖子的标题去 coreseek 里搜索,找出匹配度高的文章。 然后把找到的文章链接添加到帖子中。

       四、主要源代码

       因能力有限,程序可能不够完善,欢迎指正。

<?php

/** * A class of related article for Discuz! X2 & X2.5

*@author D2002

* Copyright @ http://www.4ji.cn

*/

class plugin_dean_related_article

{

function plugin_dean_related_article()

{

global $_G;

$this->display_qty = $_G[‘cache’][‘plugin’][‘dean_related_article’][‘display_qty’];

$this->weight = $_G[‘cache’][‘plugin’][‘dean_related_article’][‘weight’];

$this->index = $_G[‘cache’][‘plugin’][‘dean_related_article’][‘index’];

}

}

class plugin_dean_related_article_forum extends plugin_dean_related_article

{

public function viewthread_postbottom_output() {

global $_G;

require_once libfile(‘class/sphinx’);

$s = new SphinxClient();

$s->setServer($_G[‘setting’][‘sphinxhost’], intval($_G[‘setting’][‘sphinxport’]));

$s->setMaxQueryTime(intval($_G[‘setting’][‘sphinxmaxquerytime’]));

$s->SetRankingMode($_G[‘setting’][‘sphinxrank’]);

$s->setLimits(0, $this->display_qty, $this->display_qty);

$s->setMatchMode(SPH_MATCH_ANY);

$subject = mb_convert_encoding($_G[‘forum_thread’][‘subject’],’UTF-8′,’GBK’);

$ori_tid = $_G[‘forum_thread’][‘tid’]; if($this->index==1) $result = $s->query($subject, $_G[‘setting’][‘sphinxsubindex’]);

else $result = $s->query($subject, “*”);

$tids = array(); if($result)

{

if(is_array($result[‘matches’])) {

foreach($result[‘matches’] as $value)

{

if($value[‘attrs’][‘tid’]&&$value[‘attrs’][‘tid’]!=$ori_tid&&$value[‘ weight’]>=$this->weight)

{

$tids[$value[‘attrs’][‘tid’]] = $value[‘attrs’][‘tid’];

} } } }

//return $tids;

$out=”<div id=’relate_subject’><div class=’rs_main’><div class=’rs_head’><h3 class=’has_adv’>相关帖子</h3></div>”; $out.=”<ul id=’rel_list’>”; if(!empty($tids) ){ $ids = implode(“,”, $tids); $query = DB::query(“SELECT tid,subject FROM “.DB::table(‘forum_thread’).” WHERE tid IN ($ids) AND displayorder>=’0′ ORDER BY tid DESC”);

while ($thread = DB::fetch($query))

{

$threadlist[$thread[‘tid’]]=$thread;

}

$flag=1;

foreach($threadlist as $th)

{

if($flag==1){ $out.=”<li class=’right_item’>”; $flag=0;

}

else{

$out.=”<li class=’left_item’>”; $flag=1; } $out.=”<a href=’thread-$th[tid]-1.html’>$th[subject]</a></li>”;

}

}

else{

return array();

}

$out.=”</ul></div></div>”; return array($out);

} } ?>

       五、 本文只是表达一个建造内链的思路,推广开去。

       这种方法轻松可以用于各种程序之中,甚至可以跨站使用。希望能帮到大家。

       六、 因插件未经严格测试,而且需要安装 coreseek 为前提,所以没有在 discuz 应用官网发布。

内容版权声明:除非注明,否则皆为SEO博客原创文章。

姜成SEO技术交流群

转载注明出处:https://www.seoblogs.cn/seojc/2017540.html

跟大家分享一下你的看法吧!
  • 全部评论(0
    还没有评论,快来抢沙发吧!