No RSS or Atom feed link
What Is This Issue
sidebar_label: “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
hrefattribute 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
sidebar_label: “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
sidebar_label: “How XeoPix detects this”
How XeoPix detects this
XeoPix uses a systematic detection process to identify RSS and Atom feed link tag implementation:
-
Fetch the page: XeoPix issues an HTTP GET request to the target URL and reads the raw HTML response without executing JavaScript.
-
Scan for alternate link tags: The crawler scans the
<head>block for all<link rel="alternate">tags. -
Filter by feed type: XeoPix filters for entries where the
typeattribute isapplication/rss+xmlorapplication/atom+xml. -
Extract feed information: For each matched tag, the crawler extracts the
href,title, andtypeattributes. -
Validate feed presence: The crawler checks whether any valid RSS or Atom feed link tag exists in the page head.
-
Test feed URL accessibility: XeoPix issues a secondary HTTP GET request to the extracted
hrefURL and records the HTTP status code and Content-Type response header. -
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
sidebar_label: “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:
-
Generate the feed: Ensure your blog or CMS generates a valid RSS 2.0 or Atom 1.0 feed in XML format.
-
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). -
Verify the href: Ensure the
hrefattribute points to the correct feed URL that returns HTTP 200 when accessed directly. -
Check Content-Type: Confirm the feed URL returns the correct Content-Type header:
application/rss+xmlfor RSS feedsapplication/atom+xmlfor Atom feeds
-
Add descriptive title: Include a human-readable
titleattribute (e.g., “Blog Feed”, “News Feed”) to help users identify the feed in feed readers. -
Test autodiscovery: Use feed reader software or browser extensions to verify the feed is automatically discovered when visiting your blog pages.
What We Store
sidebar_label: “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
| Field | Type | Description |
|---|---|---|
| rssFeedUrls | Json | RSS 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
sidebar_label: “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
hrefattribute 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
hrefattribute 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
typevalues (text/html) even whenrel="alternate"is used - Rejects incorrect
relvalues (stylesheet) even when thetypeis correct - Payload validation: extracts
rssFeedUrlsarray with correcthref,title, andtypeproperties
Related Production Files
xeopix-crawling-v2/toggleGroups/linkRelTags.jsxeopix-crawling-v2/issueCodes.js
Coverage Summary
- Validates RSS and Atom feed detection independently
- Covers edge cases with incorrect
relandtypeattributes - Validates payload structure with correct URL resolution and field extraction
- Handles empty head gracefully
References
- RSS 2.0 Specification — RSS Advisory Board
- Atom Syndication Format — RFC 4287 — IETF
- MDN — link type=‘alternate’ — MDN