RSS σε 66 κοινωνικά δίκτυα: Facebook, Instagram, X, LinkedIn, Telegram και άλλα Blog Συνεργατικό Πρόγραμμα Επικοινωνία
Σύνδεση Ξεκινήστε δωρεάν
Updated: 2026-11-02
ExpressionEngine RSS Feed: Build a Feed Template and Share It

Short answer: ExpressionEngine builds feeds from templates. Create a template of the feed type, wrap a channel entries loop in the RSS tags, give each item an absolute link, a stable identifier, a real entry date and a summary field, encode the text for XML, let the template cache keep the load low and check the live address with curl and a validator. Then connect the address to an auto-poster, so that every entry you publish in your channel is shared on your social networks.

ExpressionEngine is a flexible content management system in which editors work with channels, fields and entries, and designers write templates that turn those entries into pages. Because templates can output any text, a feed is simply another template, one that prints XML instead of HTML. That is a strength: you control every detail, and you can build a separate feed for each channel, category or author. It also means that a feed is only as good as its template, and a few small mistakes can make an auto-poster share the wrong things. This guide builds a feed template, explains the fields that matter and ends with a test routine.

Prepare the channel

A feed item needs a title, a permanent address, a date and a summary. In ExpressionEngine each of them comes from the channel entry, so decide which field holds which piece of information before you write the template.

Feed elementSource in the channelRule
Titlethe entry titlePlain text, encoded for XML
Link and identifierthe permalink of the entryAbsolute, https, never changes
Publication datethe entry dateSet when the entry goes live, not the edit date
Descriptiona custom field named summaryOne or two complete sentences
Visibilitythe entry statusOnly open entries appear

Use the entry date and not the edit date. The edit date changes whenever someone corrects a typo, and a feed that used it would move the item to the top and make an auto-poster share the article again. Check that editors do not change the entry date of published articles by accident. The causes and cures of repeated posts are covered in why a feed auto-posts the same article twice.

Create the feed template

Create a template group for feeds, add a template and set its type to the feed type in the template settings, so that the system sends the right content type. Then write the template. The structure below follows the pattern that the documentation describes for the RSS module; tag names and variables can change between major versions, so compare them with the documentation of the version you run.

{exp:rss:feed channel="blog"}
<?xml version="1.0" encoding="{encoding}"?>
<rss version="2.0">
  <channel>
    <title>{exp:xml_encode}{channel_name}{/exp:xml_encode}</title>
    <link>{channel_url}</link>
    <description>{exp:xml_encode}{channel_description}{/exp:xml_encode}</description>
    <lastBuildDate>{gmt_edit_date format="%D, %d %M %Y %H:%i:%s GMT"}</lastBuildDate>
    {exp:channel:entries channel="blog" limit="20" status="open" dynamic="no" orderby="entry_date" sort="desc" cache="yes" refresh="5"}
    <item>
      <title>{exp:xml_encode}{title}{/exp:xml_encode}</title>
      <link>{title_permalink="blog/entry"}</link>
      <guid isPermaLink="true">{title_permalink="blog/entry"}</guid>
      <pubDate>{gmt_entry_date format="%D, %d %M %Y %H:%i:%s GMT"}</pubDate>
      <description>{exp:xml_encode}{summary}{/exp:xml_encode}</description>
    </item>
    {/exp:channel:entries}
  </channel>
</rss>
{/exp:rss:feed}

Several details are deliberate. The entries tag uses a fixed channel and turns off dynamic behaviour, so that the URL of the feed cannot change which entries are shown. Only open entries appear, and entries with a future date stay hidden until their time arrives. The dates are written in GMT with a fixed pattern, which is the format that the RSS specification expects. The encoding helper turns ampersands and angle brackets into safe XML text. The cache parameter keeps the result for a few minutes, so that polling tools do not run a full query each time.

Make the links absolute

The permalink tag builds the address from the site URL in your settings and the template path that you give it. Check the output: it must start with https and the full domain, and it must point to the template that really displays the entry. If your site is reachable under more than one address, such as with and without a prefix, make sure the setting uses the canonical one, because a feed that contains an address that redirects wastes every link. A hostname that changes when you move from staging to production is another trap, so test the feed on the live site and not only on the development copy. The same idea applies to images: if you add an enclosure, its address must be absolute and public.

Control the summary field

Auto-posters build the best social posts from a feed that gives them a short summary. Add a custom field for it in the channel, mark it as required and write a help text that says where the text will appear: in search results and on social networks. Do not use the full body of the entry as the description unless you really want the whole article inside the feed, and be careful with fields that contain template tags or markup, because the markup would be printed as text. If an editor leaves the summary empty, the item would be published with an empty description, so a required field is the cleanest protection. For the choice between a summary and the full text see full text or excerpt in a feed.

Images and enclosures

A picture makes the social post. If your channel has an image field, add an enclosure element to each item with the absolute address of the file, its media type and its size in bytes. Check that the file address is public and that it does not point to a resized copy that is created on the first request, because a tool that asks too early may receive an error. Use a width that suits social networks, about twelve hundred pixels, and keep the file small enough to load quickly. If an entry has no image, leave the element out instead of printing an empty one, which some readers treat as an error. See how to control which image gets auto-posted.

Handle categories and several feeds

Because the feed is a template, you can create more than one. A feed for each channel, for a category or for an author is a small variation of the same code with another parameter. Separate feeds make routing easy: news to the Facebook Page, technical articles to LinkedIn, events to a messaging channel. Routing is explained in category filtering for auto-posting. Give each feed a clear name and a stable address, and list them on one page of your site, so that other people on the team know what exists.

Caching and performance

Each request to the feed runs a database query. ExpressionEngine can cache tags and whole templates, and the example above uses the tag cache with a refresh time in minutes. Choose a short time, a few minutes at most, because a long cache delays every social post. Clear the cache when you publish if your workflow demands an instant update, or accept the short delay. If the site sits behind a content delivery network or a page cache, check that the feed is cached for a similar short time and that the headers allow conditional requests. The mechanism of validators is explained in the guide to ETags and conditional requests, and slow answers can cause the problems described in the guide to feed timeouts.

Several sites and several languages

ExpressionEngine can run more than one site from one installation, and many teams publish in more than one language. Give every site and every language its own feed address and its own channel, because a feed that mixes languages makes an auto-poster share the same story several times in a row. Check that the site name and the site URL inside each template belong to the right site, since a copied template that still points to another site prints the wrong links. Name the templates clearly, for example blog in English and blog in German, so that nobody connects the wrong address to a social account.

Corrections, unpublishing and deletions

Entries change after publication. A corrected title or summary appears in the feed at the next refresh, and it does not cause a second post as long as the permalink stays the same, because auto-posters recognise items by their identifier. If an entry is closed or deleted, the item leaves the feed, but a post that has already been shared on a social network stays there, so remove it by hand if it must go. Avoid changing the URL title of a published entry, since that changes the address and the article looks new. Write these rules down for your editors, so that nobody is surprised by the way the feed behaves.

Make the feed discoverable

People and tools should not have to guess where the feed is. Add a link element with the relation alternate, the RSS media type and the absolute address of the feed to the head of your layout template. A visitor or a tool that only knows your home page can then find the feed on its own. The full explanation is in the guide to feed autodiscovery.

Test the feed

Request the feed from outside your network, because a local test says nothing about the certificate and the caches in front of your server.

curl -i https://example.com/feeds/blog
curl -I https://example.com/feeds/blog
  • The response is 200, the content type is the RSS type and the body starts with an XML declaration.
  • Every link is absolute, uses https and opens the right page.
  • A draft or a closed entry does not appear, and an entry with a future date stays hidden.
  • Paste the address into the W3C Feed Validation Service and fix every error.
  • Publish an entry, wait for the cache to expire and confirm that the new item comes first.

A longer routine is in the feed validation guide, and a shorter one in debugging a feed with curl.

Common mistakes to avoid

  • The edit date as the item date. Every correction moves the article to the top.
  • A wrong template type. Browsers show the XML as a page or the content type is wrong.
  • Unencoded text. One ampersand in a title breaks the whole document.
  • Relative or staging addresses. The links point nowhere for readers.
  • An empty summary. The item is empty or cut in the middle of a sentence.
  • A long cache. New entries appear late and delay every social post.

How PostRSS works with an ExpressionEngine feed

PostRSS has been publishing RSS and Atom feeds to social networks since 2014. Paste the address of your feed, connect your accounts and choose how each post is built from the title, the description or the page title. PostRSS checks the feed as often as every minute and shares each new entry, with its image and link, to the channels you choose among 66 supported networks, messengers, team chats and blogs, including LinkedIn, X, Bluesky, Mastodon and Telegram. Keyword filters, UTM parameters and posting windows let you tune each channel. See the PostRSS features page and the plan limits on the pricing page. More developer guides are under the Technical Guide tag.

Σχετική ανάγνωση

The bottom line

An ExpressionEngine feed is a template, and it has to get the details right: the feed template type, a fixed channel, open entries only, the entry date, a required summary field, encoded text, absolute links and a short cache. Test the live address with curl and a validator, then connect it to an auto-poster. After that, every entry your editors publish reaches your readers and your social channels without extra work.

FAQ

Does ExpressionEngine create RSS feeds?

Yes, through templates. You write a feed template with the RSS tags and a channel entries loop, and the system prints the XML.

Which date should the feed use?

The entry date. The edit date changes with every correction and would push old articles to the top of the feed.

How do I keep drafts out of the feed?

Limit the loop to open entries and keep future entries hidden. Then test the feed with a draft and with an entry that has a future date.

How often should the feed be cached?

For a few minutes at most. A longer cache delays every social post, and a very short one repeats the same query for every poll.

Can PostRSS read a feed from ExpressionEngine?

Yes. PostRSS reads any valid RSS or Atom address that is reachable without a login. Paste the address, connect your channels and new entries are shared as soon as they appear.

New guides, once a month

What changed in the networks, what broke, and how to fix it before it costs you reach.

We send a confirmation e-mail first. Unsubscribe any time.

Περισσότερα εργαλεία από την ομάδα μας

Από την Internet Solutions, την ομάδα πίσω από το PostRSS. Κάθε προϊόν σάς εξοικονομεί χρόνο με τον δικό του τρόπο.

Live chat με AI για ιστότοπους Talkmio Ο ιστότοπός σας απαντά στους επισκέπτες 24/7 με βάση το δικό σας περιεχόμενο, στη γλώσσα τους. Δωρεάν πρόγραμμα · χωρίς κάρτα Βοηθός AI Ask Mio Συνομιλία, κώδικας, σχεδιασμός, γραφή και έρευνα. Το Mio επιλέγει το καλύτερο μοντέλο για κάθε εργασία. Δωρεάν πρόγραμμα Αυτόματος πιλότος AI για blog και social AI Blog Autopilot Η AI γράφει άρθρα SEO 2.000–3.000 λέξεων και κοινοποιεί το καθένα σε 60 κοινωνικά δίκτυα. Τα 3 πρώτα άρθρα δωρεάν Έλεγχος υγείας ιστότοπου Έλεγχος AI ιστοτόπου SEO, ταχύτητα, SSL, ασφάλεια και ρυθμίσεις email σε μία αναφορά, με σειρά προτεραιότητας. Ο πρώτος έλεγχος δωρεάν Σε βάθος ανίχνευση SEO Έλεγχος SEO AI ιστοτόπου Πλήρης ανίχνευση SEO σε 7 τομείς, μαζί με την ορατότητα στην αναζήτηση AI, με διορθώσεις ταξινομημένες κατά αντίκτυπο. Ο πρώτος έλεγχος δωρεάν RSS και ροές προϊόντων Δημιουργός RSS Feed Δημιουργήστε RSS από οποιαδήποτε σελίδα, καθώς και ροές προϊόντων για Google και Meta που ενημερώνονται μόνες τους. Δωρεάν πρόγραμμα Ανάπτυξη ιστότοπων και SEO Internet Solutions Ιστότοποι, ηλεκτρονικά καταστήματα και εξατομικευμένα συστήματα, που σχεδιάζει, κατασκευάζει και υποστηρίζει η ομάδα μας. Από το 2011