Creating a Static/HTML Sitemap in WordPress Without a Plugin

How to create a static/HTML sitemap in WordPress without a plugin

Published: Last updated:

By:

Creating a Static/HTML Sitemap in WordPress Without a Plugin

Map illustration

We have put together a quick guide to creating a static/HTML sitemap in WordPress without having to install a plugin.

HTML Sitemap in WordPress Without a Plugin

By using the built in wp_list_pages function combined with a shortcode you can quickly create a simple and lightweight static sitemap for your site.

Pre-requisite: You will need to be able to edit your functions.php (preferably in a child theme).

Yoast

If you use Yoast SEO and don't want to include pages that have been noindexed in your static sitemap, you can make use of the code from Lime Web Development.

add_filter( 'get_pages', 'lwd_exclude_no_indexes_from_wp_list_pages', 10, 2 );

function lwd_exclude_no_indexes_from_wp_list_pages( $pages, $args ) {
if( array_key_exists( 'walker', $args ) ) {
foreach ( $pages as $key => $item ) {
$_yoast_wpseo_meta_robots_noindex = get_post_meta( $item->ID, '_yoast_wpseo_meta-robots-noindex', true );
if( $_yoast_wpseo_meta_robots_noindex == 1 ) unset( $pages[$key] );
}
}
return $pages;
}

function lwd_no_plug_html_sitemap() {
$pages = wp_list_pages([
'echo' => false,
'title_li' => ''
]);
return $pages;
}
add_shortcode( 'lwd_no_plug_html_sitemap', 'lwd_no_plug_html_sitemap' );
Code language: PHP (php)

In the above example the shortcode you would use is:

[lwd_no_plug_html_sitemap]

All in One SEO Pack

If you use All in One SEO Pack the code is slightly different, as follows:

add_filter( 'get_pages', 'lwd_exclude_no_indexes_from_wp_list_pages', 10, 2 );

function lwd_exclude_no_indexes_from_wp_list_pages( $pages, $args ) {
if( array_key_exists( 'walker', $args ) ) {
foreach ( $pages as $key => $item ) {
$_aioseop_noindex = get_post_meta( $item->ID, '_aioseop_noindex', true );
if( $_aioseop_noindex == 1 ) unset( $pages[$key] );
}
}
return $pages;
}

function lwd_no_plug_html_sitemap() {
$pages = wp_list_pages([
'echo' => false,
'title_li' => ''
]);
return $pages;
}
add_shortcode( 'lwd_no_plug_html_sitemap', 'lwd_no_plug_html_sitemap' );
Code language: PHP (php)

Again, in the above example the shortcode you would also use:

[lwd_no_plug_html_sitemap]

You might find our post on how to create a WooCommerce product sitemap interesting.

Need help with WordPress? Search Candy provide WordPress design and development services - click here to find out more.

chevron-down