Skip to Content

Odoo Builds Your Blog for Many Blogs. Most Sites Have One.

Why my Odoo post URL said /blog/blog-1/, and a free module that removes it on single-blog sites.
TL;DR
  • Odoo is built for websites that run multiple blogs, so it files every post inside its blog's folder: /blog/<blog>/<post>.
  • The folder is your blog's name plus its ID. We named ours "Blog," Odoo gave it ID 1, so every post lived under /blog/blog-1/.
  • With one blog, the folder adds nothing, and /blog answers with a temporary 302 redirect to /blog/blog-1. Same in Odoo 18, 19 and 20.
  • Our free module, for single-blog sites, serves posts at /blog/your-post-30, moves RSS to /blog/feed, cleans up sitemap.xml and 301s every old URL. Code on GitHub.

Enjoying this? Get the next one in your inbox.

I email when I publish something new. Usually 2 to 4 emails a month. Unsubscribe anytime.

Thanks for subscribing!

Join 1000+ readers. Unsubscribe anytime.

Why the folder is there

Odoo lets one website run several blogs, say a company blog and a product updates blog. To keep them apart, each blog gets its own folder in the URL, and every post lives inside it: /blog/<blog>/<post>.

The folder name is your blog's name plus its record ID, which Odoo assigns. We named our blog "Blog," and it was the first one created, so the folder became blog-1. Name it "Insights" and you get insights-1.

Why that hurts a single blog

Most Odoo sites run exactly one blog. For them the folder is overhead: blog-1 sits in every post URL and tells a reader nothing.

/blog is worse. With only one blog to show, Odoo answers /blog with a 302 to /blog/blog-1. A 302 means "moved temporarily," so Google keeps treating /blog as the real page while the content lives somewhere else. Odoo's sitemap listed both, and Search Console flagged the redirecting one as "Page with redirect."

Odoo has noticed part of this. Starting in 19.1, the sitemap skips /blog on single-blog sites. The 302 and the folder are still there in Odoo 20.

Why a redirect rule doesn't fix it

The blog folder is hard-coded in the blog controller, the post URL field, half a dozen templates, the RSS route and the sitemap generator. A redirect in Website settings adds a hop, but every link Odoo renders still points at the old URL. Odoo also rewrites record URLs to their canonical form, so a hand-built /blog/<post> route bounces straight back to /blog/blog-1/.

What we built

A small Odoo 18 module, website_blog_flat_url, LGPL-3:

  • /blog renders in place. 200, no redirect.
  • Posts live at /blog/your-post-29. Tag and page URLs drop the folder too.
  • RSS moves to /blog/feed. The old feed URL 301s there, and the feed keeps its ID, so subscribers keep their subscription and don't get every post again as new.
  • sitemap.xml lists /blog, /blog/feed and every published post at its flat URL. No redirecting URLs, no blog-1.
  • Every old /blog/blog-1/... URL 301s to its new home, so backlinks and indexed pages carry over.
  • Internal links (post lists, "read next," comment sign-in) point straight at the new URLs, with no extra hop.

This site runs it as of today. Check the URL of this page.

One blog or several?

This module is for websites with one blog. If you run several, keep Odoo's default: the folder is how Odoo tells your blogs apart. The module would fold every blog's index into a single /blog page, and /blog/feed only serves the first blog.

Running several blogs? Give each a meaningful name, so the folder reads /blog/news-2 instead of /blog/blog-1.

Install it

Copy the module into your addons path, update the Apps list and install it. It's a module, not an app, so clear the Apps filter when you search. Then delete the cached sitemap so Odoo rebuilds it, and resubmit it in Search Console. Odoo Online doesn't allow custom modules, so you need Odoo.sh or on-premise.

Code and full docs: github.com/19prince/Odoo-Blog-Flat-URLs. More free modules in the Lab.

Enjoying this? Get the next one in your inbox.

I email when I publish something new. Usually 2 to 4 emails a month. Unsubscribe anytime.

Thanks for subscribing!

Join 1000+ readers. Unsubscribe anytime.