A clean, well-structured RSS feed gives your channel the best possible appearance inside Tikker — proper headlines, dates, author bylines, images, and full article text. This guide covers what makes a feed work well, sample markup you can adapt, and the most common fixes for WordPress, Drupal, and Ghost.
1. What Tikker reads from your feed
Tikker is a tolerant RSS consumer — it accepts RSS 2.0, Atom 1.0, and feeds that mix both conventions. For each feed item, Tikker looks for the following information, in the order shown. The first match wins.
Required
| What it is | Tikker looks for (in order) | Notes |
|---|---|---|
| Title | <title> |
Plain text; no HTML markup. |
| Article URL | <link> |
Must be a canonical, permanent URL. Used as the identifier across re-fetches. |
| Publication date | <pubDate>, <dc:date>, <published>, <updated> |
Any standard RFC 822 / ISO 8601 string. Avoid blank or "Thu, 01 Jan 1970…" placeholders. |
Strongly recommended
| What it is | Tikker looks for (in order) | Notes |
|---|---|---|
| Full article content | <content:encoded>, <content>, <description>/<summary> |
At least 400 characters of usable text. content:encoded (CDATA-wrapped full HTML body) is preferred. A 1-2 sentence <description> alone is too short — Tikker will fall back to it, but the article card will look anaemic. |
| Author / byline | <dc:creator>, <creator>, <atom:author>/<atom:name>, <author>/<name> |
Any one is fine. Plain author name preferred over an email-only author. |
| Featured image | <enclosure type="image/...">, <media:content type="image/...">, <itunes:image>, <image>, or first <img> inside <content:encoded> |
Use an absolute URL (https://…). At least 600×400 px is ideal for crisp display on cards. |
| Categories / tags | <category>, <dc:subject>, <tags> |
Repeating elements are fine; helps with discovery filters. |
| YouTube | <yt:videoId> (YouTube's native Atom feed) or a YouTube URL inside <content:encoded> |
If your post embeds a YouTube video, leaving the URL in the content body is sufficient — Tikker extracts it. |
Update signal
Tikker considers an item updated if its <pubDate> (or equivalent) changes while the <link> stays the same. Bumping the date is how you tell Tikker to re-fetch a corrected article.
2. Sample item — what "good" looks like
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>Acme Daily</title>
<link>https://acme.example.com/</link>
<description>Coverage of things that matter.</description>
<language>en-IN</language>
<item>
<title>Bengaluru rolls out rooftop solar incentive for SMEs</title>
<link>https://acme.example.com/2026/06/solar-sme-incentive</link>
<guid isPermaLink="true">https://acme.example.com/2026/06/solar-sme-incentive</guid>
<pubDate>Wed, 04 Jun 2026 09:15:00 +0530</pubDate>
<dc:creator>Anita Rao</dc:creator>
<category>Energy</category>
<category>Karnataka</category>
<description>Karnataka announces a 30% capital subsidy for SMEs installing
rooftop solar systems above 10 kW capacity, alongside accelerated grid
interconnection.</description>
<enclosure url="https://acme.example.com/img/solar-sme-2026.jpg"
type="image/jpeg" length="184320" />
<media:content url="https://acme.example.com/img/solar-sme-2026.jpg"
type="image/jpeg" medium="image"
width="1200" height="800" />
<content:encoded><![CDATA[
<p>The Karnataka government on Wednesday unveiled a revised rooftop solar
scheme for small and medium enterprises, offering a 30% capital subsidy
on installations above 10 kW capacity. Officials said the scheme will
also fast-track grid interconnection approvals, currently a major
bottleneck for SMEs in industrial zones around Peenya and Hoskote.</p>
<p><img src="https://acme.example.com/img/solar-sme-2026.jpg"
alt="Rooftop solar panels on a Bengaluru factory" /></p>
<p>"The earlier residential-focused scheme created a perverse situation
where a 5 kW home installation was subsidised while a 50 kW factory
rooftop was not," said an official from BESCOM. The new policy is
budgeted at ₹420 crore for FY 26-27 and is expected to support
approximately 4,000 SME installations.</p>
<p>Industry groups welcomed the move while flagging concerns about
verification timelines. Read the full policy notification at the link
in our bio.</p>
]]></content:encoded>
</item>
</channel>
</rss>
Why this item works well:
- ≥400 characters of substantive content inside CDATA-wrapped
content:encoded - Plain-text
title(no HTML) - RFC 822
pubDatewith timezone - Author in
dc:creator - Image declared three ways (
enclosure,media:content, and inline<img>) — any RSS reader will find it - Categories repeat naturally
guidis the canonical permalink (isPermaLink="true")
3. WordPress — common problems and fixes
WordPress is generally well-behaved by default but has a few traps.
Problem: Feed contains only short excerpts
Cause: Settings → Reading → "For each post in a feed, include" set to "Excerpt".
Fix: Change to "Full text". The feed will then expose <content:encoded> with the full post body.
Problem: No featured image in the feed
Cause: WordPress core does not emit the featured image into RSS. Fixes (any one):
- Install Featured Image in RSS w/ Size and Position by RedLettuce (lightweight, well-maintained).
- Or use Yoast SEO — its News/RSS module adds a featured image enclosure.
- Or add this to
functions.php:add_filter('the_content_feed', function ($content) { global $post; if (has_post_thumbnail($post->ID)) { $thumb = get_the_post_thumbnail($post->ID, 'large'); $content = $thumb . $content; } return $content; });
Problem: Author shows as "admin" or site name
Cause: Posts authored by a generic admin account.
Fix: Edit the post and reassign authorship to a real user whose display name is set in Users → Profile. Yoast and most SEO plugins write the display name to <dc:creator>.
Problem: Categories missing
Cause: Posts saved under "Uncategorized" only.
Fix: Assign at least one meaningful category per post. WordPress emits each as a <category>.
Problem: Video posts have no thumbnail or content
Cause: Embedded YouTube/Vimeo doesn't survive the feed.
Fix: Always set a Featured Image on video posts and write at least 400 chars of accompanying text. WordPress' oEmbed renders the video URL inside content:encoded, which Tikker picks up.
4. Drupal — common problems and fixes
Drupal's default RSS module is minimal. Most newsrooms use the Views module to publish proper feeds.
Problem: Feed contains only the teaser
Cause: The Views display is using the "Teaser" view mode. Fix: In the Views feed display, change Format → Show to "Fields" and add the full body field with "Default" or a custom "Full content" view mode. Or change Show to "Content" and set view mode to "Full content".
Problem: No <content:encoded> element
Cause: Drupal's Views RSS output by default places body in <description>.
Fix: Install the Views RSS module (drupal/views_rss). It exposes fields like content:encoded, dc:creator, media:content you can map onto your Views fields.
Problem: Author is the username (e.g. editor1)
Cause: Drupal writes the author's account name, not their display name.
Fix: Use the Realname module to set human-readable display names, and map the dc:creator Views RSS field to the Realname token rather than [node:author].
Problem: Featured image missing
Cause: Image fields aren't mapped to an RSS-friendly element.
Fix: In Views RSS field settings, map your hero image field to media:content with image type, and to enclosure as a fallback. Use the absolute URL formatter.
Problem: HTML in title
Cause: Title fields are sometimes processed with text filters that leave <em> etc.
Fix: In the Views field settings, strip HTML on output for the title (set output to plain text).
5. Ghost — common problems and fixes
Ghost has a clean, opinionated default feed at /rss/ but a few gotchas.
Problem: Custom theme strips content
Cause: Some themes override the RSS template and emit only excerpts.
Fix: Restore the default RSS by removing default-rss.hbs from your theme, or update it to include {{content}} rather than {{excerpt}}.
Problem: Author shows as the Ghost account email
Cause: Author profile is missing a Name.
Fix: Admin → Staff → edit the author → set Full Name. Ghost writes this into <dc:creator>.
Problem: Featured image not in feed
Cause: Ghost includes the feature image inline in content for the default template, but some custom themes don't.
Fix: Ensure your RSS template uses {{feature_image}} and prepend it to {{content}} inside an <img> tag. Ghost also supports <media:content> if you add it to the template.
Problem: Members-only posts in public feed
Cause: Default Ghost RSS exposes members-only posts to logged-out crawlers as paywalled snippets. Fix: Either keep paywalled posts out of the public feed, or ensure the public excerpt is at least 400 characters of useful preview text. Don't push 1-line teasers — they look broken in aggregators.
Problem: Feed has no categories
Cause: Ghost uses tags, not categories, and only some themes surface them in RSS.
Fix: Confirm your RSS template emits one <category> element per tag:
{{#foreach tags}}<category>{{name}}</category>{{/foreach}}
6. Validation — checks to run before submitting
Run these checks any time you make feed-related changes.
Quick visual scan
Open your feed URL directly in a browser. Check, item by item:
- Titles are plain text (no
<strong>etc.) - Each item has a non-trivial body inside
<content:encoded>or<description>(eyeball ≥400 chars) -
pubDateis a real recent date with a timezone -
dc:creator(or<author>) is a human name - At least one image reference exists (
<enclosure>,<media:content>, or inline<img>) - No items with empty / "0000-00-00" dates
- No items with the same
<link>repeated
Online validators
| Tool | What it checks |
|---|---|
W3C Feed Validator (validator.w3.org/feed/) |
Structural / namespace correctness |
| Atom Specification — RSS Auto-Discovery | Tags, MIME types, and discovery hints |
Feed Validator by Mark Pilgrim (feedvalidator.org) |
Detailed item-level lint, including date format issues |
A valid feed with warnings is usually fine; an invalid feed will likely surface incompletely in Tikker.
Tikker-specific dry run
Before adding to a live channel:
- Configure the feed in a draft / test channel first.
- After Tikker fetches, check the channel's article cards for:
- Image showing on the card?
- Author name on the article detail screen?
- Body length looks substantial?
- Date relative to "today" is reasonable?
- Edit one source post (small text change + republish), confirm Tikker re-fetches within the next polling interval.
Common red flags
- All items have the same publication date — your CMS is emitting the feed-generation timestamp instead of the actual post date.
- Author is the site name — CMS is using site identity instead of post author. Fix the author profile.
<description>and<content:encoded>are both the same short excerpt — enable "full text" output in your CMS.- Images appear briefly then disappear — image URLs include a session token or referer-restricted path. Use stable CDN URLs.
7. When to ask Tikker for help
If you've validated the feed and items still don't appear, or appear with missing fields, share the feed URL and the affected article URL — most parsing issues become obvious from one or two specific items.