Flectic
/Learn · Odoo SEOOdoo

Odoo Website SEO: making an Odoo-built site actually rank

Odoo website SEO is strong on the technical defaults and weak on the editorial and eCommerce edges. Out of the box, Odoo generates a /sitemap.xml every 12 hours, ships /robots.txt, converts uploads to WebP, creates 301 redirects when URLs change, emits schema.org microdata for products, and adds hreflang on multilingual pages. What kills rankings is almost never the platform — it is empty title tags, faceted shop URLs burning crawl budget, indexed portal pages, thin product copy, and third-party scripts that wreck Core Web Vitals. This guide covers what Odoo automates, what you must configure, and the ranking blockers implementers still hit in 2026.

14 min readUpdated Aug 3, 202615 sources cited

TL;DR — Key takeaways

  • Odoo's Website app treats SEO as a first-class concern rather than an afterthought, and a meaningful share of the technical work is done for you.
  • Every theme Odoo ships is built on the Bootstrap CSS framework, and Odoo's SEO documentation calls this out explicitly because responsiveness is a confirmed ranking factor on mobile-first indexes.
  • Per-page SEO is edited in the Optimize SEO tool, reached from Website > Site > Optimize SEO on any page (many partner guides also call out the Promote tab in the website editor for the same fields).
  • Odoo's URL handling is one of its quiet SEO strengths for static content.
01

What Odoo handles for SEO out of the box

Odoo's Website app treats SEO as a first-class concern rather than an afterthought, and a meaningful share of the technical work is done for you. According to Odoo's official SEO documentation (19.0), the platform optimizes page content, social sharing, URLs, images, and page speed, and every shipped theme is built on the Bootstrap CSS framework so layouts stay responsive across desktop, tablet, and mobile — which the docs note directly supports SEO.

Concretely, six things happen without configuration. First, Odoo generates a /sitemap.xml that lists every indexable URL, caches it, and refreshes it every 12 hours; for large catalogs it automatically splits the file into a sitemap index that respects the sitemaps.org protocol at 45,000 URLs per chunk. Second, it creates a /robots.txt on every database. Third, it compresses uploaded images and converts them to WebP. Fourth, when you rename a product or blog post, Odoo updates the page's URL and leaves a 301 redirect on the old one so link equity is preserved. Fifth, it emits schema.org microdata for products, events, forum posts, and contact addresses. Sixth, multilingual sites get automatic hreflang and x-default tags.

The gap is editorial and eCommerce-hygiene, not the missing plugin list. Odoo cannot decide your keyword strategy, draft a unique descriptive title tag for each page, enforce a single H1, write alt text, stop filter-parameter URLs from being crawled, or noindex the customer portal. Community and partner guides published through 2026 still flag the same failure modes: duplicate dynamic URLs from layered navigation, product slugs that keep database IDs, canonical conflicts on multi-category products, and zero organic impressions on sites that never filled Optimize SEO. The rest of this guide walks each layer and flags exactly where defaults need a human hand.

02

Themes, Bootstrap, and responsive layout

Every theme Odoo ships is built on the Bootstrap CSS framework, and Odoo's SEO documentation calls this out explicitly because responsiveness is a confirmed ranking factor on mobile-first indexes. Responsive layouts mean the same HTML serves desktop, tablet, and mobile without a separate mobile URL, which avoids the canonical and duplicate-content headaches that m-dot sites create.

There is one important caveat the same documentation raises: third-party themes may not compress images efficiently. Odoo's built-in WebP conversion and image compression are tuned for its own themes, and a community or marketplace theme that bypasses Odoo's image pipeline — or ships heavy, unoptimized assets and CSS — can quietly undo the page-speed work the platform does by default. If you are evaluating a non-official theme, run the homepage and a representative product or blog page through PageSpeed Insights and compare against an official theme before committing.

For most teams the practical takeaway is to start from an official theme, customize colors and blocks through the editor, and only reach for a third-party theme when the official set genuinely cannot achieve the design. Brand consistency — the three main colors plus light and dark accents the theme system exposes — does not require custom CSS, and staying on the official pipeline keeps image compression and responsive behavior intact. If you are still scoping the build itself, the companion guide to the <a href='/learn/website-builder'>Odoo website builder</a> covers themes, blocks, and page structure in depth; this guide stays focused on the ranking layer.

03

Title tags, meta descriptions, and the keywords that actually matter

Per-page SEO is edited in the Optimize SEO tool, reached from Website > Site > Optimize SEO on any page (many partner guides also call out the Promote tab in the website editor for the same fields). The pop-up exposes the title tag, the meta description, a search-results Preview card that shows how both will render, a Broken Link field to clean up dead URLs, and a Fill with AI button that drafts a title, description, and keyword suggestions. This is where the editorial work lives, and it is the single highest-leverage place to spend time on an Odoo site. Odoo partners highlighting Odoo 19 SEO features consistently push the same point: the AI assist reduces blank-page work, but it does not replace a keyword plan or unique product copy.

Odoo's documentation is unusually precise about a distinction most platforms gloss over: there are two types of keywords, and only one affects ranking. In-text keywords appear in visible content — titles, headings, and body copy — and these are what search engines use to judge relevance; they cannot be edited in the Optimize SEO pop-up because they are simply your page's content. Meta keywords, by contrast, sit in a hidden <meta name="keywords"> tag that the docs state plainly is now ignored by major search engines and has little or no SEO impact. The lesson is to invest in visible, descriptive copy rather than keyword stuffing hidden fields.

Two editorial rules the documentation emphasizes are worth treating as hard requirements. First, use only one H1 per page — Odoo recommends this directly, and multiple H1s dilute topical signaling. Second, write a unique, concise title tag for every page rather than leaving it empty (which falls back to a default derived from page content). Empty titles and duplicate descriptions across product or blog templates are the most common reason an otherwise well-built Odoo site underperforms in search: the technical scaffolding is correct, but the snippet Google shows is generic. For eCommerce, also write original product and category copy — manufacturer paste-ups create sitewide duplicate content that no sitemap can fix. Category pages need a short introductory block above the product grid so they can rank for broader head terms, not only long-tail SKUs.

Social sharing is part of the same panel. Odoo defaults the share image to the website logo; set a page-level social image or a default under Website > Configuration > Settings > Tracking & SEO > Default Social Share Image so Open Graph previews do not look like a bare logo when product or guide links are shared.

04

Clean URLs and the 301 redirect system

Odoo's URL handling is one of its quiet SEO strengths for static content. Page and content URLs are derived from the title or product name and are human-readable by default, and the platform actively protects link equity when URLs change. The SEO documentation confirms that changing the title of a blog post or the name of a product automatically updates the link to the related webpage — and the old link still functions because a 301 redirect is created automatically, maintaining the SEO.

For static pages where you change the URL deliberately, Odoo exposes an explicit redirect control in page properties (Website > Site > Properties). Editing the Page URL field offers a Redirect Old URL toggle with a Type selector of 301 Moved permanently or 302 Moved temporarily, so you decide whether the redirect is permanent (passing link equity) or temporary. Use 301 for any real move — renamed slugs, restructured navigation, a migrated catalog — and reserve 302 for genuinely transient cases like a seasonal landing swap. After bulk slug cleanup, audit Website > Configuration > URL Redirects and collapse chains so every legacy URL points to the final destination in one hop — multi-hop 301 chains waste crawl budget and dilute signals.

eCommerce is where Odoo URL defaults need more discipline. Product and category paths often keep database IDs in the slug (for example /shop/product/ergonomic-desk-42), and attribute or filter combinations can produce parameter-heavy URLs that look like different pages to crawlers. Practitioners and Odoo forum threads have long flagged DUST-style issues: sort/filter parameters, multi-category product paths, and attribute values that change the URL while the content stays the same. Odoo itself does not always enforce a single strict canonical on every category or faceted combination — so you must treat layered navigation as a crawl-budget problem, not a feature. Prefer clean, stable product and category slugs (edit via Optimize SEO / page properties), map one primary URL per product, and block or noindex filter/sort parameter patterns that generate thin duplicates. Marketplace URL-rewrite modules exist for bulk cleanup, but the first win is configuration discipline: stop indexing combinatorial facet URLs before you install another app.

This redirect machinery is what makes migrating an existing site onto Odoo safe. Odoo's documentation advises that, in most cases, migrating to Odoo will not negatively impact SEO provided you keep the existing content, implement redirects from old URLs to their new counterparts, and monitor traffic and indexation with Google Search Console — noting it is normal to see a short traffic dip in the first days while search engines reindex. Odoo's own product communications emphasize the same migration rule: redirect old URLs to keep ranking intact. The playbook is map every old URL to its new Odoo equivalent before you switch the domain, add the redirects, and verify nothing 404s once DNS resolves.

How Odoo handles common URL-change scenarios and what you should do.
ScenarioWhat Odoo doesWhat you should do
Rename a product or blog postAuto-updates the URL and leaves a 301 on the old oneNothing for the rename — still review the final slug for keywords and length
Edit a static page's URLOffers Redirect Old URL with 301/302 in page propertiesEnable Redirect Old URL and pick 301 for permanent moves
Product/category slug still has a numeric IDDefault path often includes the record IDEdit the public URL to a clean keyword slug; keep one 301 from the old path
Shop filters, sort, or attributes create new URLsDynamic parameters can be crawlableDisallow or noindex thin facet combinations; canonicalize to the clean category/product URL
Bulk slug cleanup created redirect chainsEach change may leave another 301 hopFlatten redirects so every legacy URL maps directly to the final URL
Migrate an old site onto OdooCreates Odoo URLs; old external links now 404Add 301 redirects from every legacy URL before switching DNS
Delete a page you no longer wantURL returns 404Point it to the nearest relevant page with a 301, or let it 404 to drop it from the index
05

Sitemap.xml and robots.txt: generated, cached, editable

Odoo generates a /sitemap.xml automatically that points out website pages and their relation to each other to search engine crawlers, including all URLs. For performance the file is cached and updated every 12 hours, and if the site has a lot of pages Odoo creates a sitemap index file that respects the sitemaps.org protocol, grouping URLs in 45,000 chunks per file. Each sitemap entry carries three automatically computed attributes: <loc> (the URL), <lastmod> (the last modification date derived from the related object, such as the product's last edit), and <priority> (modules implement their own algorithm — a forum weighs votes, a static page uses a priority field with a default of 16). To keep a page out of the sitemap, toggle Indexed off in page properties for static pages.

A robots.txt is created just as automatically and is available at mydatabase.odoo.com/robots.txt. Its job is to tell crawlers which parts of the site they may access — both to prevent server overload and to control access to resources and detailed descriptions like media files, stylesheets, and scripts. You can add custom instructions from Website > Configuration > Settings, scrolling to the SEO section and clicking Edit robots.txt. Typical production additions for Odoo eCommerce include Disallow patterns for internal search, checkout, cart, and known thin facet parameter patterns — always validate that you are not blocking CSS/JS Google needs for rendering.

The critical subtlety the documentation warns about is that robots.txt controls crawling, not indexing. A page blocked in robots.txt can still appear in search results if it is linked from other crawled pages — Google may index it by reference without ever reading its content, showing a bare URL with no snippet. To actually remove a page from the index, use the noindex control (covered next) rather than robots.txt alone. Treat robots.txt as a crawl-budget tool for large shops, and use noindex for any page you want fully excluded from results. After major catalog or multi-website changes, open /sitemap.xml and /robots.txt on the live domain (not only the *.odoo.com host) and confirm they list the public URLs you intend.

06

Controlling indexation: noindex, removal, and test sites

Odoo gives you three layers of control over what gets indexed, and using the right one matters. At the page level, each static page has an Indexed switch in its properties (Website > Site > Properties) — toggle it off and Odoo emits a noindex directive so the page drops out of search results. Note the documentation's limitation: this option is not yet available for dynamic pages like /shop or /blog, which are generated automatically from database data and managed differently.

For dynamic pages or anything the noindex toggle cannot reach, the documentation offers two further methods. Return a 404 (Not Found) by configuring a 404 redirection, or return a 403 (Forbidden) by toggling the page's Visibility off or unpublishing it — both signal search engines that the page does not exist or is inaccessible, leading to its eventual removal from the index. For faster removal specifically from Google, use Google Search Console to request removal of specific URLs.

Portal, account, and utility paths deserve special attention because they rarely belong in organic results. Customer portal routes (/my, order history, invoices, tickets), cart and checkout, thank-you pages, internal search result URLs, and password-gated pages should not compete with product and content pages for crawl budget. Where the Indexed toggle cannot reach them, combine robots.txt Disallow with template-level noindex or Visibility restrictions, then verify in Search Console Coverage that they are not accumulating as indexed, not-submitted, or soft-404 noise. Blog listing pagination should keep a clear self-referencing canonical on page 1; paginated archives with thin unique text are poor candidates for aggressive indexation compared with individual posts.

The whole-site control is essential for staging and it is easy to miss. To prevent an entire database from appearing in search results, go to Configuration > Settings and add a random value in the Domain field — this automatically inserts <meta name="robots" content="noindex"/> into the page source. Odoo notes this is ideal for test databases and that it can take several days or weeks for search engines to honor it. The first thing to verify on any new Odoo database is whether this noindex flag is set: a staging site left indexable, or a production site accidentally noindexed, are the two most damaging SEO mistakes on the platform.

Choosing the right indexation control in Odoo.
GoalControlWhere in Odoo
Remove one static page from resultsnoindexWebsite > Site > Properties > Indexed (off)
Remove a dynamic page (/shop, /blog)404 or 403Configure a 404 redirect, or unpublish / set Visibility off
Keep portal, cart, checkout out of the indexrobots + noindex / VisibilityEdit robots.txt; restrict Visibility; verify in Search Console
Stop thin facet/filter shop URLsrobots Disallow and/or noindexSEO settings robots editor + template/custom rules for parameters
Remove a URL fast from Google onlyRemoval requestGoogle Search Console > Removals
Hide a whole staging databaseSite-wide noindexConfiguration > Settings > Domain (random value)
Exclude a path from crawling onlyrobots.txt DisallowWebsite > Configuration > Settings > SEO > Edit robots.txt
07

Connecting Google Search Console

Google Search Console is the free service that lets you monitor how Google sees your site, and Odoo's documentation recommends verifying ownership as part of standard setup. Verification offers five methods — HTML file upload, DNS record, HTML tag, Google Analytics tracking code, and Google Tag Manager container snippet — and Odoo supports all of them through its settings.

The two most common paths on Odoo are the HTML file upload and the HTML tag. For the file upload method, you download Google's verification file, copy the verification code (for example, google123abc.html), then in Odoo go to Website > Configuration > Settings and enable Google Search Console in the SEO section and paste the code into the dedicated field. For the HTML tag method, you copy the meta tag Google provides, then in Odoo click Edit, open the Theme tab, scroll to the Advanced section, and click <head> next to Code Injection to paste the tag — the same Code Injection panel is where you add structured-data or analytics snippets site-wide.

Once verified, Search Console does the work Odoo cannot: it shows which queries bring impressions, where you rank, which pages Google has indexed, and any coverage or mobile-usability errors. A domain property (verified via DNS) gives the most complete view across subdomains and http/https, while a URL prefix property is simpler and makes sense when you want to isolate a section of the site. Pair the sitemap Odoo auto-generates with a verified Search Console property and you have the full feedback loop: Odoo emits the signals, Google reports the results. Watch specifically for explosion of /shop URLs with query parameters, unexpected portal indexing, and pages excluded by noindex that you intended to rank — those three patterns catch most Odoo ranking failures early.

08

Structured data: schema.org microdata — and the JSON-LD gap

Structured data is how a site earns rich snippets — the price, rating, review count, or event details Google can show inline in results. Odoo's documentation confirms it implements structured data as microdata, defined in the schema.org specification, for events, eCommerce products, forum posts, and contact addresses. On a product page this is what lets Google display extra information like the price and rating of a product directly in the listing.

The detail that catches teams is the format: Odoo emits microdata (inline HTML attributes like itemscope, itemtype, and itemprop), not JSON-LD (the <script type="application/ld+json"> blocks many modern SEO audits look for first). Google's own structured-data documentation still accepts JSON-LD, microdata, and RDFa equally when markup is valid — Google recommends JSON-LD mainly because it is easier to maintain, not because microdata is invalid. So default Odoo product markup can still power rich results; if an audit lights up red for "no JSON-LD," confirm what Odoo is actually emitting before assuming a problem: check the rendered HTML for itemtype attributes rather than only scanning for script tags. Validate with Google's Rich Results Test after theme or module changes.

Where the gap is real is coverage and completeness. Out of the box, Odoo ships product, event, forum-post, and address markup tied to the apps that produce that content. Fields Google often expects for product rich results — brand, SKU/gtin, complete Offer availability, aggregateRating when you actually collect reviews — may be thin if your catalog data is incomplete. Page types Odoo does not explicitly cover — Organization, Article for blog posts, FAQPage, BreadcrumbList — may need a custom QWeb inherit or a snippet injected via the Code Injection panel in the theme's Advanced settings. For most storefronts, complete product records plus native microdata are the priority; for content-heavy sites, add Organization sitewide and Article on blog templates. Treat FAQ markup as optional insurance on pages that already show visible Q&A — visible answers matter more than schema alone, and Google has narrowed which FAQ rich results appear over time.

Implementation pattern that stays maintainable: keep Odoo's native product microdata, fill brand/SKU/price/availability in the product form so emitted markup is truthful, then layer JSON-LD only where microdata is missing (Organization, Breadcrumbs, Article). Never emit conflicting prices or availability between HTML, microdata, and JSON-LD — conflicting offers are a common reason rich results drop after a customization.

09

Images, WebP, and Core Web Vitals

Image size has a significant impact on page speed, which the Odoo documentation identifies as an essential criterion for search ranking. Odoo's response is automatic: it compresses uploaded images and converts them to WebP, and because WebP files are smaller the page loads faster and ranks better. All images used in Odoo's official themes are also compressed by default, and the format of any image on a page can be adjusted in the editor's Customize tab under the Image section.

The conversion is not optional and that is by design. The automatic WebP conversion was introduced in Odoo 18.0 and is present in 19.0, and Odoo's own community support confirms there is no setting to disable it — changing the behavior requires code customization. The rationale, as Odoo's support notes, is that SEO is significantly impacted by image size, so any decision to keep uncompressed originals should weigh the LCP and INP metrics it will cost. If you must offer uncompressed assets for download (for example, high-res product photography), the supported path is to attach them as Product Documents rather than fighting the image pipeline.

Core Web Vitals on Odoo are mostly a function of what you upload, which theme you use, and which third-party scripts you inject. Compress and resize source images before upload (do not rely on the server alone for multi-megabyte heroes), write specific alt text in each image's Description field, and prefer official themes that stay on the compression pipeline. Avoid stacking chat widgets, heatmaps, tag managers, and calendar embeds on every page load — load booking or chat tools on intent (for example, after a click on a Book a demo CTA) rather than globally. Marketplace themes with heavy carousels, autoplay video, and unoptimized fonts routinely lose to a lean official theme on LCP and CLS even when content is identical. Measure homepage, a category, a product, and a blog post with PageSpeed Insights or Pingdom — both of which Odoo's documentation recommends by name — and fix the largest image and layout-shift offenders first. For storefronts where speed directly affects conversion, the work compounds with broader <a href='/industries/retail-ecommerce'>retail and eCommerce</a> performance strategy.

10

Multilingual SEO: hreflang and multiple websites

If your site serves more than one language, Odoo handles the cross-language signaling for you. The platform automatically includes hreflang and x-default tags in the code of multilingual pages, which tells Google which language and regional version of a page to show to which audience and prevents the different-language versions from competing as duplicates. This is the single most important technical requirement for international SEO, and it is generated without configuration.

The editorial discipline is what you supply on top: each language version needs its own translated content, title tag, and meta description rather than machine-transposed copy, because hreflang tells Google the versions are equivalent but the ranking strength of each version still depends on the quality of its content. Odoo's translation tools let you translate page content and the website strings directly, and the multiple-websites configuration (one Odoo database can serve several sites on different domains or subdomains) gives you the option to separate brands or locales entirely while sharing one backend.

Three cautions round this out for 2026. First, only emit hreflang for language versions you truly publish and maintain — incomplete translations that share near-identical English bodies create noisy clusters rather than clean alternates. Second, keep locale query variants and staging translations out of the index — use noindex controls rather than hoping hreflang alone will suppress them; UX-only locale toggles that do not change the path should not create indexable duplicates. Third, when you run multiple websites from one database, confirm each site's sitemap and robots.txt reflect only that site's URLs; Odoo generates these per website, but a misconfigured multi-website setup is a common source of cross-contamination between domains. Done correctly, automatic hreflang plus per-site sitemaps gives a clean international footprint; done carelessly, it multiplies thin pages across languages.

11

Common Odoo ranking blockers (and how to clear them)

When an Odoo site "does not rank," the cause is rarely a missing SEO plugin. Audits and partner write-ups through 2026 converge on a short list of blockers that produce zero impressions or sudden traffic drops. Use this as a triage checklist before rewriting content.

Technical and crawl blockers: staging left indexable (or production still noindexed via a leftover Domain hack); sitemap never submitted; robots.txt accidentally Disallowing /shop or theme assets; faceted and sorted shop URLs indexed by the thousands; portal and cart URLs consuming crawl budget; redirect chains after repeated slug edits; multi-website sitemaps leaking URLs across domains. Fix these first — content quality cannot compensate for crawl waste.

Editorial and eCommerce blockers: empty or identical title tags across product templates; manufacturer-copied product descriptions; category pages that are pure grids with no intro copy; multiple H1s from stacked website blocks; images without alt text; product schema missing price, currency, or availability because catalog fields are blank. Odoo 19's Fill with AI and SEO assistant help draft titles and descriptions, but they do not invent differentiated product value or a category strategy.

Performance blockers: multi-megabyte hero images uploaded "for quality"; third-party themes that bypass the WebP pipeline; chat, analytics, and calendly-style widgets loading on every page; autoplay media above the fold. Treat booking and support tools as intent-loaded islands. If LCP is poor only on product templates, inspect variant galleries and lazy-loading before buying a CDN module — hosting and theme weight usually dominate.

Proof loop: after each fix, request indexing for a sample URL in Search Console, wait for crawl, and compare Coverage + Performance. Rankings recover from technical cleanups in days to weeks; content improvements take longer. Do not judge Odoo's SEO defaults from a site that still has staging noindex patterns, facet spam, or blank meta fields.

Fast triage for "Odoo site not ranking" reports.
SymptomLikely Odoo-specific causeFirst fix
Zero impressions after launchSite-wide noindex still on, or GSC never verifiedCheck Domain/noindex, verify GSC, submit sitemap
Thousands of shop URLs in CoverageFilter/sort/attribute parameters indexedrobots/noindex facets; one clean URL per product/category
Products indexed, no rich resultsBlank price/availability or broken custom schemaComplete product fields; validate microdata/JSON-LD
Traffic drop after redesignMissing 301 map from old CMS URLsRebuild legacy→Odoo redirect table; fix chains
Good content, weak mobile scoresTheme bloat or global third-party scriptsOfficial theme baseline; defer non-critical JS
Portal pages rankingCustomer /my and account paths indexableDisallow + noindex portal; tighten Visibility
12

An Odoo SEO launch and migration checklist

Bringing the layers together, a defensible Odoo SEO pass before launch or migration has a fixed set of checks. Confirm the production database is indexable and any staging database has the random Domain value set so it emits the site-wide noindex tag — verify this first, because it is the mistake with the largest blast radius. Ensure the custom domain is mapped and SSL is active (Odoo issues a Let's Encrypt certificate per mapped domain), then verify ownership in Google Search Console using the HTML file or HTML tag method and submit /sitemap.xml.

On content, write a unique title tag and meta description for every money page through Optimize SEO, enforce a single H1 per page, add descriptive alt text to every meaningful image, and set a default social share image. Map every legacy URL to its new Odoo equivalent and add 301 redirects before switching DNS; after go-live, sample GSC Coverage for 404s and unexpected parameter URLs. Review robots.txt so cart, checkout, portal, and thin facet patterns are controlled without blocking required assets. For eCommerce, complete product brand/SKU/price/availability data so native product microdata is truthful, decide whether Organization, Article, or BreadcrumbList need Code Injection or QWeb JSON-LD, and confirm product pages do not share manufacturer paste-up descriptions across the catalog.

Finally, measure and iterate. Run the homepage and a representative product and blog page through PageSpeed Insights, strip global third-party scripts that are not critical, fix the largest image and layout-shift offenders (LCP and CLS), and use Search Console's Performance and Coverage reports to watch impressions, average position, and indexing errors over the weeks after launch. SEO on Odoo rewards the same discipline as any platform — correct technical scaffolding, strong per-page editorial, and a measurement loop — and the platform's defaults give you a genuinely strong starting point. If you want that scaffolding stood up and tuned by a team that implements Odoo end to end, our <a href='/solutions/odoo'>Odoo implementation services</a> cover the SEO configuration as part of the rollout.

FAQ

Frequently asked questions

Is Odoo good for SEO?

Yes, for technical SEO. Odoo automatically generates a /sitemap.xml (cached and refreshed every 12 hours, split into 45,000-URL chunks per the sitemaps.org protocol), ships a /robots.txt, converts images to WebP, creates 301 redirects when URLs change, emits schema.org microdata for products, events, forum posts, and addresses, and adds hreflang on multilingual pages. What it does not do is editorial and eCommerce hygiene — keyword strategy, unique title tags, single-H1 discipline, alt text, facet URL control, and portal noindex are inputs you must provide.

Does Odoo generate a sitemap.xml and robots.txt automatically?

Yes. Odoo generates /sitemap.xml including all URLs, caches it, and updates it every 12 hours; for large sites it creates a sitemap index respecting the sitemaps.org protocol with 45,000 URLs per chunk. It also creates /robots.txt automatically at mydatabase.odoo.com/robots.txt, which you can customize from Website > Configuration > Settings > SEO > Edit robots.txt. Remember robots.txt controls crawling, not indexing — use noindex to remove pages from results.

Does Odoo use JSON-LD or microdata for structured data?

Microdata by default. Odoo implements structured data as schema.org microdata (inline itemscope/itemtype/itemprop) for events, eCommerce products, forum posts, and contact addresses — not JSON-LD script blocks. Google accepts both formats when markup is valid and recommends JSON-LD mainly for maintainability. Some audit tools flag 'no JSON-LD' even when valid microdata is present. Add custom JSON-LD via Code Injection or QWeb for Organization, Article, BreadcrumbList, or FAQPage when you need coverage Odoo does not ship.

What happens to SEO when I change a page or product URL in Odoo?

Odoo preserves it for renames. Changing the title of a blog post or the name of a product automatically updates the page's URL and leaves a 301 redirect on the old URL so link equity is maintained. For static pages where you edit the URL directly, page properties offer a Redirect Old URL toggle with a Type of 301 (permanent) or 302 (temporary). After bulk slug edits, flatten redirect chains. When migrating an existing site onto Odoo, add 301 redirects from every legacy URL before switching DNS.

How do I stop a page or a whole test site from being indexed in Odoo?

For a static page, toggle Indexed off in page properties (Website > Site > Properties) to emit a noindex tag — note this is not yet available for dynamic pages like /shop or /blog. For dynamic pages, return a 404 (via a 404 redirect) or a 403 (unpublish or set Visibility off), or request removal in Google Search Console. To hide an entire database (e.g. staging), add a random value in Configuration > Settings > Domain, which inserts <meta name="robots" content="noindex"/> site-wide.

Does Odoo convert images to WebP, and can I turn it off?

Yes — Odoo automatically compresses and converts uploaded images to WebP, a behavior introduced in Odoo 18.0 and present in 19.0, to improve page speed and SEO ranking. There is no setting to disable it; turning it off requires code customization, and Odoo's support notes you should weigh the LCP and INP cost before doing so. To offer uncompressed assets for download, attach them as Product Documents rather than overriding the image pipeline.

How do I verify my Odoo site in Google Search Console?

Use the HTML file upload or HTML tag method. For file upload, download Google's verification file, copy the code (e.g. google123abc.html), then in Odoo go to Website > Configuration > Settings and enable Google Search Console in the SEO section and paste the code. For the HTML tag method, copy Google's meta tag and paste it into the <head> field under the Theme tab > Advanced > Code Injection, then click Verify in Search Console. Prefer a domain property via DNS when you control the domain.

Does Odoo support hreflang for multilingual SEO?

Yes. Odoo automatically includes hreflang and x-default tags in the code of multilingual pages, signaling to Google which language or regional version to serve and preventing duplicate-content competition between versions. You still need properly translated title tags, descriptions, and content for each language. Only publish languages you maintain, and use noindex to keep staging translations or locale query variants out of the index.

Why is my Odoo eCommerce shop not ranking?

Most often: empty or duplicated product titles and meta descriptions, manufacturer-copied descriptions, faceted filter URLs consuming crawl budget, product paths still full of database IDs without a clean primary URL, portal or cart pages indexed, staging noindex left on, or a redesign that dropped legacy 301s. Confirm GSC verification and sitemap submission, clean facet indexation, complete product fields for native schema, and write unique category intros and product copy before blaming the platform.

How should I handle Odoo shop filter and attribute URLs?

Treat layered navigation as a crawl-budget problem. Prefer one stable public URL per product and category; edit slugs to remove unnecessary IDs when practical; and use robots.txt Disallow and/or noindex patterns for sort, attribute, and filter combinations that create thin duplicates. Do not rely on Odoo always emitting a perfect canonical for every faceted combination — practitioners and forum reports have long flagged parameter and multi-category duplicates. Validate in Search Console Coverage after changes.

Should Odoo portal and account pages be indexed?

No. Customer portal routes such as /my, order history, invoices, and tickets rarely deserve organic visibility and waste crawl budget. Combine robots.txt Disallow with noindex or Visibility restrictions where possible, keep cart and checkout out of the index, and confirm in Search Console that portal URLs are not accumulating as indexed pages.

Does Odoo emit Open Graph tags for social sharing?

Odoo supports social sharing configuration: each page can set a social share image (defaulting to the website logo), and Website > Configuration > Settings can enable a Default Social Share Image under Tracking & SEO. Review the Social Preview card in Optimize SEO so shared product and content links show the correct image and description rather than a bare logo.

Sources & methodology

15 cited

Every pricing figure and statistic on this page is traced to a primary or vendor source with a verification date. Where partner pages are cited, their platform bias is disclosed in-line.

  1. 01
    Odoo's SEO documentation states it optimizes content, social sharing, URLs, images, and page speed; all provided themes are built on Bootstrap to ensure responsive layouts, which supports SEO; Optimize SEO edits title/description with a Preview card; changing a blog post title or product name auto-updates the URL and leaves a 301 redirect; Fill with AI drafts meta title/description and keyword suggestions.odoo.com · verified Verified by fetching the official Odoo 19.0 SEO documentation page — Bootstrap/responsive, Optimize SEO, Fill with AI, and 301-redirect statements present.
  2. 02
    In-text keywords appear in visible content and affect ranking (not editable in the popup); meta tags (title/description) are editable in the popup; the hidden <meta name='keywords'> tag is ignored by major search engines; only one H1 per page is recommended; Odoo auto-compresses images and converts them to WebP and all official theme images are compressed by default; alt tags (Description field) are essential; third-party themes may not compress images efficiently; social share image defaults to logo with optional Default Social Share Image setting.odoo.com · verified Verified by fetching the official Odoo 19.0 SEO documentation page — keywords/meta/WebP/alt-text/social-share sections present.
  3. 03
    Odoo generates /sitemap.xml including all URLs, cached and updated every 12 hours; for large sites it creates a sitemap index respecting the sitemaps.org protocol with 45,000 URLs per chunk; entries have auto-computed loc/lastmod/priority (static page priority default 16); robots.txt is auto-created and editable from Website > Configuration > Settings > SEO > Edit robots.txt; robots.txt blocks crawling but not indexing; Indexed toggle keeps pages out of the sitemap.odoo.com · verified Verified by fetching the official Odoo 19.0 SEO documentation page — Sitemap and robots.txt sections present.
  4. 04
    Odoo implements structured data as schema.org microdata (not JSON-LD) for events, eCommerce products, forum posts, and contact addresses, enabling rich snippets such as product price and rating; Odoo automatically includes hreflang and x-default tags for multilingual pages.odoo.com · verified Verified by fetching the official Odoo 19.0 SEO documentation page — Structured data markup and Hreflang sections present.
  5. 05
    To prevent a page from being indexed: toggle Indexed off in page properties (noindex; not available for dynamic pages), return a 404 via a configured 404 redirection, return a 403 by toggling Visibility off or unpublishing, or request removal in Google Search Console. To prevent a whole website/database from being indexed, add a random value in Configuration > Settings > Domain, which inserts <meta name='robots' content='noindex'/> site-wide (used for test databases).odoo.com · verified Verified by fetching the official Odoo 19.0 SEO documentation page — Prevent a page/website from being indexed sections present.
  6. 06
    Page properties (Website > Site > Properties) expose Page Title, Page URL (with a Redirect Old URL toggle and Type of 301 Moved permanently or 302 Moved temporarily), Indexed (disable to remove from results), Visibility (Public/Signed In/Restricted Group/With Password), Publishing Date, and Is Homepage.odoo.com · verified Verified by fetching the official Odoo 19.0 Pages documentation page — Page properties and URL redirection sections.
  7. 07
    Google Search Console verification offers five methods (HTML file upload, DNS record, HTML tag, Google Analytics tracking code, Google Tag Manager); HTML file upload pastes the verification code into Website > Configuration > Settings > SEO > Google Search Console; the HTML tag method pastes the meta tag into the <head> field under Theme > Advanced > Code Injection.odoo.com · verified Verified by fetching the official Odoo 19.0 Google Search Console documentation page — verification methods and Odoo steps.
  8. 08
    Automatic image-to-WebP conversion was introduced in Odoo 18.0; there is no setting to disable it and changing the behavior requires code customization; Odoo's support notes SEO is significantly impacted by image size and any change should weigh the LCP and INP metrics.odoo.com · verified Verified by fetching the official Odoo forum thread — confirms v18 origin, no off-switch, and the LCP/INP cost-benefit note from Odoo support.
  9. 09
    Google Search supports structured data in JSON-LD, microdata, and RDFa formats equally when markup is valid and properly implemented; Google generally recommends JSON-LD as easiest to maintain, not as the only valid format.developers.google.com · verified Verified by fetching Google's Introduction to structured data documentation — formats table and recommendation language.
  10. 10
    Odoo eCommerce SEO guidance emphasizes unique product descriptions (avoid manufacturer paste-ups), category intro content above product grids, editable SEO-friendly URLs, native product structured data validation after template customizations, automatic XML sitemaps submitted via Search Console, and robots.txt configuration as part of technical hygiene.browseinfo.com · verified Fetched BrowseInfo Odoo eCommerce SEO Best Practices guide (July 2026) covering product/category content, schema validation, sitemap, and robots practices.
  11. 11
    Odoo 19 SEO practice notes include Promote-tab meta fields with character guidance, default product/category URLs that may include database IDs, risk of 301 redirect chains after repeated slug changes (flatten in URL Redirects), and optional JSON-LD supplements (Organization, enhanced Product fields, FAQPage, BreadcrumbList) via QWeb/layout injection plus Rich Results Test validation.octurasolutions.com · verified Fetched Octura Solutions Odoo 19 SEO guide (March 2026) covering meta, slugs/IDs, redirect chains, and JSON-LD patterns.
  12. 12
    Practitioners report Odoo eCommerce SEO risks around parameter-based sort/filter URLs creating DUST/duplicate content, imperfect canonical handling on some category pages, and product attribute values changing URLs for the same product content — requiring deliberate facet control beyond defaults.odoo.com · verified Fetched Odoo forum thread on SEO parameters, internal links, and canonicals — community confirmation of category canonical and filter/duplicate URL concerns.
  13. 13
    Specialized Odoo SEO guidance lists duplicate dynamic URLs, indexed filter parameters, multi-category product canonical conflicts, and crawl-budget waste from layered navigation as common ranking disasters when controllers and noindex rules are not strict.seospecialist.framer.ai · verified Fetched 2026 Odoo Website SEO experts overview describing duplicate dynamic URLs, filter page bloat, and crawl budget issues.
  14. 14
    Odoo's official X/Twitter communications stress redirecting old URLs when switching to Odoo to keep SEO ranking intact.x.com · verified Odoo @Odoo post (Sep 2025): 'Switching to Odoo? Don’t forget SEO! Redirect your old URLs to keep your SEO ranking intact.'
  15. 15
    Odoo partner communications for Odoo 19 highlight built-in SEO essentials including clean URLs, structured data, metadata, sitemaps, and AI-driven assistants for titles, meta descriptions, and keywords.x.com · verified erpSOFTapp X post (Feb 2026) summarizing Odoo 19 SEO coverage: clean URLs, structured data, metadata, sitemaps, AI assistants.

Related services & solutions

Want an Odoo site that ranks — not just one that launches?

Flectic implements Odoo end to end and treats SEO as part of the rollout, not an afterthought. We configure sitemaps, robots.txt, redirects, structured data, and indexation correctly from day one, control faceted shop crawl budget and portal noindex, write per-page title and meta discipline into your templates, and tune images and themes for Core Web Vitals. Book an ERP Readiness Call and we will audit your Odoo site's SEO layer and map the fixes that move rankings.

Book an ERP Readiness Call
Response within one business day