Documentation

Notice a stale feed or an empty sitemap before your readers do

XML files rarely break loudly. The job that writes the RSS feed stops, and the server keeps serving the last file it wrote — for weeks, until a reader asks why nothing new has appeared. A deploy regenerates the sitemap with no URLs in it, or with the staging hostname in every one, and search traffic declines slowly enough that nobody connects it to the release. A partner export is cut off halfway, and the partner's overnight import fails.

All of these answer 200 OK. Pingsured parses the XML and checks what is in it.

What to check

An RSS feed:

XPathOperatorValue
/rss/channel/itemcount at least1
/rss/channel/item[1]/pubDateage less than172800

The second line fails when the newest item is more than two days old — set it to however often you publish. For an Atom feed, the same checks are /feed/entry and /feed/updated.

A sitemap:

XPathOperatorValue
/urlset/urlcount at least50
//loc[contains(., 'staging.')]does not exist

The first catches a sitemap that lost its pages; the second catches one that points search engines at the wrong host.

The namespace a sitemap or an Atom feed declares does not need to appear in the expression: /urlset/url matches as written.

Dates in feeds

The age operators read the date formats feeds use:

  • Atom and most XML APIs: ISO 8601, such as 2026-10-05T14:30:00Z;
  • RSS: Mon, 05 Oct 2026 14:30:00 +0000, or with GMT in place of the offset.

The day must be written with two digits. A feed that writes Mon, 5 Oct 2026 is not recognised, and the check fails with "not a recognised timestamp" rather than passing — so you see it on the first check, not on the day the feed goes stale.

Why check your feeds with Pingsured

  • A broken file fails on its own. A response that is not well-formed XML fails every XML check on the ping, so a truncated export is reported without a check written for it.
  • Freshness is one line. No need for a script that downloads the feed, parses the date and then needs monitoring of its own.
  • XPath as you know it, with counts, text comparisons and regular expressions, and up to 16 checks per ping.
  • Each location on its own. A feed served from a CDN can be fresh at one edge and stale at another; checking from more than one location shows which.
  • A check, not a crawler. Each ping is one request at the interval you set, identified by its User-Agent, so the load on your server is known in advance.

Limits worth knowing

  • Only the first 1 MB of the response is read, and XML cut off there is no longer well-formed — the check fails. A large sitemap is usually split into several files under a sitemap index; check the index and one of the smaller files, not a 10 MB sitemap.
  • Checks send GET or HEAD, so XML services that need a POST request, such as SOAP, cannot be checked yet.