Opens in a new tabSkip to content
Agent LighthouseAgent Lighthouse

    Searches the text of every published page. The evidence sources themselves are not in this index — search all of them on the trusted sources page.

    GitHub ↗
    Browse checks and page contents
    machine-discovery/websub-hub-advertisement

    Feeds advertise a WebSub hub and exactly one canonical self link

    What it checks

    Checks whether feeds advertise a push hub per the WebSub Recommendation. More importantly, it checks that the mandatory rel=self link is present, absolute, and equal to the URL the feed was actually fetched from. A wrong self-link breaks hub verification even when a hub is configured.

    Why it matters

    WebSub is a W3C Recommendation requiring publishers to advertise at least one rel=hub and exactly one rel=self via Link headers or embedded link elements, with Link headers taking discovery precedence. Falsifiable claim: a feed that declares a hub, but carries a missing, relative or non-canonical rel=self, cannot complete hub subscription verification. The push path then silently degrades to whatever polling cadence subscribers happen to use. The failure is invisible to the publisher, because the hub appears configured. This check is scored as advisory only: the WebSub conformance assertion is exact and standards-backed, but no AI answer engine is documented as a WebSub subscriber, so the consumer-side benefit is a plausible convention rather than documented behaviour.

    Evidence

    • WebSub (W3C Recommendation) — W3C (spec, URL verified 2026-08-20)
    • W3C Recommendation. Publishers ‘MUST implement at least one’ of Link Headers or embedded link elements, advertising at least one rel=hub and exactly one rel=self (the canonical topic URL). Discovery checks Link headers first, then embedded link elements; for HTML, link elements are recommended in <head> only.
    • RFC 4287 — The Atom Syndication Format — IETF (spec, URL verified 2026-08-20)
    • Sec 4.1.2: atom:entry MUST contain exactly one atom:id and exactly one atom:updated. The id is a permanent, universally unique IRI that ‘must not change across different instantiations of the entry’. The updated time is the ‘most recent modification time that the publisher considers significant’. atom:entry MUST also contain atom:summary in two cases: when atom:content carries a src attribute, and is thus empty, and when content is Base64-encoded. MUST NOT contain more than one atom:summary.
    • schema.org DataFeed — schema.org (spec, URL verified 2026-08-20)
    • DataFeed = ‘a single feed providing structured information about one or more entities or topics’; hierarchy Thing > CreativeWork > Dataset > DataFeed; primary property dataFeedElement accepting DataFeedItem/Text/Thing; DataFeedItem examples use dateCreated, dateModified, item. Adoption is only 1K-10K domains per Google’s web index (July 2026 aggregation) — too thin to score against.

    How it scores

    Tier per evidence policy: informative (weight 0) — grade C does not meet the A/B bar required for scored audits.

    Example failure

    A WordPress site with the PubSubHubbub plugin emits <atom:link rel="hub" href="https://pubsubhubbub.appspot.com/"/> alongside <atom:link rel="self" href="/feed/"/> — a relative href. Every hub subscription attempt fails verification because the topic URL cannot be resolved to the canonical feed, so the site has push infrastructure installed, a plugin reporting success, and zero actual fanout.

    Sources