短视频自媒体创业
全国咨询微信:4761160

帝国内容页和列表页模板相关文章采用标题相似度方法调取实现SEO张海洋原创

发布时间:2020-06-23 14:39:42 人气:

今天在优化网站时忽然灵光一现,看到百度知道里相关推荐的文章非常精准,以前我也分享过采用关键词精准调取标题的代码,但是如果通过标题相似度调取应该更精准。

大家好我是张海洋,擅长互联网SEO,今天再优化网站时忽然看到百度知道的相关推荐文章非常精准,百度采用的是分词精准调取,类似于我前面分享过采用关键词调用标题的方法,但是如果采用标题相似度方式调取文章标题也可以达到百度那种效果。

现在我把原理分析一下,首先获取本篇文章标题,再调取数据库所有文章标题进行挨个对比相似度,达到50%以上的相似度进行展现,其实这个值可以设置到80%或70%都可以,根据你站内文章多少而论,如果站内文章太少会有个别标题无法调取到数据。

帝国CMS标题相似度对比代码分享(张海洋原创)

1、列表页模板使用的代码:

<?php
$classname=$class_r[$navclassid][classname]; //获取当前栏目名称
$_class=$empire->fetch1("select * from {$dbtbpre}enewsclass where classid='$GLOBALS[navclassid]'");  //获取当前栏目副标题
$bname=$_class[bname];
$title=$bname?$bname:$classname; //如果副栏目为空则显示主栏目名称
//echo $title;
$sqlt=$empire->query("select * from {$dbtbpre}ecms_news"); //获取所有文章,如果你想获取当前栏目文章自行添加栏目id
while($r=$empire->fetch($sqlt))
{  
$id=$r[id]; $arr_title= $r['title'];  //遍历文章ID和标题
   similar_text($arr_title,$title,$percent); //将所有标题和当前标题进行对比
   $percent_arr[$id]=$percent; //获取对比度百分数合并成数组
//print_r($percent_arr);
}
arsort($percent_arr); //按照相似的百分比由高到低排序
reset($percent_arr); //将指针移到数组的第一单元
foreach($percent_arr as $key => $value){
if($value>=30){$keyarr[]=$key;}else{"";}  //百分比大于等于30的数组ID值放入数组中,30可以自行设置
 }
$newsid = implode(",", $keyarr); //将数组用逗号分隔
if($newsid==""){$newsid=2;} //如果数组为空,随机分配一个2,防止数据库id为空报错
//print_r($newsid);
$sql=$empire->query("select * from {$dbtbpre}ecms_news where id in ('$newsid') order by find_in_set(id,'$newsid') limit 20"); //将百分比高的排序id放入数据库查询,并且按查询id排序
while($bqr=$empire->fetch($sql))
{ ?>
<li><a href="<?=$bqr['titleurl']?>" target="_self" title="<?=$bqr['title']?>" <?php if($navinfor[id]==$bqr['id']){echo 'rel="nofollow"';}  ?>><?=$bqr['title']?></a></li>
<? } ?>
 

2、内容页模板代码

 <?php
$title=$navinfor['ftitle']?$navinfor['ftitle']:$navinfor['title']; //副标题为空则显示主标题
$classid=$GLOBALS[navclassid]; //获取当前栏目id 如果只获取本栏目文章下面查询中自行添加where
$sql=$empire->query("select * from {$dbtbpre}ecms_news"); //获取所有文章标题
while($r=$empire->fetch($sql))
{  $id=$r[id]; $arr_title= $r['title']; //获取文章id和标题,id是为了下面查询使用
   similar_text($arr_title,$title,$percent); //主代码,将所有标题和现有标题进行相似度对比
   $percent_arr[$id]=$percent; //对比度组成数组,数组采用ID做序
//print_r($percent_arr);
}
arsort($percent_arr); //按照相似的百分由高到低排序
reset($percent_arr); //将指针移到数组的第一单元
foreach($percent_arr as $key => $value){
if($value>=40){$keyarr[]=$key;}else{"";}  //相似度40以上的加入数组
 }
$newsid = implode(",", $keyarr); //将数组用逗号分隔
//print_r($newsid);
$sql=$empire->query("select * from {$dbtbpre}ecms_news where id in ($newsid) order by find_in_set(id,'$newsid') limit 20");  //进行查询高于40对比度的标题并按查询id排序
while($bqr=$empire->fetch($sql))
{ ?>

<li><a href="<?=$bqr['titleurl']?>" target="_self" title="<?=$bqr['title']?>" <?php if($navinfor[id]==$bqr['id']){echo 'rel="nofollow"';}  ?>><?=$bqr['title']?></a></li>  //这里有个判断是如果标题id和当前页面id相同加nofollow
<? }?>

 

上面代码适合帝国CMS系统,当然你用在其他的系统中可以自行少加修改一下,转载请加来源

在线客服
联系方式

微信号

4761160

上班时间

周一到周五

二维码
线