Skip to Content

No RSS or Atom feed link

What Is This Issue


What is this issue?

This issue checks whether blog and content-publishing pages declare an RSS or Atom feed link tag in the HTML <head> section to enable automatic feed discovery.

A passing implementation requires:

  • A <link rel="alternate" type="application/rss+xml"> tag for RSS feeds, OR
  • A <link rel="alternate" type="application/atom+xml"> tag for Atom feeds
  • The href attribute must point to a valid, accessible feed URL
  • The feed URL must return HTTP 200 with the correct Content-Type

Example: If your blog is at https://example.com/blog, you should declare an RSS feed link tag pointing to /feed.xml so feed readers can automatically discover and subscribe to your content.

Why Is This Important


Why is this issue important?

RSS and Atom feed link tags are crucial for content distribution and audience engagement for blogs and content-publishing websites.

Impacts on SEO and content visibility:

  • Content discoverability: Feed readers (Feedly, NetNewsWire, etc.) and content aggregators rely on autodiscovery tags to automatically detect and subscribe to your content feed. Without these tags, users must manually locate and enter the feed URL.

  • Audience retention: Subscribers receive automatic updates when new content is published, driving repeat visits and engagement. Missing feed tags break this automation.

  • Content syndication: News aggregators, RSS services, and content distribution platforms use these tags to discover and syndicate your content to wider audiences.

  • Crawlability: While not a direct ranking factor, feed autodiscovery helps search engines and content bots discover your latest content updates more efficiently.

Resolving this issue improves the overall SEO health score by ensuring your content is easily discoverable and subscribable, which can lead to increased traffic, better engagement metrics, and wider content distribution.

How XeoPix Detects This


How XeoPix detects this

XeoPix uses a systematic detection process to identify RSS and Atom feed link tag implementation:

  1. Fetch the page: XeoPix issues an HTTP GET request to the target URL and reads the raw HTML response without executing JavaScript.

  2. Scan for alternate link tags: The crawler scans the <head> block for all <link rel="alternate"> tags.

  3. Filter by feed type: XeoPix filters for entries where the type attribute is application/rss+xml or application/atom+xml.

  4. Extract feed information: For each matched tag, the crawler extracts the href, title, and type attributes.

  5. Validate feed presence: The crawler checks whether any valid RSS or Atom feed link tag exists in the page head.

  6. Test feed URL accessibility: XeoPix issues a secondary HTTP GET request to the extracted href URL and records the HTTP status code and Content-Type response header.

  7. Determine pass/fail: The issue passes if a valid RSS or Atom feed link tag is present and the feed URL returns HTTP 200 with a feed-compatible Content-Type. The issue fails if no feed tag is detected or if the feed URL returns a non-2xx status code.

How To Fix


How to fix it

Add the appropriate feed autodiscovery tag inside the page <head> section:

For RSS 2.0 feeds:

<link rel="alternate" type="application/rss+xml" title="Blog Feed" href="/feed.xml" />

For Atom 1.0 feeds:

<link rel="alternate" type="application/atom+xml" title="Blog Feed" href="/atom.xml" />

Step-by-step recommendations:

  1. Generate the feed: Ensure your blog or CMS generates a valid RSS 2.0 or Atom 1.0 feed in XML format.

  2. Add the link tag: Place the appropriate <link rel="alternate"> tag in the <head> section of all pages that belong to the feed’s scope (typically all blog listing and individual post pages).

  3. Verify the href: Ensure the href attribute points to the correct feed URL that returns HTTP 200 when accessed directly.

  4. Check Content-Type: Confirm the feed URL returns the correct Content-Type header:

    • application/rss+xml for RSS feeds
    • application/atom+xml for Atom feeds
  5. Add descriptive title: Include a human-readable title attribute (e.g., “Blog Feed”, “News Feed”) to help users identify the feed in feed readers.

  6. Test autodiscovery: Use feed reader software or browser extensions to verify the feed is automatically discovered when visiting your blog pages.

What We Store


What We Store

Storage Level

Page Level — This issue is evaluated for each individual URL.


Database Table / Prisma Model

PageLinkRelTag


Stored Fields

FieldTypeDescription
rssFeedUrlsJsonRSS feed URLs found on the page

Detection Dependencies

  • The following data sources are required to evaluate this issue:
  • HTML Document — The crawler extracts the <link rel="alternate" type="application/rss+xml"> or <link rel="alternate" type="application/atom+xml"> tags from the HTML head

Examples


Examples

Example 1: Correct RSS feed implementation

Scenario: A blog properly declares an RSS feed link tag.

Passes because:

  • A <link rel="alternate" type="application/rss+xml"> tag is present
  • The href attribute points to a valid feed URL
  • The feed URL returns HTTP 200 with correct Content-Type
<head> <title>My Blog</title> <link rel="alternate" type="application/rss+xml" title="Blog Feed" href="/feed.xml" /> </head>

Example 2: Correct Atom feed implementation

Scenario: A blog uses Atom format instead of RSS.

Passes because:

  • A <link rel="alternate" type="application/atom+xml"> tag is present
  • The href attribute points to a valid feed URL
  • The feed URL returns HTTP 200 with correct Content-Type
<head> <title>My Blog</title> <link rel="alternate" type="application/atom+xml" title="Blog Feed" href="/atom.xml" /> </head>

Example 3: Missing feed tag

Scenario: A blog has no feed autodiscovery tag.

Fails because:

  • No <link rel="alternate"> tag is present for RSS or Atom feeds
  • Feed readers cannot automatically discover the blog’s feed
  • Users must manually subscribe to the feed
<head> <title>My Blog</title> </head>

Corrected version:

<head> <title>My Blog</title> <link rel="alternate" type="application/rss+xml" title="Blog Feed" href="/feed.xml" /> </head>

Unit Test

Test File

xeopix-crawling-v2/__tests__/seo-audit-checks/linkRelTags/issue-131-link-rel-alternate.test.js

Purpose

This unit test validates that the SEO audit correctly detects when a page is missing an RSS or Atom feed <link rel="alternate"> tag in the <head> section.

Tested Function

runLinkRelTags() from toggleGroups/linkRelTags

Issue Information

  • Issue Number: #131
  • Issue Code: LINK_REL_ALTERNATE
  • Toggle Group: linkRelTags

Test Scenarios

Positive Test Cases

  • Should not detect issue when an RSS feed link (type="application/rss+xml") is present
  • Should not detect issue when an Atom feed link (type="application/atom+xml") is present
  • Should not detect issue when multiple feed links (both RSS and Atom) are present

Negative Test Cases

  • Should detect issue when no RSS or Atom feed link exists — message: “RSS or Atom feed link is missing”

Boundary Cases

None.

Edge Cases

  • Wrong type: An <link rel="alternate" type="text/html"> should not be recognised as a valid feed
  • Wrong rel: An <link rel="stylesheet" type="application/rss+xml"> should not be recognised as a valid feed
  • Empty head: Should detect issue when <head></head> is empty

Expected Outcome

Pass

The issue should be reported (i.e., added to ctx.issues) when no <link rel="alternate"> with type="application/rss+xml" or type="application/atom+xml" is found in the <head> section.

Fail

The issue should not be reported when at least one valid RSS or Atom feed link is present in the <head> section.

Validation

  • Correct issue detection when no feed link is present
  • No false positives when a valid RSS or Atom feed link exists
  • Rejects incorrect type values (text/html) even when rel="alternate" is used
  • Rejects incorrect rel values (stylesheet) even when the type is correct
  • Payload validation: extracts rssFeedUrls array with correct href, title, and type properties
  • xeopix-crawling-v2/toggleGroups/linkRelTags.js
  • xeopix-crawling-v2/issueCodes.js

Coverage Summary

  • Validates RSS and Atom feed detection independently
  • Covers edge cases with incorrect rel and type attributes
  • Validates payload structure with correct URL resolution and field extraction
  • Handles empty head gracefully

References

Last updated on