Installation and configuration of "Website LLM" in Odoo
Requirements
- Odoo 18 is already installed and running.
- You have Admin rights in Odoo.
Step 1: Installing the Module
- Open the Odoo backend: Log in to your Odoo 18 backend.
- Open the Apps module: Click on "Apps" in the main menu.
- Use the search function: Enter "website_llm" in the search bar.
- Install the module: When the "Website LLM" module appears, click the "Install" button.

Step 2: Configuring the Module
General Settings:
Activate developer mode.
Navigate to: Website â Configuration â Websites.
Select the "llm.txt" tab:

- Enable LLM TXT (enable_llm_txt)
Activate this option to generate llm.txt and llm-full.txt files for your website.
These files contain AI-optimized entries for better search and LLM visibility. - llm.txt â short, SEO-optimized entries for AI discovery.
- llm-full.txt â extended entries with detailed descriptions for AI training and enrichment.
- Enable Multi-language (llm_txt_multi_language)
- When enabled, the module will export all available translations of your content.
- Each record is included in multiple languages, based on your website's configured translations.
- ð¡ This option improves your visibility in multilingual AI systems and search engines
- Display Language Options (llm_txt_display_language_options)
- When activated, your llm.txt export will include a section listing available language codes (e.g., en, fr, de).
- This is especially useful for multilingual sites, helping AI models or crawlers understand your language structure.
- Display Navigation Links (llm_txt_display_navigation_link)
- When enabled, a "Navigation Links" section will be included at the bottom of the LLM export.
- This section automatically lists key pages such as:
- It helps AI agents and automated crawlers better understand your website structure and link hierarchy.
- Website Title (llm_website_title)
- Set a custom title to appear at the top of your LLM export files.
- This can represent your brand or main site purpose (e.g., "Odoo Green - Sustainable Products Marketplace").
- Website Subtitle (llm_website_subtitle)
- Add a subtitle or tagline that describes your website's focus or industry.
- Example: "Discover eco-friendly solutions for modern businesses."
- This helps contextualize your LLM data and adds a meaningful introduction for crawlers and AI systems.
Configure LLM Generation Models:
Navigate to: Website â Site â Geo.
Select the "GEO LLM Config" menu:

This section defines what kind of content your website includes in the exported llm.txt and llm-full.txt files.
Each configuration controls one model (e.g., Products, Blog Posts, Events, etc.) and defines how titles, URLs, and descriptions are generated.

1. Section
Each LLM configuration belongs to a Section (for example: "Products", "Blog", "Services").
Sections help organize entries visually inside llm.txt and llm-full.txt with proper headings.
You can create sections under:
Website â Configuration â LLM â LLM Sections
2. LLM Source Type
You can choose between:
- Static: manually entered text (e.g., one fixed description across all pages).
- Dynamic: values pulled from model fields or computed with Python expressions.
This choice determines how flexible your LLM entries are.
If You Choose "Static"

In static mode, your LLM configuration represents one single entry for example, an "About Us" or "Privacy Policy" page.
You can fill the following fields directly:
- Link Title Value: the visible name (e.g., "About Our Company")
- URL Value: the full URL or path (e.g., /about-us)
- Description Value: a short SEO description
- Long Description Field: optional detailed text for llm-full.txt
You can the build-in chat-gpt feature of odoo to create or adapt your text

If You Choose "Dynamic"
In dynamic mode, the module automatically creates one entry per record from the selected Odoo model.
For example, if your model is product.template, one LLM entry will be generated per product that matches the defined Domain.

Model: Select the model you want to export (e.g., product.template, blog.post).
Domain: Optionally restrict which records are included.
Example: [('is_published', '=', True)] â exports only published records.
Link Source: How to generate the title for each entry:
- Field: choose an existing field like name
- Expression: define a computed value like record.name + ' | ' + record.categ_id.name
URL Source: How to generate the URL:
- Field: use an existing URL-like field
- Expression: compute it dynamically, e.g., record.slug or record.website_url
Description Source: How to generate the short description:
- Field: use a text field like description_sale
- Expression: compute a custom description dynamically
Long Description Field: Select a text or HTML field to include in llm-full.txt, such as description or website_description.
3. Update Mode
Choose how your entries are updated:
- Realtime: updates immediately whenever a related record changes (more accurate but may impact performance).
- Batch: updates periodically via a scheduled cron job (recommended for large datasets).
ð¡ Tip: Use "Batch" for high-volume models like product.template and "Realtime" for small or frequently edited models like blog.post.
4. AI Optimization Mode
Define how often your entries are enhanced using AI (ChatGPT integration):
- Realtime: AI rewrites titles/descriptions as soon as they're generated.
- Batch: optimization is done during nightly cron runs for better performance.
5. Grouping
You can group related entries in your LLM exports by category or tag using Group By Field.
Example: group products by category (categ_id) or blog posts by author.
Optionally, you can define a Group Expression to customize how the group name appears (e.g., record.categ_id.complete_name).
6. Website
Assign the configuration to a specific website (multi-website compatible).
Each website can have its own LLM structure and sections.
7. AI Optimization
You can optimize your generated titles and descriptions using the built-in ChatGPT connector.
From any LLM record or configuration, click "Optimize with AI" to automatically refine entries for SEO and clarity.
8. Optional
The Optional checkbox marks a configuration as non-essential.
Optional sections are grouped under ## Other Pages in your llm.txt export.
This is useful for smaller or miscellaneous entries that don't belong to a main content section (like "Legal", "Cookies", etc.).
9. Is Full
The Is Full option includes this configuration's data in llm-full.txt, not just llm.txt.
- â
Enabled: Exports long-form or detailed content (e.g., full product descriptions, blog text).
- â Disabled: Exports only titles, short descriptions, and URLs to the main llm.txt.
This allows you to separate your concise list (for quick AI indexing) from your detailed dataset (for training or full content generation).
Example:
llm.txt â short snippets for AI understanding and SEO.
llm-full.txt â detailed structured data for AI fine-tuning or full-site LLM ingestion.
10. Updating Entries
After saving your configuration:
- Click "Update LLM Entries" to generate or refresh data.
- You can view generated entries under Website â Configuration â LLM â LLM Entries.
âï¸ Batch configurations update automatically via the scheduled cron job (_cron_update_llm).
Accessing LLM Entries
To manage generated entries:
Select your llm config and access the generated records from the smart button
Here, you'll see all the entries that were automatically generated from your LLM Configurations.
Each entry corresponds to one exported record â for example, a product, blog post, or static page.
Understanding the LLM Entry Fields
Each record in geo.llm contains structured data used for both SEO and AI optimization.
Field | Description |
Section | The content section the entry belongs to (inherited from its configuration). |
Configuration | The geo.llm.config that generated this entry. |
Model / Record ID | Identifies the source record (e.g., a product or page). |
Title | The base title extracted or computed from your data. |
Title (Optimized) | The AI-enhanced version, rewritten for clarity and SEO. |
URL | The full public URL, computed using your website's domain and language. |
Description | A concise description for indexing and understanding content. |
Description (Optimized) | AI-improved description for better context and keyword density. |
Long Description | Full or extended text content, suitable for LLM ingestion (used in llm-full.txt). |
Long Description (Optimized) | The AI-refined version of your long description. |
Group Value | Logical grouping value (e.g., category name). |
Website | Website context for which this entry is generated. |
AI Optimization Message | Displays the last optimization result or error. |
AI Optimized | Boolean showing if AI enhancement was successfully applied. |
How Entries Are Generated
Entries are automatically created or updated whenever:
- You save or update a configuration (in geo.llm.config),
- The cron job _cron_update_llm runs (batch mode),
- you save or create a new record from a model selected in geo.llm.config, where the update mode is realtime
- You manually trigger "Update LLM Entries" from a configuration.
Depending on your configuration:
- Static Entries: Created from manually defined fields (no linked model).
Example: "About Us", "Contact Page". - Dynamic Entries: Created from model records and updated based on expressions or fields.
Example: Products, Blogs, Events, or Articles.
Multilingual Support
Each LLM entry is automatically generated for all active website languages.
The system cycles through every enabled language and creates localized titles, descriptions, and URLs.

ð¡ Tip:
Enable "Display Language Options" in your Website Settings â LLM TXT tab
to let visitors and AI tools switch between localized content exports.
AI Optimization (Realtime & Batch)
The AI Optimization system enhances your generated content for SEO and LLM readability.
You can control when this happens:
- Realtime: The optimization runs instantly when a new entry is generated.
- Batch (Cron): Optimizations are executed periodically for all pending entries.
Each optimization call uses your configured AI endpoint (via website._OLG_api_rpc) and processes:
- Titles (short and keyword-rich)
- Descriptions (clear and SEO-friendly)
- Long Descriptions (detailed, human-like summaries)
Results are stored in title_optimized, description_optimized, and long_description_optimized.

Manual Optimization
To manually optimize an entry:
- Go to you llm config
- Open any record from the smart button
- Click "Optimize with AI"
The system will:
- Send your entry data to the AI model
- Update the optimized fields
- Record a timestamp and message confirming success
â
After optimization, the record shows "AI Optimized = True"
Maintenance and Cleanup
You can manage the data lifecycle easily:
- Delete entries for a model:
Automatically handled when a model or configuration is changed or deleted.
You can also manually clear entries using the internal method _clear(model). - Rebuild all entries:
Run "Update LLM Entries" from the configuration or trigger the cron job. - Re-optimize all entries:
Use the scheduled cron _cron_optimize_llm or manually trigger AI optimization.
Export and Usage
The generated data feeds directly into your exported text files:
- llm.txt â short structured entries for fast AI ingestion or search indexing.
- llm-full.txt â full-length, descriptive entries for deep model understanding.
Each export groups entries by:
- Website
- Section
- Configuration sequence
- Group values (if set)
Optional configurations are included under ## Other Pages, while entries with "Is Full" are additionally written into the full export.
View and Verify the Generated Files
Once everything is configured, the system automatically generates your AI-readable export files.
You can access them directly from your browser:
ð¡ Tip:
Both files are updated automatically when LLM entries are created or optimized.
You can open them anytime to verify that your website content is correctly exported and properly formatted.
Please log in to comment on this module