Saltar al contenido

SEO en Odoo Website y eCommerce: dominio, robots.txt, llms.txt y schema

Publicado el 07-10-20269 min de lecturaPor la redacción de SmoothSeen

El SEO de Odoo Website se configura en tres sitios: el campo Domain de los ajustes, que fija canonical, sitemap y robots.txt; el diálogo Optimize SEO de cada página, para título, descripción e imagen social, y el editor del robots.txt, que exige el modo desarrollador. Odoo genera por su cuenta el sitemap, el hreflang y el JSON-LD. Vale para Odoo 19 y 20.

Lo esencial

  • Odoo 20 salió en septiembre de 2026 con soporte previsto hasta septiembre de 2029; Odoo 19 lo tiene hasta septiembre de 2028.
  • El campo Domain de los ajustes del sitio web decide el canonical, el sitemap y el robots.txt; sin él, la dirección de Odoo puede competir con la tuya en Google.
  • El canonical de Odoo quita los parámetros de la URL, y las páginas 2 y siguientes de los listados llevan noindex.
  • El botón Edit robots.txt solo aparece con el modo desarrollador; Odoo 20 añade Edit llms.txt, que publica /llms.txt.
  • Odoo 20 genera JSON-LD con Organization, BreadcrumbList y Product (precio, disponibilidad, SKU y GTIN), pero no marca ni envío ni devoluciones.

Para comprobarlo en tu web: Auditoría SEO

En esta página

Odoo es un ERP en Python cuya aplicación Website (y su extensión eCommerce) publica páginas, blog y tienda desde la misma base de datos. Controla las URL, el canonical, el hreflang, el sitemap, el robots.txt y los datos estructurados. No tiene ajustes para las cabeceras HTTP de seguridad ni para la compresión: en Odoo Online y Odoo.sh no administras el servidor, y en una instalación propia eso lo hace el proxy que pongas delante. Los menús se citan en inglés, como en la documentación oficial.

¿Qué versión de Odoo usar en octubre de 2026?

Odoo 20 salió en septiembre de 2026, con soporte estándar previsto hasta septiembre de 2029; Odoo 19 lo tiene hasta septiembre de 2028 y Odoo 17 lo perdió en septiembre de 20261. En Odoo Online hay además versiones SaaS cada dos o tres meses (19.1 a 19.4), que solo existen ahí1. Lo que cambia para el SEO entre la 19 y la 20, según el código fuente:

Qué
Canonical, hreflang y x-default
Odoo 19
Automáticos
Odoo 20
Automáticos
Lo que te toca
Rellenar el campo Domain
Qué
Sitemap
Odoo 19
/sitemap.xml, cada 12 horas
Odoo 20
Igual
Lo que te toca
Enviarlo a Search Console
Qué
robots.txt
Odoo 19
Editable con modo desarrollador
Odoo 20
Igual
Lo que te toca
Añadir tu política de IA
Qué
llms.txt
Odoo 19
No
Odoo 20
Botón Edit llms.txt
Lo que te toca
Opcional
Qué
Menú Redirects
Odoo 19
Solo con modo desarrollador
Odoo 20
Siempre visible
Lo que te toca
Redirigir al migrar
Qué
JSON-LD
Odoo 19
Organization, Product y ProductGroup (con eCommerce)
Odoo 20
Además BreadcrumbList, BlogPosting y Event, en un solo bloque
Lo que te toca
Completar los campos del producto
Qué
Cabeceras de seguridad
Odoo 19
Sin ajustes en el panel
Odoo 20
Sin ajustes en el panel
Lo que te toca
Proxy o Cloudflare

¿Por qué el campo Domain es lo primero que hay que tocar?

Porque Odoo construye el canonical con el dominio del sitio web, no con el de la petición2. Ve a Website > Configuration > Settings y escribe en Domain la URL completa, por ejemplo https://www.ejemplo.es3. Con ese valor, Odoo hace tres cosas:

  1. El <link rel="canonical"> de cada página apunta a tu dominio, sin parámetros, y la portada siempre a /2.
  2. Si alguien entra por la dirección de la base de datos (miempresa.odoo.com), el robots.txt responde Disallow: / y las páginas llevan noindex4. La documentación lo resume así: mapear tu dominio impide que Google indexe la dirección original3.
  3. El sitemap y la línea Sitemap del robots.txt usan tu dominio.

Odoo genera un certificado de Let's Encrypt para cada dominio que conectes, pero no para el dominio desnudo (ejemplo.es sin www)3. Por eso la documentación recomienda una redirección 301 de ejemplo.es a https://www.ejemplo.es en tu proveedor de DNS o con Cloudflare. Sin ella, quien escriba la dirección sin www puede ver un error.

¿Cómo se optimizan título, descripción e imágenes en Odoo?

Abre la página en el editor y ve a Website > Site > Optimize SEO5. El diálogo tiene:

  • Título y descripción. Si los dejas vacíos, Odoo usa valores por defecto sacados del contenido. Una vista previa muestra cómo saldrían en Google. Fill with AI propone ambos.
  • Keywords. Rellenan <meta name="keywords">, que los buscadores ignoran; la utilidad real es ver si la palabra aparece en el H1, los H2, el título y el texto. La documentación pide un solo H1 por página5.
  • Imagen para redes sociales. Por defecto, el logotipo. Puedes fijar otra por defecto en Settings > Default Social Share Image.

Odoo comprime las imágenes que subes y las convierte a WebP; el texto alternativo se escribe en el campo Description de cada imagen5. Si cambias el nombre de un producto o el título de un artículo del blog, Odoo cambia la URL y crea un 301 desde la anterior5.

¿Cómo evita Odoo el contenido duplicado en la tienda?

Con tres mecanismos que salen de su código:

  • Canonical sin parámetros. Los filtros por atributo, la ordenación y la búsqueda de la tienda añaden parámetros a la URL; el canonical los quita y apunta a la categoría o a /shop2. Para Google, el canonical es una señal fuerte a la hora de elegir la URL representativa entre duplicados6.
  • noindex en la paginación. La página 2 y siguientes de un listado paginado llevan noindex4. Google pide que cada página de la serie tenga su propia URL y su canonical, y Odoo los da, pero estas páginas quedan fuera del índice7. Los productos se descubren igualmente por el sitemap, que los incluye todos.
  • Indexed. En Website > Site > Properties, el interruptor Indexed quita una página estática de los resultados y del sitemap. En las páginas dinámicas (fichas de producto, artículos) todavía no existe5.

Para las redirecciones manuales, Website > Configuration > Redirects admite 301, 302, 404 y 3088. El 308 «Redirect / Rewrite» sirve para renombrar una página dinámica, por ejemplo /shop a /tienda. En Odoo 19 ese menú solo aparece con el modo desarrollador9.

¿Cómo se edita el robots.txt de Odoo?

Odoo genera el robots.txt con una plantilla y añade al final lo que escribas en Website > Configuration > Settings > Tracking & SEO > Edit robots.txt5. Ese botón solo se ve con el modo desarrollador activado: Settings > Developer Tools > Activate the developer mode, o ?debug=1 en la URL1011. Con el dominio configurado y la dirección correcta, la parte fija es esta4:

User-agent: *
Sitemap: https://www.ejemplo.es/sitemap.xml
Disallow: /web/login
Disallow: /*/web/login
Disallow: /web/signup
Disallow: /*/web/signup
Disallow: /web/reset_password
Disallow: /*/web/reset_password
Disallow: /my/
Disallow: /*/my/*

##############
#   custom   #
##############

Lo que escribes en el editor se pega después de esas líneas. Esta es una política razonable para los rastreadores de entrenamiento:

# Entrenamiento de modelos: vetarlo no te saca de ChatGPT ni de Google
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: Google-Extended
User-agent: CCBot
Disallow: /

Lo comprobamos con Protego, que aplica las reglas de Google, sobre el fichero completo: las fichas, las categorías y el blog quedan abiertos para Googlebot, OAI-SearchBot y Claude-SearchBot; el inicio de sesión y /my/ quedan cerrados; GPTBot, ClaudeBot y CCBot quedan fuera. El error que conviene evitar: una línea suelta como Disallow: /shop sin su propio User-agent se suma al grupo de User-agent: * y cierra la tienda a todos, buscadores de IA incluidos. Quienes deciden si ChatGPT o Claude te citan son OAI-SearchBot y Claude-SearchBot; Google-Extended no afecta a Google Search121314.

¿Para qué sirve el llms.txt de Odoo 20?

Odoo 20 añade junto al anterior el botón Edit llms.txt: lo que escribas se publica en /llms.txt como texto plano, y si lo dejas vacío esa dirección devuelve un 4041015. Es opcional y barato, pero ningún buscador de IA ha documentado que lo lea, y Google no lo usa. La guía de llms.txt resume qué dicen los datos.

¿Qué datos estructurados genera Odoo?

La documentación de Odoo habla todavía de microdatos, pero el código de Odoo 19 y 20 genera JSON-LD en las fichas de producto1617. En Odoo 19, con eCommerce instalado, cada página lleva además un Organization con el nombre de la empresa18. En Odoo 20 cada página lleva un único bloque con Organization (nombre del sitio web, URL y logotipo), BreadcrumbList y el tipo de la página19. En una ficha, estos son los datos y de dónde salen16:

Propiedad
name, image, url
Campo de Odoo
Nombre, imagen principal y URL del producto
Propiedad
offers.price y priceCurrency
Campo de Odoo
Precio de la tarifa del sitio, con impuestos si así se muestran
Propiedad
offers.availability
Campo de Odoo
Solo Odoo 20 y productos con inventario: InStock u OutOfStock
Propiedad
sku
Campo de Odoo
Referencia interna
Propiedad
gtin
Campo de Odoo
Código de barras
Propiedad
description
Campo de Odoo
Meta descripción o descripción de venta
Propiedad
aggregateRating
Campo de Odoo
Valoraciones, si las reseñas de producto están activadas

Un producto con variantes sale como ProductGroup con un Product por variante17. Faltan la marca, el envío y la política de devoluciones, que Google recomienda en las fichas de comercio20. Si los necesitas, hay que añadirlos con un módulo propio o del Odoo Apps Store. Lo que pide Google en cada propiedad está en la guía de schema Product.

¿Cómo se añaden HSTS y otras cabeceras de seguridad?

Los ajustes del sitio web no tienen ninguna opción de cabeceras10. En Odoo Online o Odoo.sh, la vía es un proxy como Cloudflare delante de tu dominio, que la propia documentación de Odoo usa para redirigir el dominio desnudo3; la guía de cabeceras de seguridad con Cloudflare trae las reglas. En una instalación propia, la documentación de despliegue propone Nginx delante de Odoo con proxy_mode = True en la configuración de Odoo21. Este bloque parte de su ejemplo; lo validamos con nginx -t en la imagen oficial nginx:stable:

server {
    listen 443 ssl;
    server_name www.ejemplo.es;
    # ssl_certificate y ssl_certificate_key de tu certificado

    location / {
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_pass http://odoo;

        # Un día para empezar; súbelo cuando todo funcione por https
        add_header Strict-Transport-Security "max-age=86400" always;
        add_header Referrer-Policy "strict-origin-when-cross-origin" always;
        add_header X-Content-Type-Options "nosniff" always;
    }

    gzip on;
    gzip_types text/css text/plain text/xml application/xml application/json application/javascript;
}

El ejemplo oficial usa max-age de un año con includeSubDomains desde el primer día21. Empieza con un día: HSTS obliga al navegador a usar https durante todo ese tiempo, y con includeSubDomains también en cada subdominio22.

Cómo comprobarlo

  • Dominio y canonical: abre https://miempresa.odoo.com/robots.txt; debe decir Disallow: /. En tu dominio, el código fuente de una ficha filtrada debe llevar un canonical sin parámetros.
  • Sitemap: abre /sitemap.xml y envíalo en Search Console.
  • Datos estructurados: pasa una ficha por la Prueba de resultados enriquecidos.
  • Cabeceras: curl -I https://www.ejemplo.es/ y el HTTP Observatory de Mozilla.

Qué hace SmoothSeen con esto

SmoothSeen revisa en una página de tu web lo que configura esta guía: robots.txt, sitemap, canonical y noindex, títulos y descripciones, datos estructurados, HTTPS y la redirección a https, y las cabeceras de seguridad con el HTTP Observatory de Mozilla. En la parte de IA comprueba qué rastreadores permite tu robots.txt, separando búsqueda de entrenamiento, si hay llms.txt y si el servidor responde 403 a algún rastreador mientras sirve la página a un navegador.

Qué hacer esta semana

Comprueba que el campo Domain tiene tu dirección con https:// y www, y que miempresa.odoo.com/robots.txt responde Disallow: /. Después rellena la referencia interna y el código de barras de tus productos más vendidos, porque salen tal cual en el JSON-LD. Para ver cómo queda tu tienda medida, haz una auditoría de tu tienda online con SmoothSeen.

Preguntas frecuentes

¿Por qué Google indexa mi web de Odoo en la dirección odoo.com?

Porque el campo Domain de los ajustes del sitio web está vacío o no coincide con tu dominio. Cuando lo rellenas, Odoo responde Disallow: / en el robots.txt de la dirección original y marca sus páginas con noindex. Lo ya indexado tarda en desaparecer; puedes acelerar la retirada desde Search Console.

¿Dónde está el botón para editar el robots.txt en Odoo?

En Website > Configuration > Settings, en la sección Tracking & SEO, pero solo con el modo desarrollador activado; por eso muchos usuarios no lo encuentran. Actívalo en Settings > Developer Tools o añadiendo ?debug=1 a la URL del panel. Lo que escribas se añade al final del robots.txt que genera Odoo, no lo sustituye.

¿Odoo marca las fichas de producto con schema Product?

Sí, con JSON-LD: nombre, imagen, precio, moneda, referencia interna como SKU y código de barras como GTIN; Odoo 20 añade la disponibilidad en productos con inventario y las valoraciones si activas las reseñas. No incluye marca, gastos de envío ni política de devoluciones, que Google recomienda para las fichas de comercio.

¿Puedo poner cabeceras de seguridad en Odoo Online?

No desde Odoo: los ajustes del sitio web no tienen esa opción y en Odoo Online no administras el servidor web. La alternativa es poner un proxy como Cloudflare delante de tu dominio y añadir allí HSTS, Referrer-Policy y el resto. Si tienes Odoo en tu propio servidor, añádelas en el Nginx que va delante.

Fuentes

  1. 1Standard and extended support, documentación de Odoo 20.0, consultada el 09-10-2026.
  2. 2addons/website/models/website.py, funciones _get_canonical_url e _is_indexable_url, repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  3. 3Domain names, documentación de Odoo 20.0, consultada el 09-10-2026.
  4. 4addons/website/views/website_templates.xml (cabecera, noindex y plantilla robots), repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  5. 5Search Engine Optimization (SEO), documentación de Odoo 20.0, consultada el 09-10-2026.
  6. 6How to specify a canonical URL with rel="canonical" and other methods, Google Search Central, actualizada el 10-07-2026.
  7. 7Pagination, incremental page loading, and their impact on Google Search, Google Search Central, actualizada el 10-12-2025.
  8. 8Pages, documentación de Odoo 20.0, consultada el 09-10-2026.
  9. 9addons/website/views/website_rewrite.xml, repositorio oficial odoo/odoo, rama 19.0, consultado el 09-10-2026.
  10. 10addons/website/views/res_config_settings_views.xml, repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  11. 11Developer mode (debug mode), documentación de Odoo 20.0, consultada el 09-10-2026.
  12. 12Overview of OpenAI Crawlers, OpenAI, consultada el 09-10-2026.
  13. 13Does Anthropic crawl data from the web, and how can site owners block the crawler?, Anthropic, actualizada el 07-04-2026.
  14. 14AI features and your website, Google Search Central, actualizada el 10-12-2025.
  15. 15addons/website/controllers/main.py, ruta /llms.txt, repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  16. 16addons/website_sale/models/product_product.py, función _prepare_jsonld_vals, repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  17. 17addons/website_sale/models/product_template.py, repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  18. 18addons/website_sale/views/templates.xml, repositorio oficial odoo/odoo, rama 19.0, consultado el 09-10-2026.
  19. 19addons/website/models/mixins.py, clase WebsiteStructuredDataMixin, repositorio oficial odoo/odoo, rama 20.0, consultado el 09-10-2026.
  20. 20Merchant listing (Product, Offer) structured data, Google Search Central, actualizada el 08-09-2026.
  21. 21System configuration (Deploying Odoo), documentación de Odoo 20.0, consultada el 09-10-2026.
  22. 22Strict-Transport-Security header, MDN Web Docs, actualizada el 11-09-2026.

Cómo citar este artículo

SmoothSeen. (2026, 7 de octubre). SEO en Odoo Website y eCommerce: dominio, robots.txt, llms.txt y schema. https://smoothseen.com/es/blog/odoo-seo-website/

Quién lo escribe

SmoothSeen es una herramienta de auditoría web que mide el posicionamiento en buscadores y en asistentes de IA y entrega informes con la marca de la agencia.

Este blog es de SmoothSeen: cuando un artículo habla del producto, lo hace sabiendo que es el nuestro. Las cifras de terceros enlazan a su fuente original.

Historial de cambios

  • Primera versión.

Sigue leyendo

SEO en Odoo 19 y 20: Website y eCommerce