Skip to Content
Nexuro Digital
  • Home
  • Services
    Digital marketing
    • AI Search (GEO)Cited by ChatGPT, Perplexity & Google AI
    • SEOConversion-focused SEO
    • SEO consultingFor your in-house teams
    • Google Ads (SEA)Profitable campaigns
    • Data AnalyticsMake sense of your data
    • Server-side TrackingReliable data & GDPR
    • Cookiebot & consentCertified Partner · GDPR
    Odoo
    • Official Odoo PartnerImplementation & ERP/CRM
    • Odoo website creationConnected to your ERP
    • Odoo consultant in BelgiumLocal expertise
    • Peppol & invoicing2026 compliance
    • Odoo AppsWhat Odoo replaces
    • Support & TicketingResponsive follow-up
    Resources
    • Blog, La Croissance ConnectéeOur tips
    • Our workClient case studies
    • White paper2026 data strategy
    • Areas we serveOur cities in Belgium
    Discuss your project
  • Our work
  • Blog
  • About us
  • Contact
  • 0
  • 0471 46 57 86 
  • English (US) Français (BE)
Nexuro Digital
  • 0
    • Home
    • Services
    • Our work
    • Blog
    • About us
    • Contact
  • 0471 46 57 86 
  • English (US) Français (BE)
  • All Blogs
  • The Nexuro Blog
  • Sitemap, robots.txt and AI crawlers on Odoo: the practical guide
  • Sitemap, robots.txt and AI crawlers on Odoo: the practical guide

    November 3, 2026 by
    Timothy Jacqmin

    More and more Belgian SMEs choose Odoo for their website and online shop. But most of these sites start out with the same SEO blind spots, and the topic is still poorly documented.

    When an Odoo page does not show up in Google, the first instinct is to suspect a bug, or to rework the content. In the vast majority of cases, it is neither. The real obstacle is a misunderstood setting: a cache, a toggle, a publication date, a line in robots.txt, or a CDN rewriting your instructions without you knowing. Here is how to spot them and take back control.

    A guide in two parts. This part 2, co-written with Renaud De Harlez, covers indexing and crawling: sitemap, robots.txt, AI crawlers. Part 1, published on Renaud's site in French, covers the architecture of your online shop: categories and faceted navigation. Read part 1 on renauddeharlez.be.

    In short

    • The Odoo sitemap is automatic, but cached for 12 hours: a page you just published can be missing from it without anything being broken.
    • "Published" and "Indexed" are two separate settings: a page can be live and invisible to Google.
    • A single misplaced line in robots.txt can block the whole site, or break how it renders.
    • Not all AI bots are equal: blocking the ones that train models is defensible, blocking the ones that look for sources means giving up on being cited.
    • The robots.txt actually served can differ from the one written in Odoo: a CDN such as Cloudflare can rewrite it.

    Why indexing is the blind spot of Odoo websites

    Odoo does a lot on its own. It generates the sitemap, writes the robots.txt header, adds a canonical tag to every page and adds hreflang tags on multilingual sites. No setting is needed for an Odoo site to be "technically" ready.

    On its own is exactly the problem. What is automatic, nobody looks at. You publish a page and assume it is in Google. You add a robots.txt rule and assume it applies. And the mistakes stay invisible for months, until traffic drops.

    In other words, the job is not to build these files, but to check what they actually tell Google and the AI engines. That is what this guide is about.

    "Published" or "Indexed": the number one confusion on Odoo

    Odoo has two toggles that look alike and have completely different effects.

    • "Published" (for visitors). It makes the page accessible to the public. An unpublished page returns an access denied.
    • "Indexed" (for search engines). It allows Google to list the page. When it is off, the page stays online but carries a noindex tag and leaves the sitemap. It is set in the page properties.
    SituationWhat the visitor seesWhat Google sees
    Published + indexedThe pagePage eligible for ranking
    Published + not indexedThe pageNoindex tag, missing from the sitemap
    Not publishedNothing (access denied)Nothing

    The symptom is easy to spot: an important page, clearly online, that never shows up in Google. The most common case: a page duplicated from a draft or a test page that was not indexed. The copy inherits the setting and stays invisible for months.

    The fix comes down to one rule: check the "Indexed" toggle in the properties of every important page, and especially of every page created by duplication.

    Note that this setting only applies to static pages. Product pages, categories and blog posts follow their own rules.

    The Odoo sitemap: automatic, but not instant

    What Odoo generates on its own

    Odoo generates the /sitemap.xml file from published pages, blog posts, products and categories. The official documentation states that it is cached and regenerated every 12 hours, and that beyond 45,000 URLs Odoo splits it into several files. Each entry carries a last modification date. Odoo also computes a priority, but Google has said it ignores this field: no need to tweak it.

    So there is no file for you to write. The job is to check what goes into it, and what does not.

    The symptom: a published page missing from the sitemap

    In most cases, the page is not missing: the sitemap simply has not been regenerated yet. Before concluding there is a problem, check in this order:

    1. The delay. Was the page published less than 12 hours ago? Wait, or request indexing through the URL Inspection tool in Search Console.
    2. The "Indexed" setting in the page properties.
    3. The publication date, for a blog post (see below).
    4. The language: is the URL you are looking for a translated version?

    The future publication date trap

    An Odoo blog post with a publication date in the future is marked "published", but stays inaccessible: visitors are sent back to the blog list until the date, in server time, has passed. It does not appear in the sitemap either. This is intended (it is how scheduled publishing works), but nothing in the interface makes it clear.

    We saw it on a batch of articles prepared in advance: all "published", none visible. The cause: a date set to the next day.

    Check: open the post in a private window. If it sends you back to the blog index, check its date.

    Pages that have no business in the sitemap

    The sitemap should only contain the pages you want to see in Google. On Odoo sites, we often find theme demo pages, work pages ("Home 2", "test"), thank-you pages after a form, or technical pages left behind by some modules.

    For each one, three options: delete it (with a 301 redirect if it had visits), unpublish it, or switch off "Indexed".

    Odoo 20 improves this: its sitemap now only contains indexable URLs that return a 2XX status. We cover what is new in this release in our article on the Odoo 20 website: AI assistant, SEO and GEO.

    What about a multilingual site?

    On Odoo (observed on version 18), the sitemap is built in the site's default language. Translated versions are not listed in it: Google finds them through the hreflang tags Odoo adds automatically.

    How to check

    • The Sitemaps report in Search Console. Submit sitemap.xml, check that the status is "Success" and resubmit it after a large batch of publications, once the 12 hours have passed.
    • Bing Webmaster Tools. Bing feeds part of the answers of ChatGPT and Copilot: submitting it there takes a few minutes and also counts for visibility in AI engines.
    • The Pages report in Search Console. Compare the number of URLs submitted with the number of indexed pages. Look in particular at "Excluded by 'noindex' tag" (is it intended?), "Crawled, currently not indexed" (pages too thin or too similar) and "Duplicate without user-selected canonical".

    robots.txt on Odoo: where the mistakes that block a whole site come from

    The robots.txt file tells bots what they are allowed to crawl. On Odoo, you edit it in Website → Configuration → Settings, SEO section, "Edit robots.txt" button. Odoo writes the header itself (general rule and Sitemap line) and appends your instructions after it.

    Use this setting rather than custom development: it survives upgrades and stays visible to the whole team.

    The symptom

    A site that disappears from Google within a few days. Or, more discreetly, pages that show up without styling in the URL Inspection tool, and pages flagged "Blocked by robots.txt" in the Pages report.

    The mechanism

    Four mistakes come up on almost every site we audit:

    1. The staging "Disallow: /" copied onto the live site. A single line, the whole site blocked.
    2. The wrong domain set in Odoo. Odoo automatically serves a robots.txt that blocks everything when the address visited does not match the domain declared in the website settings. This is intended (it prevents the technical .odoo.com address from being indexed), but after a domain change that was not reported in Odoo, it is the new domain that gets blocked.
    3. Blocking /web/. "That's the back office", people think. But it is also where Odoo serves the site's stylesheets and scripts. Google then sees a broken page.
    4. Blocking a page to deindex it. Google no longer reads the page, so it never sees its noindex.

    The consequences

    • Full or partial deindexing, which can take weeks to recover from after the fix.
    • A broken rendering in Google's eyes, which rates an unstyled page as less useful, especially on mobile.
    • Pages that stay in the index against your will, because the noindex can no longer be read.

    Noindex or robots.txt: the golden rule

    robots.txt controls crawling, not indexing. A blocked page can still appear in Google if other sites link to it. To remove a page from the index, use the "Indexed" toggle (the noindex tag), and the page must not be blocked in robots.txt.

    Conversely, as Renaud explains in part 1, a noindex does not stop crawling: to make Google stop visiting thousands of URLs, robots.txt is the tool.

    Blocking filter URLs in the Odoo robots.txt

    The useful rules on Odoo target URLs generated automatically in large numbers: shop filters and sorting, internal search, blog archives and the checkout funnel. Part 1 explains why these URLs multiply and which ones deserve to become real categories.

    Here is how to block the others.

    The trap of parameters that change names

    The name of the attribute filter parameter is not the same across Odoo versions: attrib in version 17, attribute_value in version 18, attribute_values since version 19, Odoo 20 included (according to Odoo's public source code).

    A rule written for one does not necessarily block the others. The rule below targets the common prefix "attrib", which covers all three. Getting ready for the new release? Our checklist Upgrading to Odoo 20 without losing your SEO details what to check before and after.

    A basic example, to adapt to your site:

    User-agent: *
    # Attribute filters (attrib, attribute_value, attribute_values depending on the version)
    Disallow: /shop*?*attrib
    # Sorting, products per page, price filter
    Disallow: /shop*?*order=
    Disallow: /shop*?*ppg=
    Disallow: /shop*?*min_price=
    Disallow: /shop*?*max_price=
    # Internal search
    Disallow: /*?*search=
    # Blog archives by date
    Disallow: /*?*date_begin=
    # Checkout funnel
    Disallow: /shop/cart
    Disallow: /shop/checkout

    What to do with each URL pattern?

    URL patternExampleRecommendation
    Category/shop/category/trail-12Allow crawling. This is the page to push.
    Pagination/shop/category/trail-12/page/2Allow crawling, so Google reaches every product.
    Attribute filter?attrib=… / ?attribute_values=…Block, unless the combination is genuinely searched for: create a category (part 1).
    Sorting, products per page, price?order=… · ?ppg=… · ?min_price=…Block. No search value.
    Internal search?search=…Block.
    Blog archives?date_begin=…Block.
    Cart and checkout/shop/cart · /shop/checkoutBlock.
    Technical resources/web/…Never block: the site's styles and scripts.

    The blog archives trap

    On an Odoo blog, the "Archives" widget combined with tags can generate hundreds of URLs: one per tag and per month. Odoo marks them noindex, and Search Console files them under "Excluded by 'noindex' tag". The problem looks solved. It is not: Google keeps visiting them. On a blog we monitor, a few Disallow rules targeting this pattern were enough for crawling to refocus on the real articles.

    How to check

    • Filter a category in your shop, copy the resulting URL and check that it matches one of your rules. It is the only way to be sure of the parameter names on your version.
    • If filtered pages are already indexed, set them to noindex first, wait for them to drop out of the index, then block them.
    • Test a few important URLs (home, category, product) with URL Inspection in Search Console after every change.

    AI crawlers: what you are really blocking

    For an SME looking for visibility, blocking every AI bot is rarely the right choice. The real question is not "should we block AI?", but "which ones?".

    Training or search: two families of bots

    • Training bots collect content to train future models. Blocking them protects your content, with no effect on your immediate visibility.
    • Search bots look in real time for sources to cite in answers. Blocking them removes you from the answers of ChatGPT, Claude or Perplexity.
    BotPublisherRoleEffect of blocking
    GPTBotOpenAIModel trainingContent excluded from future training
    OAI-SearchBotOpenAIChatGPT search indexMissing from ChatGPT search results
    ChatGPT-UserOpenAIVisit requested by a userOpenAI states robots.txt may not apply
    ClaudeBotAnthropicTrainingContent excluded from future training
    Claude-SearchBotAnthropicClaude search indexReduced visibility in Claude's answers
    Claude-UserAnthropicVisit requested by a userThe page can no longer be read to answer
    PerplexityBotPerplexitySearch index (no training, according to Perplexity)Missing from Perplexity's sources
    Perplexity-UserPerplexityVisit requested by a userPerplexity says it generally does not follow robots.txt
    Google-ExtendedGoogleUsage token for Gemini, not a separate botNo effect on Google rankings or AI Overviews

    Sources: official documentation from OpenAI, Anthropic, Perplexity and Google, consulted in October 2026. These lists change: check again before editing your file.

    The Google-Extended trap

    This is the most widespread misconception: blocking Google-Extended does not remove you from AI Overviews. They rely on Googlebot's standard index. The only way out would be to block Googlebot, and so to disappear from Google.

    Our position

    For most service SMEs, we even leave training bots open: a model that has "read" your expertise is more likely to mention your brand.

    Blocking training mainly makes sense when the content is itself the product (paid training, databases, monetised editorial content). In that case, this robots.txt lets you stay citable while refusing training:

    User-agent: GPTBot
    Disallow: /
    
    User-agent: ClaudeBot
    Disallow: /
    
    User-agent: Google-Extended
    Disallow: /
    
    User-agent: OAI-SearchBot
    User-agent: Claude-SearchBot
    User-agent: PerplexityBot
    Allow: /

    The CDN trap: when Cloudflare rewrites your robots.txt

    Many Odoo sites on a custom domain go through Cloudflare. Depending on the settings, the robots.txt actually served is no longer the one you wrote in Odoo, and nothing in Odoo tells you so.

    Two settings come into play:

    • AI bot blocking, enabled by default on many domains added since summer 2025: bots are refused at network level, before they even read your robots.txt. Your "Allow" rules become useless.
    • Managed robots.txt: Cloudflare adds its own lines at the top of your file, including "Content-Signal" lines and "Disallow" rules for several AI bots.

    How to check what is served

    • Open both addresses https://yourdomain.be/robots.txt and https://www.yourdomain.be/robots.txt. Both must match what you wrote in Odoo (or redirect to the same version).
    • Look for lines you did not write: "Content-Signal", unexpected "User-agent: GPTBot" blocks.
    • In the Cloudflare dashboard, align the section dedicated to AI bot control with your decision.

    What about llms.txt?

    llms.txt is a file proposed as a standard to summarise a website for language models. Odoo 20 lets you create it natively from the website settings, but no major generative engine has confirmed using it to choose its sources. It only takes a few minutes: create it if you are on Odoo 20, but do not mistake it for a GEO strategy. We explain why in SEO vs GEO: the differences and how to combine them.

    What Odoo handles natively, and what you have to fix yourself

    Odoo lays good foundations. But three automatic behaviours are often taken for guarantees when they are not.

    The canonical tag: a hint, not deduplication

    Odoo adds a canonical tag to every public page. Since version 19, it is built from the URL path alone: a filtered, sorted or search page therefore points to its version without parameters. That is a good base, but it has two limits. The canonical remains a hint that Google can ignore, and it does not prevent the crawling of thousands of parameter URLs. Above all, it does not merge two distinct pages with similar content: a page created by duplication, or two categories showing the same products, each remain their own "original". The fix is a decision page by page: delete and redirect, differentiate the content, or block the URL pattern.

    The language chosen from the browser

    Odoo picks the language from the visitor's browser. A bot or an audit tool with no language preference can be redirected to another language than expected and, if the translation is incomplete, land on an empty page or an error. The result: audits reporting dozens of false 404s, while Google sees the right pages. Two rules: only activate a language once the site is really translated, and before trusting an audit, open the flagged URL in a private window, in the site's main language.

    Structured data

    Up to Odoo 19, Odoo provides structured data (schema.org) for products, events, forums and addresses; Odoo 20 adds some by default on pages. It is a good base, but it does not say who is speaking.

    What you generally need to add:

    Structured data typeWhat it is forWhere
    OrganizationCompany identity, logo, contact details, social profilesHome or "About" page
    BreadcrumbListPosition of the page in the siteDeep pages
    FAQPageQuestions and answers readable by AI enginesPages with a visible FAQ
    Article with author (Person)Who wrote it, when, with what expertiseBlog posts

    Two points to watch: the marked-up text must match the visible text (a JSON-LD FAQ that does not exist on the page breaches Google's guidelines), and on a multilingual site, check every language. A structured data block is not always translated along with the page.

    Migration and go-live: the leftovers that cost traffic

    301 redirects

    A migration to Odoo (from WordPress, PrestaShop, Shopify…) without a redirect plan makes organic traffic drop within a few weeks: old URLs return 404s and the link history is lost. The most common mistakes: no redirect at all for product pages and articles, temporary redirects (302, 303) instead of permanent ones (301), redirect chains, and mass redirects to the home page, which Google treats as 404s. Odoo automatically creates a 301 when you rename a product or an article, but mapping the old site to the new one is still up to you. The steps are detailed in migrating to Odoo: steps, timeline and pitfalls to avoid.

    Oversized files

    Odoo serves files as they were uploaded: a 5 MB photo stays a 5 MB photo. Odoo 20 introduces responsive images (srcset), but that does not fix files that are oversized to begin with. A real example: a 2 MB favicon, loaded on every page of the site. Compress before uploading, prefer WebP and check your key pages with PageSpeed Insights.

    Construction leftovers

    Look for these systematically: theme demo content, work titles ("Home 2", "Copy of…"), identical metadata across several pages and, after a name change, the old brand name in titles, descriptions and structured data. AI engines read it, and may keep presenting the company under its old name. A site:yourdomain.be search in Google brings them up in a few minutes.

    When a page becomes citable by AI engines

    A well-crawled site is not yet a cited site. A page gets picked up by ChatGPT, Perplexity or AI Overviews when it gives a short, clear and verifiable answer, then develops it in self-contained blocks. On Odoo, no special feature is needed: it all comes down to how the content is structured.

    The method has four steps:

    1. Answer first. Two or three sentences at the top of the page, before any development.
    2. Split into questions. Subheadings phrased like your customers' questions, with a complete answer right below.
    3. Prove it. Dated and sourced figures, an identified author, a visible date.
    4. Mark it up. A FAQ at the end of the page, repeated in FAQPage structured data.

    A reminder is in order: an AI engine generally cites pages that already rank well. GEO is built on sound technical SEO. The full method is in our GEO guide for SMEs.

    Checklist: indexing your Odoo site in 10 points

    • The sitemap is submitted in Search Console and in Bing Webmaster Tools, with a correct status.
    • Important pages are "Published" and "Indexed" in their properties.
    • No blog post has a wrong publication date set in the future.
    • Demo, test and thank-you pages are deleted, unpublished or not indexed.
    • robots.txt contains neither "Disallow: /" nor a block on /web/.
    • The domain declared in the website settings matches the real domain.
    • Filter, sorting, search and archive URLs are blocked from crawling, with the right parameter name for your version.
    • The robots.txt served with and without www is identical to the one written in Odoo.
    • Your policy towards AI bots is an explicit decision, not a CDN default setting.
    • Structured data is present, consistent with the visible text and correct in every language.

    Frequently asked questions

    Where can I find the sitemap of an Odoo site?

    At yourdomain.be/sitemap.xml. Odoo generates it automatically, caches it and regenerates it every 12 hours, and splits it into several files beyond 45,000 URLs. All you need to do is submit it in Search Console, under Sitemaps.

    How do I edit robots.txt on Odoo?

    In Website → Configuration → Settings, SEO section, "Edit robots.txt" button. Odoo generates the header and the Sitemap line, then appends your rules. Then check the file actually served, with and without www.

    Why is my Odoo page not indexed by Google?

    The most common causes: the "Indexed" toggle switched off, a publication date in the future, the sitemap not yet regenerated (up to 12 hours) or a robots.txt rule blocking the page. Check each point, then request indexing through URL Inspection in Search Console.

    What is the difference between noindex and blocking in robots.txt?

    A noindex removes a page from the results, but Google keeps visiting it. robots.txt prevents Google from visiting it, but a page that is already indexed can stay there. Google cannot read a noindex on a page it is not allowed to visit: do not combine the two on the same URL.

    Should I block GPTBot on my site?

    Blocking GPTBot stops OpenAI from using your content to train its models, without removing you from ChatGPT search, which relies on OAI-SearchBot. For an SME looking for visibility, leaving it open is often the better choice.

    Does blocking Google-Extended remove my site from AI Overviews?

    No. Google-Extended controls the use of your content for Gemini, with no effect on Google rankings or on AI Overviews, which rely on Googlebot's index.

    Is the Odoo 20 llms.txt useful?

    It only takes a few minutes, but no major generative engine has confirmed using it to choose its sources. The structure of your content and mentions on other sites matter far more.

    Key takeaways

    • On Odoo, most indexing problems do not come from a bug, but from a misunderstood setting.
    • "Published" and "Indexed" are two separate toggles: check both on every important page.
    • The sitemap runs 12 hours behind, and a post dated the next day stays invisible.
    • robots.txt controls crawling, noindex controls indexing. Block filters with the right parameter name for your version.
    • Blocking AI search bots means giving up on being cited. Decide bot by bot.
    • Always check what is actually served, with and without www: a CDN can rewrite your instructions.

    What next? Google and AI engines now crawl the right pages. What remains is to make sure these pages are the right ones: categories designed for your customers and filters under control. That is the subject of part 1, published on Renaud's site in French: Odoo eCommerce: choosing the right categories and mastering faceted navigation.

    The authors

    Timothy Jacqmin is co-founder of Nexuro Digital, a digital marketing agency and Official Odoo Partner in Belgium. He helps companies with their SEO, their Odoo upgrades and their visibility in AI engines. LinkedIn profile · About us

    Renaud De Harlez is an SEO consultant and digital marketing trainer based in Braine-le-Comte. He helps SMEs, freelancers and non-profits with their SEO strategy and the creation of their websites, notably on Odoo. renauddeharlez.be

    Sources

    1. Odoo, official documentation, Search Engine Optimization (SEO)
    2. Odoo, Odoo 20 Release Notes, Website section, September 2026
    3. Odoo source code, public odoo/odoo repository, website and website_sale modules, branches 17.0 to 20.0
    4. OpenAI, Overview of OpenAI Crawlers
    5. Anthropic, Does Anthropic crawl data from the web, and how can site owners block the crawler?
    6. Perplexity, How does Perplexity follow robots.txt?
    7. Google Search Central, Overview of Google crawlers and fetchers
    8. Cloudflare, Managed robots.txt
    in The Nexuro Blog
    Written by
    Timothy Jacqmin

    Timothy Jacqmin is co-founder of Nexuro Digital, a Belgian agency specialised in digital marketing (SEO, SEA, data) and Odoo integration. He helps SMEs connect their acquisition to their ERP and drive growth with data.

    About Nexuro →

    Read Next
    CRM, eCommerce and marketing automation in Odoo 20: new features to sell more
    Our office
    • 55 rue des Bruyères​
      B-1325 Chaumont-Gistoux
      ​
      BE 0803.435.558

    Réseaux sociaux


    Connect with us
    • contact us
    • bj@nexuro-digital.com
    • 0471/46.57.86
    •     whatsapp

    ​Our services

    Official Odoo Partner
    E-invoicing - Peppol

    Digital marketing

    SEA

    SEO

    Data Analytics

    Digital Marketing Agency

    Useful links

    • Home
    • Blog
    • About us
    • Our achievements
    • Privacy policy
    • Legal notice
    • Disclaimer
    • Website cookie policy
    • Terms of sale

    ​
    English (US) | Français (BE)
    Powered by Odoo - The #1 Open Source eCommerce