当前位置:首页>WordPress教程>WordPress Sitemap XML 站点地图自定义教程 – 免插件

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

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

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

站点地图 XML 格式概述

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

站点地图必须:

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

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 标记定义

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

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

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

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

添加上次修改日期 – 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 Premium、All in One SEO Pack Pro 或者 SEO PRO 。

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

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

原文地址:https://www.zhanzhangb.com/5073.html

WordPress教程

WordPress网站的数据库才是你的一切,一定要保护好它!

2024-1-24 3:08:49

WordPress教程

自定义WordPress古腾堡图像块的样式

2024-1-24 3:16:26

个人中心
今日签到
有新私信 私信列表
搜索