Discuz X3.4 免插件:利用后台定时任务自动生成 sitemap.xml

为了提升网站的SEO效果,方便百度、谷歌、必应等搜索引擎快速收录,生成一个格式正确的sitemap.xml文件是基础且有效的一步。很多搜索引擎仅支持XML格式的站点地图,并且要求链接地址与网站的伪静态规则完全一致。

在Discuz X3.4环境下,我测试过几款生成sitemap的插件,但发现它们要么收费、稳定性欠佳,要么无法很好地适配自定义的伪静态规则。因此,本文分享一个更可靠、完全免费的方法:直接利用Discuz系统自带的“计划任务”功能,通过一段自定义脚本自动生成sitemap.xml

核心思路与准备工作

这个方法的核心是编写一个PHP脚本,让它通过Discuz的数据库查询,提取所有帖子的ID,并按照你设定的伪静态规则生成链接,最终写入到网站根目录的sitemap.xml文件中。最后,将这个脚本挂载到Discuz后台的计划任务中,即可实现定时自动更新。

开始前请确保:

  1. 你的Discuz论坛已经配置好了伪静态,并且帖子URL格式是你期望的(例如:thread-1-1-1.html)。
  2. 你有访问网站服务器文件的权限,以便上传脚本文件。
  3. 第一步:创建核心脚本文件
  4. 在你的电脑上新建一个PHP文件,命名为 cron_sitemap.php。将以下代码复制进去,并根据你的论坛情况修改其中几项配置。
<?php
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}

$filename='sitemap.xml';
//以下五项根据具体情况修改即可
$cfg_updateperi='60';//协议文件更新周期的上限,单位为分钟
$web_root=$_G['siteurl'];//根网址
$CHARSET='utf-8';// or gbk //选择编码方式
/***********************************************************************************************/
//网站地图sitemap.xml
$sitemap="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$sitemap.="<urlset\n";
$sitemap.="xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n";
$sitemap.="xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
$sitemap.="xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\n";
$sitemap.="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n";
$querys = DB::query("SELECT a.tid FROM ".DB::table('forum_thread')." a inner join ".DB::table('forum_forum')." b on a.fid=b.fid ORDER BY a.tid DESC LIMIT 0,10000");
while($threadfid = DB::fetch($querys))
{
$turl=$web_root.'thread-'.$threadfid['tid'].'-1-1.html';//注意静态规则
$link = $turl;
$t=time();
$riqi=date("Y-m-d",$t);
$priority=rand(1,10)/10;
//date("D F d Y",$t);
$sitemap.="<url>\n";
$sitemap.="<loc>$link</loc>\n";
$sitemap.="<priority>$priority</priority>\n";
$sitemap.="<lastmod>$riqi</lastmod>\n";
$sitemap.="<changefreq>weekly</changefreq>\n";
$sitemap.="</url>\n";
}
$sitemap .= "</urlset>\n";
$fp = fopen(DISCUZ_ROOT.'/'.$filename,'w');
fwrite($fp,$sitemap);
fclose($fp);
?>

关键修改点:

  • URL规则:代码中 $thread_url 的构造部分 'thread-'.$thread['tid'].'-1-1.html' 必须与你的论坛伪静态规则完全一致。如果你的规则不同(如 topic-123.html),请相应修改。
  • 编码:确保 $CHARSET 与你论坛的编码(UTF-8或GBK)匹配。
  • 查询数量LIMIT 0,10000 限制了生成的帖子数量。如果帖子总数超过1万,可以适当调大,或考虑生成多个sitemap文件。

第二步:上传脚本到指定目录

将刚才创建好的 cron_sitemap.php 文件,通过FTP或文件管理器上传到Discuz安装目录下的 /source/include/cron/ 文件夹中。

图片[1]-Discuz X3.4 免插件:利用后台定时任务自动生成 sitemap.xml-

第三步:在Discuz后台添加定时任务

图片[2]-Discuz X3.4 免插件:利用后台定时任务自动生成 sitemap.xml-
  1. 登录Discuz后台管理中心,进入 工具 → 计划任务
  2. 点击 新增,在“任务名称”中填写一个便于识别的名字(例如“生成站点地图”),然后提交。
  3. 在任务列表中找到刚刚新增的任务,点击 编辑
  4. 在“任务脚本”一栏中,填入 cron_sitemap.php
  5. 设置执行时间。例如,你希望每天凌晨0点生成一次,可以按如下设置(具体数字可自由调整):
    • 分钟:0
    • 小时:0
    • 天:*
    • 月:*
    • 星期:*
  6. 勾选“可用”,并提交保存。

设置完成后,系统就会按照你设定的时间自动执行该脚本,更新根目录下的 sitemap.xml 文件。

© 版权声明
THE END
喜欢就支持一下吧
分享
评论 抢沙发

请登录后发表评论

    暂无评论内容