
Short answer: Nikola, the static site generator written in Python, creates an RSS feed for your blog during every build, and also builds feeds for tags and categories if you ask for them. Set the public address of your site, the blog title and description, choose how many items the feed contains and whether it carries the full post or a teaser, run the build, and check the generated file. When the address returns valid XML with stable links and dates, give it to an auto-poster so that each new post is shared on your social networks.
Nikola is popular with people who like Python, plain files and a build that does exactly what the configuration file says. Its feeds are generated together with the rest of the site, which means they are fast, cacheable and free of server code. It also means that every mistake is baked into the output until the next build: a wrong site address, a feed that shows only the last ten posts, a teaser that stops in the middle of a sentence. This guide shows what Nikola produces, which settings control it, how to publish new posts reliably and how to test the result before an auto-poster starts to depend on it.
When feed generation is switched on, Nikola writes an RSS file for the main blog at the root of the output folder. In a default project this is output/rss.xml, so a site published at the domain root serves it at /rss.xml. Nikola can also write an Atom file, and it can build separate feeds for each tag, category and author when those archives are enabled. In every case the feed is a normal static file, with no database and no request handler behind it.
If you are still choosing a generator, the same ideas are covered for other tools in the guides to Pelican, Hexo এবং Zola. Nikola is closest to Pelican in spirit, since both are Python tools driven by one configuration file.
All feed behaviour is controlled in conf.py. Names can change between major versions, so compare the lines below with the comments in the file that your own version generated when you created the site.
# conf.py (excerpt)
SITE_URL = "https://example.com/"
BLOG_TITLE = "Example Journal"
BLOG_DESCRIPTION = "News and guides from Example Journal."
BLOG_AUTHOR = "Example Team"
LANGUAGE = "en"
GENERATE_RSS = True
GENERATE_ATOM = False
FEED_LENGTH = 20
FEED_TEASERS = True
FEED_PLAIN = FalseThe site address deserves the most care. Nikola builds every absolute link in the feed from it, so it must be the real public address with https and a trailing slash. If it still holds a placeholder or a local address, every link in the feed will be wrong and nothing will warn you. The title, description and language fill the channel header. The length setting decides how many of the newest posts appear. If you publish several times a day, choose a number large enough that a short outage of the reader or the auto-poster cannot make it miss a post; the reasoning is in how many items should be in your RSS feed.
Nikola can put either a teaser or the whole post into each feed item. A teaser is the part of the article before the teaser marker, which you can place yourself in the source file, or an automatic cut if you do not. Writing the marker by hand gives you a clean break at the end of a sentence, while an automatic cut may stop in the middle of a thought and an auto-poster will copy that fragment into a social post. The plain-text option removes markup from the item, which is useful when readers or tools show the description as raw text.
For auto-posting a teaser is usually enough, because the post on the social network only needs a title, a short description, an image and a link. Full text is friendlier to feed readers but makes a larger file; the trade-offs are explained in full text or excerpt in an RSS feed. Whichever you choose, write a real summary for important posts instead of relying on a cut.
Every item in the feed is built from the metadata at the top of the post file. Set the title, the slug and the date explicitly, and write the date with a time zone so that it does not move when the build runs on another machine.
.. title: Spring Opening Hours
.. slug: spring-opening-hours
.. date: 2026-10-29 08:00:00 UTC
.. tags: news, hours
.. description: Our new opening hours start on Monday.
.. type: textThe slug becomes part of the post address, and the address becomes the identifier that an auto-poster stores. If you rename a slug after publication, the old and the new address look like two different posts and the article may be shared twice. The causes and cures are covered in why a feed auto-posts the same article twice. Dates matter in the same way: a post with a date in the past that suddenly appears in the feed is called a backdated post, and its effects are described in the guide to feed order and backdated posts.
| Feed element | Nikola source | Rule |
|---|---|---|
| Channel title | BLOG_TITLE | Short, plain text |
| Channel link | SITE_URL | Public address with https |
| Item title | title in the post metadata | No markup |
| Item link | Permalink built from the slug | Absolute, returns 200, never changes |
| Publication date | date in the post metadata | In the past, with a time zone |
| Description | Teaser or full post | Ends at a sentence boundary |
Look at that list as a checklist. If one of the sources is vague, for example a date without a zone, fix it in the post and not in the feed, because the feed only repeats what the source says.
A static site changes only when you build and deploy it. Nikola does not publish a post on its own at the moment written in the date field; it treats posts dated in the future as not ready and leaves them out of the feed until a build runs after that moment. That is a feature if you use it deliberately, and a surprise if you do not. To publish on a schedule, set the date, then run the build and the deployment from a scheduler, for example once an hour, so that the feed catches up soon after the date passes.
nikola build
head -c 1200 output/rss.xml
rsync -a output/ user@server:/var/www/example/Drafts are skipped by default, which protects you from sharing unfinished work. Keep that default in production. If a draft or a future post ever reaches the live feed, an auto-poster will share an article that is not yet on your website.
Because Nikola can build a feed for every tag and category, you can send different topics to different channels without writing code. A shop blog with news, recipes and events can feed three social accounts from three feeds. Decide which archives you need, link to their feeds from the pages where people expect them, and switch off the rest if you do not want the extra files. A broader plan for routing is described in category filtering for auto-posting.
Nikola’s default themes add link elements for the feed to the head of every page, so browsers and readers can find it from any address. If you use a custom theme and the links are missing, add them back to the base template, with the type set to the RSS media type and the address built from the site configuration. A person or tool that knows only your home page should be able to locate the feed without asking you; see the guide to feed autodiscovery.
Build the site the way your pipeline does and check the output before you publish anything. Then request the deployed address from outside, because a local file proves nothing about the server.
curl -i https://example.com/rss.xml
curl -sI https://example.com/rss.xml | grep -i content-typeA longer routine is in the feed validation guide, and a short one in debugging a feed with curl.
PostRSS has been publishing RSS and Atom feeds to social networks since 2014. Paste the address of your Nikola 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.
Nikola gives you a working RSS feed with one setting, and a few more make it dependable: the real site address, a length that fits your publishing rhythm, hand-placed teasers, explicit slugs and dates with a time zone, and a build that never includes drafts or future posts. Deploy after every build, test the live address with curl and a validator, keep the permalinks unchanged and connect the feed to an auto-poster. After that, every post you publish reaches your readers and your social channels without extra work.
Yes. A new Nikola site has feed generation switched on, so the build writes an RSS file for the blog into the output folder. Check the generation setting in conf.py if the file is missing.
Change the feed length setting in conf.py and rebuild. Choose a number large enough that a short outage does not make a reader or an auto-poster miss anything.
The site address in conf.py is missing, still a placeholder or a local address. Set it to the real public address with https and a trailing slash, rebuild and deploy.
No. Nikola is a static generator, so a post dated in the future appears only after the first build that runs after that time. Run the build and the deployment on a schedule if you rely on dated posts.
Yes. PostRSS reads any valid RSS or Atom address that is reachable without a login. Paste the address, connect your channels and new posts are shared as soon as they appear.
What changed in the networks, what broke, and how to fix it before it costs you reach.
PostRSS-এর পেছনের টিম Internet Solutions-এর তৈরি। প্রতিটি পণ্য নিজের মতো করে আপনার সময় বাঁচায়।