
您现在的位置是:首页 > WordPress教程WordPress教程
WordPress XML站点地图生成
WP集市
2025-09-08
【WordPress教程】
895人已围观
-
先唠唠为啥要搞XML站点地图。这玩意儿说白了就是给搜索引擎指路的地图,告诉蜘蛛们咱网站上有哪些页面、啥时候更新的、优先级咋样。WordPress自己不会自动生成XML格式的站点地图(除非用插件),但咱可以手搓一个——毕竟控制欲强的程序员都喜欢自己掌控一切对吧?
-
首先得明白,站点地图就是个XML文件,结构得像这样:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/hello-world</loc>
<lastmod>2023-04-01T08:00:00+00:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
- 在WordPress里搞这个,最好用functions.php动手。先创建一个触发点,让WordPress在初始化时加载我们的站点地图生成逻辑。比如这样挂接到init钩子上:
add_action('init', 'custom_xml_sitemap');
function custom_xml_sitemap() {
if (isset($_GET['sitemap']) && $_GET['sitemap'] == 'xml') {
// 这里写生成逻辑
}
}
- 接下来核心是抓取所有需要展示的页面链接。通常包括文章、页面、分类目录——但有时候你可能会跳过某些页面(比如隐私政策页不想频繁更新?)。用WP_Query循环文章是最稳的:
$args = array(
'post_type' => array('post', 'page'),
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'modified'
);
$query = new WP_Query($args);
- 然后咱们开始组装XML内容。注意要先设置header为XML格式,不然浏览器会当成文本糊成一团:
header('Content-Type: application/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
- 循环输出每个链接的XML节点。这里有个小技巧:用get_the_modified_time('c')来获取ISO8601格式的时间,搜索引擎更喜欢这个:
while ($query->have_posts()) : $query->the_post();
echo '<url>';
echo '<loc>' . get_permalink() . '</loc>';
echo '<lastmod>' . get_the_modified_time('c') . '</lastmod>';
echo '<changefreq>weekly</changefreq>';
echo '<priority>0.7</priority>';
echo '</url>';
endwhile;
- 别忘了还有分类目录和标签页!这些存档页面也是要收录的。用get_terms()再拉个列表:
$terms = get_terms(array(
'taxonomy' => array('category', 'post_tag'),
'hide_empty' => true,
));
foreach ($terms as $term) {
echo '<url>';
echo '<loc>' . get_term_link($term) . '</loc>';
echo '<lastmod>' . date('c', time()) . '</lastmod>';
echo '<changefreq>monthly</changefreq>';
echo '<priority>0.4</priority>';
echo '</url>';
}
- 最后一定要闭合urlset标签,并退出脚本防止WordPress继续输出多余内容:
echo '</urlset>';
exit();
-
现在访问yoursite.com/?sitemap=xml应该就能看到XML站点地图了。但你会发现这玩意儿没分页——如果文章上万条可能会超XML文件大小限制。这时候得分页处理,比如加个?sitemap=xml&paged=2参数,用OFFSET控制查询偏移量。
-
对了,记得提交给Google Search Console。但提交前最好验证下XML合法性,可以用在线校验工具或者直接扔浏览器里看会不会报错。有时候时间格式输出错位会导致解析失败,比如服务器时区设置不对导致lastmod显示成明年日期(笑)。
-
其实现在很多SEO插件像Yoast已经做得很好,但自己写的话能更灵活控制。比如只想显示特定分类的文章,或者排除某些不想被索引的页面——直接加个tax_query参数或者meta_query就能搞定。
-
最后提醒一下,每次发布新文章最好手动ping一下搜索引擎,告诉它们“嘿地图更新了快来抓”。可以用wp_remote_get()调用Google的ping接口:
wp_remote_get('https://www.google.com/ping?sitemap=' . urlencode(site_url('/?sitemap=xml')));
完事儿之后记得去喝杯咖啡,毕竟搜索引擎抓取需要时间——有时候谷歌的蜘蛛比你家网速还慢呢(耸肩)。
Tags:
文章版权声明:除非注明,否则均为WP集市原创文章,转载或复制请以超链接形式并注明出处。

热门文章
