为Discuz和WordPress网站添加Sitemap

网站地图有助于搜索引擎了解网站的结构等信息,有利于更好的抓取网站,本文记录为 DiscuzX 3.4 和 WordPress 添加网站地图的方法。

WordPress网站地图

可以直接使用 All in one SEO 插件。

DiscuzX网站地图

使用 bugx 开发的脚本,添加到后台计划任务。脚本见 Github,已修改为支持 PHP7 和 DiscuzX 3.4。

然后设置 rewrite 规则,让子目录中的 Sitemap XML 文件能以根目录形式访问到。需要注意的是,DiscuzX 的 nginx rewrite 规则中有以下指令:

if (!-e $request_filename) {
	return 404;
}

因此,Sitemap 的 rewrite 规则应在 DiscuzX 的 rewrite 之前添加:

rewrite ^/(forum|group|home|portal)_sitemap\.xml /sitemap/$1_sitemap.xml last;
rewrite ^/([a-z]+)_sitemap_([0-9]+)\.xml  /sitemap/$1_sitemap_$2.xml last;

之后在将 Sitemap 链接加到 robots.txt 中:

Sitemap: https://论坛域名/forum_sitemap.xml
Sitemap: https://群组域名/group_sitemap.xml
Sitemap: https://家园域名/home_sitemap.xml
Sitemap: https://门户域名/portal_sitemap.xml

提交网站地图到搜索引擎

网站地图生成之后,可以主动提交给搜索引擎。WordPress 只需要提交 /sitemap.xml ,DiscuzX Sitemap 脚本生成了 4 个 XML,都需要提交。以下是谷歌和百度的 Sitemap 提交方法。

Google

通过 Google Search Console 提交。

百度

通过 百度搜索资源平台 提交。

网站地图相关问题

网站地图是什么

站点地图是一种文件,您可以在其中提供与您网站中的网页、视频或其他文件有关的信息,还可以说明这些内容之间的关系。Google 等搜索引擎会读取此文件,以便更加智能地抓取您的网站。站点地图会告诉 Google 您认为网站中的哪些网页和文件比较重要,还会提供与这些文件有关的重要信息:以网页为例,这些信息包括网页上次更新的时间、网页更改的频率,以及网页是否有其他语言版本。

如果您网站上的网页链接得当,那么 Google 通常能够发现其中的大多数网页。即便如此,站点地图仍有助于我们更加高效地抓取规模更大、更复杂的网站或更特殊的文件。

由于 Google 是依靠复杂的算法安排抓取流程的,因此,使用站点地图并不能保证 Google 能抓取站点地图中的所有内容并将其编入索引。但在大多数情况下,您的网站都会因使用站点地图而受益,而绝不会受损。

来自谷歌 Search Console 帮助

网站地图多久更新一次

Google 并非每次抓取网站时都会查看站点地图。我们仅在首次发现站点地图时查看;之后仅在您使用 ping 功能通知我们站点地图有变更时查看。请仅在新建或更新站点地图时向 Google 发送站点地图相关提醒。如果站点地图无任何变更,请勿多次向我们提交或 ping 站点地图。

来自谷歌 Search Console 帮助

看起来似乎不需要频繁更新 Sitemap。 目前 WordPress Sitemap 由插件控制,新文章发布后就会更新 Sitemap. DiscuzX 通过计划任务,一天更新一次。

robots.txt中指定Sitemap

将站点地图提供给 Google,方法有两种:将其添加到 robots.txt 文件中,或者将其直接提交给 Search Console。

来自谷歌 Search Console 帮助

看起来 robots.txt 中只是让搜索引擎自动找到 Sitemap 的一种方法,如果手动提交了,不写也是可以的。

网站地图为什么要放根目录

站点地图可以发布在网站上的任何位置,但是站点地图只影响父级目录中的下级目录。因此,如果站点地图发布在网站的根目录下,则可以影响网站上的所有文件,所以我们建议将站点地图发布在此目录下。

来自谷歌 Search Console 帮助

第二步,将Sitemap文件放置在网站目录下。比如您的网站为example.com,您已制作了一个sitemap_example.xml的Sitemap文件,将sitemap_example.xml上传至网站根目录即example.com/sitemap_example.xml

来自 百度搜索资源平台 帮助

The location of a Sitemap file determines the set of URLs that can be included in that Sitemap. A Sitemap file located at http://example.com/catalog/sitemap.xml can include any URLs starting with http://example.com/catalog/ but can not include URLs starting with http://example.com/images/.

https://www.sitemaps.org/protocol.html#location

百度和谷歌都说要放在 根目录,但是我一开始不知道这个规则时用了子目录提交,也都没有报错,已发现的网址数量 也正常。为了避免麻烦,还是遵守这个规定,用 Nginx rewrite 重写子目录的链接。

其他方案

可以使用百度自动推送代码。
自动推送 JS 代码是百度站长平台最新推出的轻量级链接提交组件,站长只需将自动推送的 JS 代码放置在站点每一个页面源代码中,当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。

<script>
(function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https'){
   bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
  }
  else{
  bp.src = 'http://push.zhanzhang.baidu.com/push.js';
  }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>

WordPress 可以编辑模板加入,DiscuzX 可以在后台 第三方统计代码 里加入,或者用插件,在 global_footer 里加入。

参考资料

1. https://support.google.com/webmasters/answer/156184?hl=zh-Hans
2. https://support.google.com/webmasters/answer/183668?hl=zh-Hans
3. https://ziyuan.baidu.com/college/courseinfo?id=267&page=2#04

One thought on “为Discuz和WordPress网站添加Sitemap

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注