Odoo 20 includes a public /llms.txt route in the core Website application. Website administrators can configure the plain-text response within Odoo rather than implementing an additional route outside the application. The related change also moves crawler restrictions for selected technical and transactional routes into generated robots.txt directives. (Odoo Odoo Blob; mergebot.odoo.com)
These changes create two separate review tasks. Administrators must decide whether to publish and maintain llms.txt content, then inspect the robots.txt output generated for the modules installed in the database. Although introduced through the same implementation, llms.txt and robots.txt serve different purposes and should be tested separately. (Odoo Odoo Blob; mergebot.odoo.com)
What Odoo 20 publishes
The Website application exposes llms.txt at the website root through the /llms.txt HTTP route. When non-blank content is configured, the route returns that content as plain text using UTF-8 encoding. The implementation does not automatically build a completed llms.txt document from existing pages or other website records. (Odoo Odoo Blob)
Odoo also adds a reference to llms.txt in the website root HTML to improve discoverability. Administrators manage the file's content through an editor under Website SEO settings, bringing the published text into the existing website configuration process. (mergebot.odoo.com)
Because the route is part of the core Website application, an Odoo 20 website does not require a third-party module merely to provide the endpoint. Administrators must still prepare and maintain the content. Odoo supplies the route, the settings editor and the root HTML reference, while the saved text determines what the endpoint returns. (Odoo Odoo Blob; mergebot.odoo.com)
Blank content produces no file
Odoo defines explicit behaviour for websites where llms.txt has not been populated. If the configured value is missing or contains only whitespace, a request to /llms.txt receives a not-found response. Odoo does not publish an empty file, a placeholder or an automatically generated summary. (Odoo Odoo Blob)
The presence of the route in Odoo 20 therefore does not mean every website will immediately expose an llms.txt document. A not-found response can indicate that no non-blank content has been saved, rather than a server or routing fault. Administrators should check the Website SEO setting before investigating the request as a technical failure. (Odoo Odoo Blob; mergebot.odoo.com)
Crawler restrictions move to robots.txt
The related crawler change moves restrictions for routes such as login, checkout, payment, confirmation and portal pages into robots.txt directives. Odoo generates these directives according to the modules installed in the database. (mergebot.odoo.com)
The resulting robots.txt output can therefore vary between Odoo environments. A database with ecommerce or portal modules should not be assessed only against a generic expected file or a file copied from another database. Reviewers need to inspect the output generated by the database under assessment and account for its installed modules. (mergebot.odoo.com)
The two mechanisms remain distinct. The /llms.txt route publishes administrator-supplied plain-text content, while robots.txt contains crawler restrictions for specified technical and transactional routes. Publishing llms.txt does not replace the need to inspect robots.txt, and the presence of robots.txt directives does not populate llms.txt. (Odoo Odoo Blob; mergebot.odoo.com)
Implications for website governance
Organisations that use the feature should assign responsibility for the llms.txt setting. Odoo publishes the saved non-blank content, but the implementation does not automatically update that text when other website material changes. Its accuracy therefore depends on the organisation's content review and maintenance process. (Odoo Odoo Blob; mergebot.odoo.com)
The public endpoint should be tested wherever the file is expected to be available. Checking only that the editor appears in the administration interface is insufficient. A direct request to /llms.txt should return the intended text with a plain-text content type and UTF-8 encoding. (Odoo Odoo Blob; mergebot.odoo.com)
Crawler review procedures should also account for the location of the route restrictions. Odoo 20 acceptance testing should include the generated robots.txt output, particularly when the installed modules provide login, checkout, payment, confirmation or portal routes. (mergebot.odoo.com)
For a complete review, teams should verify the configured llms.txt content and its public response independently from the generated robots.txt directives. This separation helps ensure that the administrator-supplied text, endpoint behaviour and module-dependent crawler restrictions are each checked against the relevant part of the implementation. (Odoo Odoo Blob; mergebot.odoo.com)
What the implementation does not specify
The implementation confirms how Odoo exposes and manages configured llms.txt content, but it does not prescribe what an organisation should write in the file. It also does not define an approval process, review schedule or content owner. Those matters remain internal governance decisions. (Odoo Odoo Blob; mergebot.odoo.com)
The implementation also confirms that robots.txt restrictions are generated according to installed modules, but it does not provide one universal output for every possible module combination. Teams should not assume that the robots.txt file from one Odoo 20 database represents the output of another environment with a different application set. (mergebot.odoo.com)
Checks before publication
First, confirm that the llms.txt editor is available under Website SEO settings. Enter the approved content, save it and request /llms.txt directly. A populated endpoint should return the saved text as UTF-8 plain text. Missing or whitespace-only content should produce a not-found response. (Odoo Odoo Blob; mergebot.odoo.com)
Second, inspect the website root HTML for Odoo's llms.txt reference. This tests the discoverability element separately from the endpoint itself. The route response and the HTML reference are distinct parts of the implementation, so both should be checked. (mergebot.odoo.com)
Third, retrieve robots.txt from the environment being assessed. Check the generated directives for the relevant login, checkout, payment, confirmation and portal routes. Repeat this review for databases with different installed modules rather than applying an expected result from another environment. (mergebot.odoo.com)
Finally, record whether llms.txt is intentionally published or left blank. Odoo supports both states through its configured-content and not-found behaviour, but the software does not document the organisation's reason for either choice. Recording the decision alongside the website's SEO and crawler review provides a clearer basis for later configuration checks. (Odoo Odoo Blob; mergebot.odoo.com)
