PHPackages                             humanmade/msm-sitemap - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. humanmade/msm-sitemap

ActiveWordpress-plugin

humanmade/msm-sitemap
=====================

Comprehensive sitemaps for your WordPress.com VIP site.

1.4.2(6y ago)126.0k1GPL-2.0+PHP

Since May 14Pushed 5y ago10 watchersCompare

[ Source](https://github.com/humanmade/msm-sitemap)[ Packagist](https://packagist.org/packages/humanmade/msm-sitemap)[ Docs](https://vip.wordpress.com/plugins/msm-sitemap/)[ RSS](/packages/humanmade-msm-sitemap/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (1)Versions (19)Used By (0)

Comprehensive Sitemaps
======================

[](#comprehensive-sitemaps)

Comprehensive sitemaps for your WordPress.com VIP site. Joint collaboration between Metro.co.uk, WordPress.com VIP, Alley Interactive, Maker Media, 10up, and others.

How It Works
------------

[](#how-it-works)

### Sitemap Data Storage

[](#sitemap-data-storage)

- One post type entry for each date.
- Sitemap XML is generated and stored in meta. This has several benefits:
- Avoid memory and timeout problems when rendering heavy sitemap pages with lots of posts.
- Older archives that are unlikely to change can be served up faster since we're not building them on-demand.
- Archive pages are rendered on-demand.

### Sitemap Generation

[](#sitemap-generation)

We want to generate the entire sitemap catalogue async to avoid running into timeout and memory issues.

Here's how the defualt WP-Cron approach works:

- Get year range for content.
- Store these years in options table.
- Kick off a cron event for the first year.
- Calculate the months to process for that year and store in an option.
- Kick off a cron event for the first month in the year we're processing.
- Calculate the days to process for that year and store in an option.
- Kick off a cron event for the first day in the month we're processing.
- Generate the sitemap for that day.
- Find the next day to process and repeat until we run out of days.
- Move on to the next month and repeat.
- Move on to next year when we run out of months.

CLI Commands
------------

[](#cli-commands)

The plugin ships with a bunch of wp-cli commands to simplify sitemap creation:

```
$ wp msm-sitemap
usage: wp msm-sitemap generate-sitemap
   or: wp msm-sitemap generate-sitemap-for-year
   or: wp msm-sitemap generate-sitemap-for-year-month
   or: wp msm-sitemap generate-sitemap-for-year-month-day
   or: wp msm-sitemap recount-indexed-posts

See 'wp help msm-sitemap ' for more information on a specific command.

```

Filtering Sitemap URLs
----------------------

[](#filtering-sitemap-urls)

If you need to filter the URLs displayed in a sitemap created via the Comprehensive Sitemap plugin, there are two considerations. First, if you are filtering the individual sitemaps, which display the URLs to the articles published on a specific date, you can use the `msm_sitemap_entry` hook to filter the URLs. An example for a reverse-proxy situation is below:

```
function example_filter_msm_sitemap_entry( $url ) {
    $location = str_replace( 'example.wordpress.com', 'example.com/blog', $url->loc );
    $url->loc = $location;
    return $url;
}
add_filter( 'msm_sitemap_entry', 'example_filter_msm_sitemap_entry', 10, 1 );

```

Second, if you are filtering the root sitemap, which displays the URLs to the individual sitemaps by date, you will need to filter the `home_url` directly. There is no plugin-specific hook to filter the URLs on the root sitemap.

Filter Sitemap Index
--------------------

[](#filter-sitemap-index)

Use the `msm_sitemap_index` filter to exclude daily sitemaps from the index based on date.

```
add_filter( 'msm_sitemap_index', function( $sitemaps ) {
    $reference_date = strtotime( '2017-09-09' );

    return array_filter( $sitemaps, function ( $date ) use ( $reference_date ) {
        return ( $reference_date < strtotime( $date ) );
    } );
} );

```

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~243 days

Recently: every ~278 days

Total

8

Last Release

2313d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/77dbeefb7745010589603f2ffc6ff310d8f700b58e08d52af190744c43342526?d=identicon)[roborourke](/maintainers/roborourke)

---

Top Contributors

[![mjangda](https://avatars.githubusercontent.com/u/86105?v=4)](https://github.com/mjangda "mjangda (81 commits)")[![Mobius5150](https://avatars.githubusercontent.com/u/1120274?v=4)](https://github.com/Mobius5150 "Mobius5150 (48 commits)")[![david-binda](https://avatars.githubusercontent.com/u/3651036?v=4)](https://github.com/david-binda "david-binda (18 commits)")[![pkevan](https://avatars.githubusercontent.com/u/2290623?v=4)](https://github.com/pkevan "pkevan (15 commits)")[![mdbitz](https://avatars.githubusercontent.com/u/5784663?v=4)](https://github.com/mdbitz "mdbitz (14 commits)")[![whyisjake](https://avatars.githubusercontent.com/u/848187?v=4)](https://github.com/whyisjake "whyisjake (12 commits)")[![ericmann](https://avatars.githubusercontent.com/u/605474?v=4)](https://github.com/ericmann "ericmann (7 commits)")[![bcampeau](https://avatars.githubusercontent.com/u/966849?v=4)](https://github.com/bcampeau "bcampeau (7 commits)")[![kraftbj](https://avatars.githubusercontent.com/u/88897?v=4)](https://github.com/kraftbj "kraftbj (6 commits)")[![roborourke](https://avatars.githubusercontent.com/u/23417?v=4)](https://github.com/roborourke "roborourke (6 commits)")[![lgedeon](https://avatars.githubusercontent.com/u/370981?v=4)](https://github.com/lgedeon "lgedeon (4 commits)")[![kasparsd](https://avatars.githubusercontent.com/u/169055?v=4)](https://github.com/kasparsd "kasparsd (3 commits)")[![joshbetz](https://avatars.githubusercontent.com/u/300429?v=4)](https://github.com/joshbetz "joshbetz (2 commits)")[![ethitter](https://avatars.githubusercontent.com/u/321503?v=4)](https://github.com/ethitter "ethitter (2 commits)")[![netaustin](https://avatars.githubusercontent.com/u/475291?v=4)](https://github.com/netaustin "netaustin (1 commits)")[![brettshumaker](https://avatars.githubusercontent.com/u/1558827?v=4)](https://github.com/brettshumaker "brettshumaker (1 commits)")[![GaryJones](https://avatars.githubusercontent.com/u/88371?v=4)](https://github.com/GaryJones "GaryJones (1 commits)")[![blunce24](https://avatars.githubusercontent.com/u/12699085?v=4)](https://github.com/blunce24 "blunce24 (1 commits)")[![ryanmarkel](https://avatars.githubusercontent.com/u/4636317?v=4)](https://github.com/ryanmarkel "ryanmarkel (1 commits)")[![shantanu2704](https://avatars.githubusercontent.com/u/9296246?v=4)](https://github.com/shantanu2704 "shantanu2704 (1 commits)")

### Embed Badge

![Health badge](/badges/humanmade-msm-sitemap/health.svg)

```
[![Health](https://phpackages.com/badges/humanmade-msm-sitemap/health.svg)](https://phpackages.com/packages/humanmade-msm-sitemap)
```

###  Alternatives

[elgg/elgg

Elgg is an award-winning social networking engine, delivering the building blocks that enable businesses, schools, universities and associations to create their own fully-featured social networks and applications.

1.7k15.7k5](/packages/elgg-elgg)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

44643.1k1](/packages/pressbooks-pressbooks)[johnbillion/user-switching

Instant switching between user accounts in WordPress and WooCommerce.

19768.3k2](/packages/johnbillion-user-switching)[rainlab/blog-plugin

Blog plugin for October CMS

17257.7k](/packages/rainlab-blog-plugin)[rainlab/user-plugin

User plugin for October CMS

11954.3k13](/packages/rainlab-user-plugin)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
