仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳
內鏈的重要性不用我多講大家應該都知道了。 內鏈(外鏈也一樣)的好壞相關度是很重要的指標。 本文以discuz程式為例,淺述怎樣利用coreseek全文檢索搜尋系統建設高相關性的內鏈。
一、現狀
現在自動生產內鏈一般有兩種方法:一是通過插入有相同tag的內鏈;二是預先指定關鍵字,在文章內遇到相應關鍵字則自動插入內鏈的方法來做內鏈。
不過這兩種方法各有缺點,前一種方法如果是自動生成tag的話常常用生成大量沒有的tag,相關度也沒法保證,如果手動設置tag的話則是一項長期的非常繁瑣工作;後一種方法要手動預設關鍵字,一來繁瑣, 二來沒有預設的關鍵則不會自動生成內鏈,三來這種方法
一般是中要遇到相應關鍵字則生成同一內鏈相關性不一定高。
disuz自帶的相關帖子功能也分為兩種。 一種是tag實現的,存在上面說的缺點;另一種為是縱橫搜索帶的,不過坑爹的是這種相關帖子是用javascript實現的,對於seo基本沒用。
二、怎樣才能自動生成相關度高的內鏈呢?
首先要解決的如何判斷相關度高低的問題。 我們可以用目標文章的標題去跟資料庫中存在的文章標題或全文用類似Levenshtein之類演算法作比較,找出相關性高的前一個或數個來做內鏈,而不是簡單的捕捉某個特定的關鍵字或者tag。
據我所瞭解coreseek全文檢索搜尋系統採用基於短語相似度和統計(BM25)的複合Ranking方法,可以輕鬆高效實現這樣的功能,我們可以方便地拿來使用,有能力的也可以自己寫程式來實現。
三、下面以discuz為例說明如何實現。
思路如下:每當貼子被訪問時自動拿帖子的標題去coreseek裡搜索,找出匹配度高的文章。 然後把找到的文章連結添加到帖子中。
1、首先要先正確安裝coreseek,安裝方法可以參考官網或我的網站四季服裝網www#4ji#cn裡找<<架設discuz下的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應用官網發佈。 若有要需要可到我的網站四季服裝網HTTP://www#4ji#cn/thread-9326-1.html免費下載完整安裝包
本文由四季服裝網原創,轉載請保留版權