海洋 CMS 站点地图 sitemap 如何生成

juming
juming 初级会员超兽战士
发布于 2026-10-08 11:02 ·3 浏览 ·0 回复

结论:海洋CMS 没有必须依赖的插件,生成 sitemap 最稳的做法是——先看后台有没有现成的地图功能(不同版本菜单位置不一样),没有就用一个 20 行的 PHP 脚本直接读 sea_data 表输出 XML 文件,再把地址写进 robots.txt 并提交给百度/Google 站长平台,整个过程 30 分钟内可以完成。

海洋CMS 生成 sitemap 有哪两种做法?

第一种是后台自带或第三方插件生成,第二种是自写脚本从数据库生成。前者省事但受限(分片、更新频率、字段过滤往往不能调),后者可控性最强,也是绝大多数视频站实际在用的方案。

判断用哪种很简单:登录海洋CMS 后台,找一遍「系统」「工具」「扩展」这几个菜单,如果有「生成站点地图 / sitemap」之类的入口就直接用;没有就往下看脚本方案。

结论:视频站的 sitemap 只需要放三类 URL——首页、分类列表页、视频详情页。播放页不用放,因为同一部视频的多个播放源会指向内容高度重复的页面,反而稀释权重。

用 PHP 脚本从 sea_data 表生成 sitemap.xml 怎么做?

把下面这段代码保存成 sitemap.php 放在网站根目录,跑一次就会生成 sitemap.xml。海洋CMS 的表前缀默认是 sea_,可在配置文件里确认(老版本是 /data/common.inc.php,新版本在 data/ 下的缓存配置文件中)。

<?php
$db = new mysqli('localhost', '数据库用户', '数据库密码', '数据库名');
$db->set_charset('utf8mb4');
$host   = 'https://www.example.com';   // 换成你的域名,带协议
$prefix = 'sea_';
$items  = [];

$items[] = [$host.'/', date('Y-m-d'), 'daily', '1.0'];

$res = $db->query("SELECT tid FROM {$prefix}type WHERE tid>0");
while ($r = $res->fetch_assoc()) {
    $items[] = [$host."/list/{$r['tid']}.html", date('Y-m-d'), 'daily', '0.8'];
}

$res = $db->query("SELECT v_id,v_time FROM {$prefix}data WHERE v_id>0 ORDER BY v_id DESC LIMIT 50000");
while ($r = $res->fetch_assoc()) {
    $items[] = [$host."/vod/{$r['v_id']}.html", date('Y-m-d', (int)$r['v_time']), 'weekly', '0.6'];
}

$xml = '<?xml version="1.0" encoding="utf-8"?>'."\n"
     . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";
foreach ($items as $it) {
    $xml .= "<url><loc>{$it[0]}</loc><lastmod>{$it[1]}</lastmod>"
          . "<changefreq>{$it[2]}</changefreq><priority>{$it[3]}</priority></url>\n";
}
$xml .= '</urlset>';
file_put_contents(__DIR__.'/sitemap.xml', $xml);
echo "done: ".count($items)." urls\n";

两个必须改的地方:$host 和上面的数据库连接信息。v_time 在海洋CMS 里存的是 Unix 时间戳,所以用 date('Y-m-d', (int)$r['v_time']);如果你取出来发现是 2024-01-01 这种字符串,直接去掉 (int) 和 date() 即可。

脚本建议用 crontab 每天跑一次,让 lastmod 保持新鲜:

0 4 * * * /usr/bin/php /www/wwwroot/你的站/sitemap.php

海洋CMS 的 URL 怎么拼才不会拼错?

结论:URL 前缀不要照抄任何教程,必须以你自己站点的伪静态规则为准。海洋CMS 后台的伪静态设置里能看到当前生效的规则,也可以在浏览器打开一个视频页,把地址栏里的 URL 复制出来,把其中的数字 ID 换成 {v_id} 就是模板。

常见默认形态是详情页 /vod/123.html、分类页 /list/1.html,但很多站长改成了带拼音或带目录的形式(如 /detail/123.html)。拼错 URL 的后果不是报错,而是提交给搜索引擎后大面积 404,比不提交更糟。生成完记得抽查 3-5 条:把 sitemap.xml 里的 URL 随机复制到浏览器里打开,能正常访问才算通过。

另外,changefreq 和 priority 这两个标签 Google 早在 2023 年就明确忽略,百度也只是参考,不必花时间调优。

sitemap 超过 5 万条视频怎么办?

单个 sitemap 文件最多 50000 条 URL、未压缩不超过 50MB,超了就必须分片。做法是按 ID 区间切:第一条脚本查 v_id BETWEEN 1 AND 50000,第二条查 50001 AND 100000,分别输出 sitemap1.xml、sitemap2.xml,再写一个索引文件:

<?xml version="1.0" encoding="utf-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap><loc>https://www.example.com/sitemap1.xml</loc></sitemap>
  <sitemap><loc>https://www.example.com/sitemap2.xml</loc></sitemap>
</sitemapindex>

提交时提交这个索引文件即可,搜索引擎会自动跟进子文件。

生成后怎么让搜索引擎收录?

在 robots.txt 末尾加一行:Sitemap: https://www.example.com/sitemap.xml(注意是完整绝对地址)。然后分别去百度搜索资源平台和 Google Search Console 提交 sitemap 地址,百度对视频站的抓取额度有限,建议配合主动推送 API 提交当天新增的视频页;Google 一般 1-3 天内开始抓取。

最后收一下要点:海洋CMS 生成 sitemap 的核心就三步——确认后台有无现成功能、没有就用脚本读 sea_data 和 sea_type 表输出 XML、用 crontab 每日更新并提交给搜索平台。URL 格式以站点实际伪静态为准,超过 5 万条用索引文件分片,这是整件事唯一两个容易踩坑的地方。

版权声明:本文来自 GJ站长论坛《海洋 CMS 站点地图 sitemap 如何生成》
原文链接:https://www.gj0.com/thread-915.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~