我们将从 基础配置、优化升级、高级技巧 三个层面来展开。

基础配置:正确生成和使用默认地图
在开始优化之前,请确保你已经正确配置并生成了默认的网站地图。
地图类型与位置
织梦默认提供两种地图:
- HTML地图:
yourdomain.com/sitemap.html- 作用: 主要为访客服务,提供一个清晰的网站结构导航,方便用户查找内容。
- 特点: 人类可读,结构化良好。
- XML地图:
yourdomain.com/sitemap.xml- 作用: 主要为搜索引擎服务(如百度、谷歌),告诉搜索引擎网站上有哪些页面可以抓取。
- 特点: 机器可读,标准格式。
后台生成步骤
- 登录织梦DedeCMS后台。
- 菜单栏:“生成” -> “网站地图更新”。
- 在这里你可以设置:
- 主页链接: 默认是你的首页URL。
- 其他页: 默认包含首页、栏目页、内容页,你可以勾选或取消。
- 文件名: 默认是
sitemap.html和sitemap.xml。
- 点击 “开始生成网站地图” 按钮。
重要提示:
- 每当你更新了网站内容(新增文章、删除文章、修改栏目等),都应该重新生成一次地图,以确保搜索引擎拿到的是最新的版本。
- 将
sitemap.xml的地址提交到百度站长平台和Google Search Console中,让搜索引擎主动抓取。
优化升级:让默认地图更强大
默认地图功能有限,例如不包含自定义页面、单页等,我们可以通过修改模板和代码来优化它。

优化1:确保地图包含所有重要页面
默认的地图可能不包含你网站的所有重要页面,
- 自定义页面 (如“关于我们”、“联系我们”)
- 单页文档 (如“公司简介”)
- TAG标签页
- 搜索结果页 (通常不需要包含)
修改方法 (以包含自定义页面为例):
织梦默认的地图生成逻辑在 /include/sitemap.class.php 文件中,我们可以修改这个文件来增加包含的类型。
-
备份文件: 在修改前,务必备份
/include/sitemap.class.php。
(图片来源网络,侵删) -
编辑文件: 打开
/include/sitemap.class.php。 -
找到生成栏目和文章的函数:
- 生成栏目页的函数是
GetIndexList()。 - 生成文章列表页的函数是
GetArcList()。
- 生成栏目页的函数是
-
添加自定义页面的生成逻辑: 在
GetArcList()函数之后,添加一个新的函数来获取自定义页面。// 在 GetArcList() 函数后添加 function GetSelfList() { global $dsql; $s = ""; $query = "SELECT * FROM `dede_arctype` WHERE ispart<>2 AND channeltype='-1' ORDER by sortrank asc"; $dsql->SetQuery($query); $dsql->Execute(); while ($row = $dsql->GetArray()) { $typeurl = GetTypeUrl($row['typeid'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule2'], $row['moresite'], $row['siteurl']); $s .= "<div class=\"site-map-list\">\r\n"; $s .= "<a href=\"" . $typeurl . "\">" . $row['typename'] . "</a>\r\n"; $s .= "</div>\r\n"; } return $s; } -
调用新函数: 修改
GetSiteMapHtml()函数,在适当的位置调用GetSelfList()。// 修改 GetSiteMapHtml() 函数 function GetSiteMapHtml() { $indexlist = $this->GetIndexList(); $arcList = $this->GetArcList(); $selfList = $this->GetSelfList(); // 调用新函数 $html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>网站地图 - ' . $GLOBALS['cfg_webname'] . '</title> <meta name="author" content="' . $GLOBALS['cfg_webname'] . '" /> <link rel="stylesheet" type="text/css" href="' . $GLOBALS['cfg_cmspath'] . '/templets/style/map.css" /> </head> <body> <div class="sitemap"> <h1><a href="' . $GLOBALS['cfg_basehost'] . '">' . $GLOBALS['cfg_webname'] . '</a> - 网站地图</h1> <div class="site-map-main"> ' . $indexlist . ' ' . $arcList . ' ' . $selfList . ' // 将自定义页面列表插入到这里 </div> </div> </body> </html>'; return $html; } -
重新生成地图: 在后台重新生成网站地图,新的
sitemap.html就会包含你的自定义页面了。
注意: 修改核心文件有风险,升级DedeCMS时可能会被覆盖,建议记录好修改内容,以便后续升级后重新应用。
优化2:优化 sitemap.xml 格式
默认的 sitemap.xml 可能不是标准的Sitemap格式(缺少 <lastmod>、<changefreq>、<priority> 等标签)。
修改方法:
-
找到生成XML的函数: 在
sitemap.class.php中找到GetSiteMapXml()函数。 -
修改函数逻辑: 修改它,使其生成符合标准的XML。
// 修改 GetSiteMapXml() 函数 function GetSiteMapXml() { global $dsql; $s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; $s .= "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n"; // 1. 添加首页 $s .= " <url>\n"; $s .= " <loc>" . $GLOBALS['cfg_basehost'] . "/</loc>\n"; $s .= " <lastmod>" . date('Y-m-d', time()) . "</lastmod>\n"; $s .= " <changefreq>daily</changefreq>\n"; $s .= " <priority>1.0</priority>\n"; $s .= " </url>\n"; // 2. 添加栏目页 $dsql->SetQuery("SELECT * FROM `dede_arctype` WHERE ispart<>2 ORDER by sortrank asc"); $dsql->Execute(); while ($row = $dsql->GetArray()) { $typeurl = GetTypeUrl($row['typeid'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule2'], $row['moresite'], $row['siteurl']); $s .= " <url>\n"; $s .= " <loc>" . $typeurl . "</loc>\n"; $s .= " <lastmod>" . date('Y-m-d', $row['uptime']) . "</lastmod>\n"; $s .= " <changefreq>weekly</changefreq>\n"; $s .= " <priority>0.8</priority>\n"; $s .= " </url>\n"; } // 3. 添加文章页 (这是最耗时的部分,大站要小心) // 为了防止超时,可以分页查询或限制数量 $dsql->SetQuery("SELECT * FROM `dede_archives` ORDER BY pubdate DESC LIMIT 1000"); // 限制为最新的1000篇文章 $dsql->Execute(); while ($row = $dsql->GetArray()) { $arcUrl = GetFileUrl($row['id'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake'], $row['arcrank'], $row['namerule'], $row['typedir'], $row['money'], $row['filename'], $row['moresite'], $row['siteurl'], $row['sitepath']); $s .= " <url>\n"; $s .= " <loc>" . $arcUrl . "</loc>\n"; $s .= " <lastmod>" . date('Y-m-d', $row['pubdate']) . "</lastmod>\n"; $s .= " <changefreq>monthly</changefreq>\n"; $s .= " <priority>0.6</priority>\n"; $s .= " </url>\n"; } $s .= "</urlset>"; return $s; } -
重新生成地图: 生成后,你的
sitemap.xml就会是一个标准的、信息更丰富的地图文件,对搜索引擎更友好。
高级技巧:超越自带地图
如果你的网站内容非常多(比如数万篇文章),织梦自带的地图生成方式可能会很慢,甚至导致服务器超时,这时就需要更高级的方案。
技巧1:使用第三方地图生成插件
这是最推荐、最安全、最方便的方法,许多开发者已经制作了功能强大的地图生成插件。
-
优点:
- 不修改核心文件: 升级DedeCMS时不会被覆盖。
- 功能强大: 通常支持分页生成、自动提交、生成多种格式(HTML, XML, TXT, ROR等)。
- 性能优化: 内置缓存机制,生成速度快,不会拖慢网站。
- 界面友好: 后台操作简单直观。
-
如何寻找:
- 在织梦官方论坛、Dede模板吧等社区搜索“网站地图插件”。
- 购买或下载成熟的商业插件。
技巧2:使用Nginx/Apache的地图生成模块 (适合大站)
对于超大型网站,手动生成地图已经不可行,可以利用Web服务器的模块来实时生成。
-
Nginx: 可以使用
ngx_sitemap模块。 -
Apache: 可以使用
mod_sitemap模块。 -
工作原理: 这些模块会在用户访问
sitemap.xml时,根据数据库实时(或通过缓存)生成地图内容,然后返回给用户,这避免了在后台手动生成,实现自动化。 -
缺点:
- 需要服务器有编译安装模块的权限。
- 配置相对复杂,不适合新手。
技巧3:使用Sitemap索引文件
如果你的网站内容实在太多,一个 sitemap.xml 文件会非常大(超过10MB或包含5万个URL),这不符合Sitemap协议的建议。
这时,你应该使用Sitemap索引文件。
-
创建多个子地图文件:
sitemap-articles-1.xml(包含1-5000篇文章)sitemap-articles-2.xml(包含5001-10000篇文章)sitemap-categories.xml(只包含所有栏目)sitemap-pages.xml(只包含自定义页面)
-
创建索引文件
sitemap_index.xml: 这个文件本身不包含URL,而是指向上面所有的子地图文件。<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>https://www.yourdomain.com/sitemap-articles-1.xml</loc> <lastmod>2025-10-27</lastmod> </sitemap> <sitemap> <loc>https://www.yourdomain.com/sitemap-articles-2.xml</loc> <lastmod>2025-10-27</lastmod> </sitemap> <sitemap> <loc>https://www.yourdomain.com/sitemap-categories.xml</loc> <lastmod>2025-10-26</lastmod> </sitemap> </sitemapindex> -
提交索引文件: 只需要将
sitemap_index.xml提交给搜索引擎即可,搜索引擎会自动去抓取它引用的所有子地图。
总结与最佳实践
| 优化级别 | 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 基础 | 后台生成默认地图 | 简单、快速 | 功能有限,SEO价值低 | 所有网站,作为基础配置 |
| 进阶 | 修改 sitemap.class.php |
自由度高,定制性强 | 风险高(升级覆盖),代码复杂 | 有一定开发能力,需求特殊的中小型网站 |
| 高级 | 使用第三方插件 | 推荐!安全、强大、易用 | 可能需要付费或寻找可靠资源 | 绝大多数网站的最佳选择 |
| 专业 | Sitemap索引文件 | 解决超大网站的地图问题 | 实现复杂,需要服务器支持 | 站,URL数量巨大 |
给你的行动建议:
- 新手/普通用户: 直接使用后台生成功能,然后去站长平台提交,如果觉得不够用,花点时间找一个评价好的第三方地图插件,一劳永逸。
- 开发者/高级用户: 可以尝试修改核心文件进行深度定制,但务必做好备份和版本控制。
- 大型网站: 必须考虑第三方插件或Sitemap索引文件方案,以保证地图生成效率和服务器稳定。
希望这份指南能帮助你完美优化织梦DedeCMS的网站地图,提升网站的SEO效果!
