#精品
WordPress Sitemap XML 站点地图自定义教程 – 免插件

2025-01-12 0 705

从 WordPress 5.5 开始,引入了一项新功能,将基本的、可扩展的XML 站点地图功能添加到 WordPress核心。在默认情况下,它仅提供URL(loc)标记,所以很多站长认为它过于简单而使用其它插件替代,本文将介绍如何免插件自定义 WordPress Sitemap ,以实现更完整的XML地图功能。

WordPress 自带的Sitemap地址为:/wp-sitemap.xml

Sitemap 协议格式由 XML 标签组成。站点地图中的所有数据值都必须是实体转义的。文件本身必须是 UTF-8 编码的。

站点地图必须:

  • 以开始标签开始,以结束标签结束:<urlset></urlset>
  • 在标签中指定命名空间(协议标准) 。
  • 包括每个url的<url>条目,作为父XML标记。
  • 为每个<url>父标记包含一个<loc>子条目。

XML 站点地图示例:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>

<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">

   <url>

      <loc>http://www.zhanzhangb.com/</loc>

      <lastmod>2022-10-10</lastmod>

      <changefreq>monthly</changefreq>

      <priority>0.8</priority>

   </url>

</urlset> 

XML 标记定义

属性 描述
<urlset> 必须 封装文件并引用当前协议标准。
<url> 必须 每个URL条目的父标记。其余的标签是这个标签的子标签。
<loc> 必须 页面的 URL。 如果您的 Web 服务器需要,此 URL 必须以协议(例如 http)开头并以斜杠结尾。 此值必须少于 2,048 个字符。
<lastmod> 可选 页面的上次修改日期。这个日期应该是W3C日期时间格式。如果需要,这种格式允许您省略时间部分,并使用YYYY-MM-DD。请注意,日期必须设置为链接页面的最后修改日期,而不是站点地图生成的时间。还要注意,这个标签与服务器可以返回的If-Modified-Since (304)头是分开的,并且搜索引擎可以不同地使用来自两个源的信息。
<changefreq> 可选 页面可能更改的频率。该值为搜索引擎提供参考信息,可能与搜索引擎搜索页面的频率不完全相关。有效值为:always、hourly、daily、weekly、monthly、yearly、never。注意,这个标签的值被认为是一个提示,而不是一个命令。即使搜索引擎爬虫在作出决定时可能会考虑这些信息,但它们可能会比“每小时”更少地抓取标记为“每小时”的页面,而比“每年”更频繁地抓取标记为“每年”的页面。
<priority> 可选 此URL相对于站点上其他URL的优先级。有效值范围从0.0到1.0。这个值不会影响您的页面与其他站点上的页面的比较,它只是让搜索引擎知道您认为哪些页面对爬网程序最重要。默认优先级是0.5。请注意,您分配给页面的优先级不太可能影响您的URL在搜索引擎结果页面中的排名。搜索引擎在同一网站上选择URL时可能会使用这些信息,因此您可以使用此标记来增加最重要的页面出现在搜索索引中的可能性。另外,请注意,给网站上的所有URL分配一个高优先级可能对你没有帮助。因为优先级是相对的,所以它只用于选择你站点上的URL。

向 WordPress Sitemap XML 站点地图中添加其它标记

WordPress 自带的 Sitemap 虽然默认情况下很简单,但可以使用各种过滤器来完全自定义它。最终使它不亚于任何专业的XML生成插件。

如果你不清楚如何将代码添加到WordPress中,请阅读 WordPress替代编辑functions.php的插件:Code Snippets 一文。

添加上次修改日期 – lastmod

如果网站文章或博客文章会偶尔更新,那么添加<lastmod>标记非常重要,这会让搜索引擎知道URL对应的网页在什么时候做了修改。

/**
向Sitemap添加URL最后修改日期
教程:https://www.zhanzhangb.com/5073.html
 */
add_filter(\'wp_sitemaps_posts_entry\', function( $entry, $post ) {
	$entry[\'lastmod\'] = $post->post_modified_gmt;
	return $entry;
    },
	10,2
);

添加页面更新频率 – changefreq

/**
向Sitemap添加URL页面内容更新频率
教程:https://www.zhanzhangb.com/5073.html
 */
add_filter(\'wp_sitemaps_posts_entry\', function( $entry, $post ) {
	$entry[\'changefreq\'] = \'Weekly\'; //设置为每周更新,此处的值可根据需要修改
	return $entry;
    },
	10,2
);
  • always:每次
  • hourly:每小时
  • daily:每天
  • weekly:每周
  • monthly:每月
  • yearly:每年
  • never:从不更新

添加页面URL权重值 – priority

/**
向Sitemap添加URL页面的优先级
教程:https://www.zhanzhangb.com/5073.html
 */
add_filter(\'wp_sitemaps_posts_entry\', function( $entry, $post ) {
	$entry[\'priority\'] = \'0.7\'; //取值范围0.0 - 1.0
	return $entry;
    },
	10,2
);

lastmod、changefreq、priority 组合使用示例

/**
向Sitemap添加 lastmod、changefreq、priority 标记
教程:https://www.zhanzhangb.com/5073.html
 */
add_filter(
    \'wp_sitemaps_posts_entry\',
    function( $entry, $post ) {
			$entry[\'lastmod\'] = $post->post_modified_gmt;
			$entry[\'changefreq\'] = \'Weekly\';
			$entry[\'priority\'] = \'0.7\';
        return $entry;
    },
    10,2
);

从 Sitemap 中排除指定帖子

/**
从 WordPress Sitemap 中排除指定帖子
教程:https://www.zhanzhangb.com/5073.html
 */
add_filter(
    \'wp_sitemaps_posts_query_args\',
    function( $args, $post_type ) {
        if ( \'post\' !== $post_type ) {
            return $args;
        }
         $args[\'post__not_in\'] = isset( $args[\'post__not_in\'] ) ? $args[\'post__not_in\'] : array();
        $args[\'post__not_in\'][] = 123; // 123是要排除的帖子的ID。
        return $args;
    },
    10,2
);

删除部分站点地图

默认情况下 WordPress Sitemap 会输出三种类型,帖子(含页面)、分类(含tag)和用户,如果要在Sitemap中删除某部分则也可以使用相应的过滤器来实现。

/**
从 WordPress Sitemap 中禁用部分列表
教程:https://www.zhanzhangb.com/5073.html
 */

//禁用作者列表
add_filter(
    \'wp_sitemaps_add_provider\',
    function( $provider, $name ) {
        if ( \'users\' === $name ) {
            return false;
        }
 
        return $provider;
    },
    10,2
);

//禁用page帖子类型的站点地图
add_filter(
    \'wp_sitemaps_post_types\',
    function( $post_types ) {
        unset( $post_types[\'page\'] );
        return $post_types;
    }
);

//禁用post_tag分类的站点地图
add_filter(
    \'wp_sitemaps_taxonomies\',
    function( $taxonomies ) {
        unset( $taxonomies[\'post_tag\'] );
        return $taxonomies;
    }
);

修改地图索引中URL数量最大值

站点地图索引最多可包含 50000 个站点地图,单个站点地图最多可包含 2000 个(可过滤的)条目。

/**
将 WordPress Sitemap 单个xml文件中帖子URL的数量限制为1000
教程:https://www.zhanzhangb.com/5073.html
 */
apply_filters( \'wp_sitemaps_max_urls\', 1000, \'post\' );

总结

经过以上自定义设置后,WordPress 集成的 Sitemap 可以与任何地图插件生成的 Sitemap 媲美。不过图片/视频/新闻站点地图暂时不支持,如果有这方面的需求推荐使用 Yoast SEO PremiumAll in One SEO Pack Pro 或者 Rank Math SEO PRO

额外提示:Yoast SEO 生成的 Sitemap 是不支持<changefreq><priority>标记的,因为 Google 已明确宣称这两个标记不如<lastmod>指定更新时间,但百度及其它搜索引擎目前是支持<changefreq><priority>标记的。

All in One SEO Pack Pro 与 Rank Math SEO PRO 的站点地图均支持<changefreq><priority>标记。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在!
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。联系邮箱:3496947425@qq.com

813站长大咖 精品文章 WordPress Sitemap XML 站点地图自定义教程 – 免插件 https://www.813master.cn/1491.html

WordPress极客一枚!无干货,不分享!

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务