由于我的站点是自己基于thinkphp开发的,之前并没有考虑到关键词自动内链的功能,关键词自动内链的功能是很多网站CMS自带的,比如dedecms、pbootcms、帝国cms等等。虽然之前用的时候感觉没什么,可是真要自己开发还是有一点担心影响网站整体加载速度的。看了网上的一些说明,发现跟我自己想的也差不多,那么暂时忽略到性能的问题,把功能先做出来吧。
大概有以下几个字段
idwordurlrepeataddtimeID关键词链接网址重复次数添加时间
2、后台的需要
管理页面、添加页面、编辑页面、删除功能
功能开发其实也不复杂,主要是写一个方法,传递过去我们的内容主体,通过循环匹配我们的内链设置,实现自动插入锚文本链接。
1、加载内容时嵌入。
在读取内容数据时插入锚链接,但是这样可能会牺牲掉用户访问时的加载速度。
2、发布文章时直接把内链嵌入到文章内容字段。
这样也有弊端,当我们换域名了就需要替换掉文章内容字段理的url,有些删除掉的关键词或者是修改了的关键词,也无法兼顾。
两种方法各有弊端,但是鉴于我们网站以后很可能会有比较长时间的运营,内链的关键词也会不断变化,因此我决定采用第一种方式:加载内容时替换的模式。
写一个方法,通用
//关键词自动内链
function autoLinkKeywords($body,$datas){
foreach ($datas as $data){
$word = $data['link_word'];
$repeat = $data['link_repeat'];
$link = ''.$word.'';
$body = str_replace($word, $link, $body, $repeat);
}
return $body;
}
替换掉文章主体的内容,使用上面的的方法
//关键词内链
//内链集合
$datas= [
['link_word'=>'seo优化','link_url'=>'http://www.xalmi.com/','link_repeat'=>3],
['link_word'=>'seo','link_url'=>'http://www.xalmi.com/','link_repeat'=>2],
];
//关键词数组排序,优先短词链接,防止长短词重复替换
usort($datas, function($a, $b) {
return strlen($a['link_word']) - strlen($b['link_word']);
});
$body = autoLinkKeywords($body,$datas);
效果呈现如下:
74.