Skip to main content
iVentureTeam

Odoo 20 Website Release Notes

All 60 Website changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 33Enhancement 25Refactoring 1Performance 1In Community 57Enterprise only 3
Type
Edition

Change 1 of 60

Accented characters in URLs

EnhancementCommunity + Enterprise

Website URLs now support Unicode normalization, allowing the use of accented characters.

Official Odoo 20 release note

In plain words

Page URLs can now keep accented letters. When you create a page called "Café Crème Brûlée", its URL becomes /café-crème-brûlée instead of an ASCII-only slug, and the URL is Unicode-normalized so the same address always matches.

Website > Site > PagesThe page created with an accented title keeps its accents in the URL: /café-crème-brûlée.

Where to find it

  1. Website > Site > New Page, name it "Café Crème Brûlée".
  2. Website > Site > Pages, look at the Page URL column.

For users

New pages and redirects can use accented URLs that match the page title in languages like French or Spanish.

For developers

The slug and URL helpers in ir_http and website keep non-ASCII letters and apply Unicode normalization instead of stripping accents.

Upgrading from Odoo 19

Existing URLs are not rewritten. Only pages created or renamed after the upgrade get accented URLs.

Change 2 of 60

Age verification popup

New featureCommunity + Enterprise

Configure a popup to ask a website visitor to verify their age; access to the website is blocked if the minimum age is not respected.

Official Odoo 20 release note

In plain words

There is a new "Age Verification Popup" block in the Contact & Forms group. Visitors confirm their age with Yes/No buttons, a birth year or a full birth date. With a birth year or date you set a Minimum Age (18 by default), and the page behind can be blurred. A visitor who is too young sees a rejection message and cannot use the site.

Website > Edit > Blocks > Contact & Forms > Age Verification PopupThe popup options: Confirmation by Birth Date, the Minimum Age (18 years), the placeholder and the background blur toggle.

Where to find it

  1. Website > Edit, open the Blocks tab.
  2. Drag Contact & Forms onto the page and search for "Age Verification".
  3. Insert the popup, click it, open Style > Age Verification Popup and set Confirmation to Birth Date.

For users

Shops selling alcohol, tobacco or other age-restricted goods can add an age gate without custom code.

For developers

New snippet s_age_verification_popup built on s_popup, with data-min-age and data-blur-background attributes read by the age_verification_popup interaction.

Upgrading from Odoo 19

Nothing to migrate. Custom age-gate modules can be replaced by this block.

Change 3 of 60

AI Website Assistant

EnhancementEnterprise only

Part 1

Multiple improvements have been made to the AI Website Assistant: The AI Website Assistant can help you vibe code your website by choosing and editing snippets, adding images from Unsplash or generating them, retrieving content on the web, and more.

Official Odoo 20 release note

In plain words

The website editor has an AI button that opens the "AI Website Assistant" chat. You describe what you want and it picks and edits building blocks, adds Unsplash or generated images and can look things up on the web.

Website > Edit > AIThe AI Website Assistant chat opened from the website editor.

Part 2

Ask the AI Website Assistant to create new webpages.

Official Odoo 20 release note

In plain words

The assistant can create new pages. The chat offers a ready "Help me create a new page" prompt, and the agent has a "Create Page" tool.

Website > Edit > AIThe ready "Help me create a new page" prompt in the assistant chat.

Part 3

When creating or editing a webpage, ask the AI Website Assistant to draw inspiration from other websites, use your database's records, such as products or events, or add interactive elements, such as counters, toggles, tabs, or animations.

Official Odoo 20 release note

In plain words

The Website Builder agent has skills to search your database (products, events and other records), search the web and read other sites for inspiration, and a "Website JavaScript" skill for interactive elements.

AI > Agents > Website Builder > SkillsThe Website Builder agent: image generation, web search, database search and Website JavaScript skills.

Part 4

Ask the AI Website Assistant to create or edit webforms.

Official Odoo 20 release note

In plain words

A dedicated "Webforms" skill lets the assistant create, edit and wire website forms so they really send emails or create records.

AI > Configuration > Skills > WebformsThe Webforms skill used when the assistant creates or edits a form.

Part 5

Ask the AI Website Assistant to make changes to your menu, such as creating, renaming, moving/nesting, reordering, or deleting menu items.

Official Odoo 20 release note

In plain words

An "Edit Website Menus" tool lets the assistant create, rename, move, nest, reorder or delete menu items.

AI > Configuration > Skills > Customize WebsiteThe "Edit Website Menus" tool of the Customize Website skill.

Part 6

Use the "Select Elements" option to tell the AI Website Assistant which block you are commenting on.

Official Odoo 20 release note

In plain words

"Select Elements" (in the chat's + menu) lets you click blocks on the page. Each selected block shows as a chip above the message box, so the assistant knows which part you mean.

Website > Edit > AI > + > Select ElementsThe "About us" footer column was picked with Select Elements and shows as a chip above the message box.

Part 7

The AI Website assistant is now better at creating original designs and uses a more diverse range of blocks.

Official Odoo 20 release note

In plain words

The assistant's instructions now ask it to choose a design direction and layout per page instead of reusing the same hero, columns, text and call-to-action pattern, which leads to more original pages with more varied blocks.

AI > Configuration > Skills > Customize WebsiteThe design direction rules that push the assistant toward original layouts.

Where to find it

  1. Website > Edit, click the AI button in the editor toolbar.
  2. Use the ready prompts or type a request.
  3. Use + > Select Elements and click a block to point the assistant at it.
  4. AI > Agents > Website Builder shows the skills; AI > Configuration > Skills shows each skill's tools.

For users

Pages, forms and menus can be built or changed by chatting with the AI Website Assistant inside the editor.

For developers

The assistant is an ai.agent (Website Builder) with ai.skill records whose tools are ir.actions.server records (Create Page, Edit Website Menus, Scrape Website Pages, Set Form Action and others). Custom tools can be added the same way.

Upgrading from Odoo 19

Enterprise only, installed automatically with ai and website. Using it consumes AI credits.

  • No prompt was sent: generating pages needs AI credits, so the shots show the tools and chat before a request.

Change 4 of 60

AI-generated content indicator

New featureEnterprise only

Building blocks that have been generated or modified by the AI Website Assistant are indicated in the Website editor.

Official Odoo 20 release note

In plain words

When the AI Website Assistant creates or changes a block, the block is flagged. Selecting it in the editor shows a small "AI" mark next to the block name in the Style tab. Its tooltip warns that standard options may be limited on AI-customized blocks.

Website > Edit > StyleThe "AI" mark next to the block name shows the block contains AI content. Its tooltip cannot be captured.

Where to find it

  1. Let the AI Website Assistant edit a block, or open a page that has one.
  2. Website > Edit, click the block and open the Style tab.

For users

Editors can tell at a glance which blocks were written by the AI assistant.

For developers

AI edits set data-contains-ai-content="true" on the edited block; ir.ui.view allows this root attribute and the OptionsContainer template shows the badge when the element matches it.

Upgrading from Odoo 19

Nothing to migrate.

  • Demo: the page /cb-web-a-demo has a text block carrying the same data-contains-ai-content flag the assistant writes, since no AI credits were used.

Change 5 of 60

Animated number building block

New featureCommunity + Enterprise

Use the "Animated Number" building block to highlight key metrics such as sales figures, customer counts, or performance indicators.

Official Odoo 20 release note

In plain words

"Animated Number" is a new inner block. It shows a title (for example "Clients") and a number that counts up from a start value to an end value when the visitor scrolls to it. Options set the alignment, the title position, the values and the animation.

Website > Edit > Blocks > Inner Content > Animated NumberThe Animated Number block dropped under a text: the title "Clients" and the counted value 1000.

Where to find it

  1. Website > Edit, open the Blocks tab.
  2. Scroll to Inner Content and drag Animated Number into a section.

For users

Key figures such as sales, customers or projects can be shown with a counting animation, anywhere inside a section.

For developers

New snippet s_animated_number with data-start-value and data-end-value, animated by the animated_number interaction.

Upgrading from Odoo 19

Nothing to migrate.

  • Demo page /cb-web-a-demo was used; the change was discarded.

Change 6 of 60

Appointment page layout

EnhancementEnterprise only

Choose whether the Appointment page displays appointments as a list, using cards, or using pictures.

Official Odoo 20 release note

In plain words

On the /appointment page, the editor's Style tab has an "Appointments Page" option with a Layout choice: List (rows with an image on the side), Cards or Pictures.

Website > /appointment > Edit > Style > Appointments PageThe Layout options for the appointment page: List, Cards and Pictures.

Where to find it

  1. Website > Go to /appointment and click Edit.
  2. Click the appointment list, open Style > Appointments Page > Layout.

For users

Pick how appointment types are presented to visitors without custom templates.

For developers

The layout is stored as two optional views, website_appointment.opt_appointments_index_cards and opt_appointments_index_pictures; the index template reads them with is_view_active().

Upgrading from Odoo 19

Custom inherits of the appointment index template should be checked against the new card and picture markup.

Change 7 of 60

Banners

New featureCommunity + Enterprise

Add a banner above a website's header to inform visitors about promotions, holidays, etc.

Official Odoo 20 release note

In plain words

The header options have a new "Show Disclaimer" switch. Turning it on adds a slim banner above the header (by default it reads "Free Returns and Standard Shipping") whose text you can edit like any other block, so visitors see promotions, holiday hours or other notices on every page.

Website > Edit > Style > Header > Show DisclaimerThe disclaimer banner shown above the header after switching on Show Disclaimer.

Where to find it

  1. Website > Edit, click the header and open the Style tab.
  2. Under Header, turn on Show Disclaimer.
  3. Edit the banner text directly in the page.

For users

A site-wide announcement bar can be switched on from the header options without adding a block to every page.

For developers

The banner is the optional view website.option_header_disclaimer (an s_headline block inserted through the website.placeholder_header_disclaimer hook in the layout) toggled by the websiteConfig action.

Upgrading from Odoo 19

Nothing to migrate. Custom header templates should keep the placeholder_header_disclaimer call if they want the option.

Change 8 of 60

Blurred headers

New featureCommunity

Apply a blur effect on transparent background headers.

Official Odoo 20 release note

In plain words

When a header uses a transparent or semi transparent background (Header Position set to Over The Content), a new Blur slider appears next to the background color. Raising it applies a CSS backdrop blur to the header band so the page content scrolling underneath shows through as a frosted glass effect instead of a flat tint.

Website > Edit > Style > Header > BlurA header with Over The Content position, a translucent background and Blur applied, showing the page image behind it softened.

Where to find it

  1. Website > Edit, click the header and open the Style tab.
  2. Under Header, set Header Position to Over The Content.
  3. Give the header a semi transparent background color, then drag the Blur slider.

For users

Headers placed over the page content can now look like frosted glass instead of a plain semi transparent bar.

For developers

The blur amount is stored as a background-filter style applied through the header template option plugin; it only has a visible effect once the header background color has some transparency and the header overlays content.

Upgrading from Odoo 19

Nothing to migrate. Existing headers keep their current background settings; the Blur control simply appears alongside them.

Change 10 of 60

Card and column anchors

New featureCommunity

Add anchors to cards and columns for easier navigation, especially on mobile devices.

Official Odoo 20 release note

In plain words

Cards and columns now show the same chain link icon that sections already had. Clicking it (from the Card panel's header row) creates an id on that element if it does not have one yet and copies a #id link to it, so the card or column can be linked to directly from menus, buttons or other pages.

Website > Edit > Style > Card > link iconThe Card options panel with the anchor (link) icon used to create and copy a link to this card.

Where to find it

  1. Website > Edit, click a card so the Card panel opens in the Style tab.
  2. Click the small link icon next to the Card title.
  3. The card gets an id and the #id link is copied, confirmed by a notification.

For users

Individual cards and columns can be given their own shareable in page link, which is useful for long pages and for jumping straight to one card on mobile.

For developers

The button is added by AnchorPlugin.getOptionsContainerTopButtons() for any element matching the anchor_allowed_selectors resource, which addons/website/static/src/builder/plugins/options/card_option_plugin.js extends with ".s_card"; clicking it calls createOrEditAnchorLink(), which sets the element id and copies the link, then shows a confirmation notification with an Edit action.

Upgrading from Odoo 19

Nothing to migrate. This only adds a button; it does not change existing ids or links.

  • The click also opens a confirmation toast ("Anchor copied to clipboard"); in this headless test browser that toast's own bounding box measures 0x0 pixels even though its text and visibility are correct (confirmed by reading its DOM node directly), so it could not be boxed on screen. The screenshot instead boxes the Card panel's anchor icon itself, which is the actual control the feature adds.

Change 11 of 60

Card enhancements

EnhancementCommunity

Partly confirmed in the Odoo 20 source code. Parts of this note could not be traced.

Part 1

Set a card's animation to be triggered "On Hover."

Official Odoo 20 release note

In plain words

In the Style panel the Animation dropdown offers an "On Hover" trigger, but only when the selected element is an actual image (canHaveHoverEffect() in image_hover_plugin.js requires editingElement.tagName === "IMG"), so for a card this means selecting its cover image rather than the card container, which only offers On Appearance and On Scroll. Comparing the odoo19 and odoo20 sources shows this On Hover trigger and its Overlay, Zoom, Outline and Mirror Blur effects already existed for images in Odoo 19, so this specific trigger is not new in Odoo 20; what verifiably is new is the sibling clickable card capability in the second bullet, delivered in the same card focused change.

Website > Edit > Style > Image > Animation > On HoverA card's cover image with Animation set to On Hover and an Overlay effect selected.

Part 2

Make an entire card clickable.

Official Odoo 20 release note

In plain words

A new "Make it clickable" toggle appears directly on the Card panel. Turning it on reveals a Your URL field; once a link is set, clicking anywhere on the card in the published page navigates to that URL, so the whole card becomes a single click target instead of only its title or button.

Website > Edit > Style > Card > Make it clickableA card with Make it clickable turned on and a URL entered in Your URL.

Where to find it

  1. Website > Edit, click a card's image, open Style, and set Animation to On Hover to pick a hover effect.
  2. Click elsewhere on a different card (not its image) to select the Card panel, then turn on Make it clickable and fill in Your URL.

For users

Whole cards can be made clickable without wrapping them in a link, and a card's own image can still get a hover animation the same way any image can.

For developers

Make it clickable is implemented by clickable_card_option_plugin.js adding a .o_card_clickable-ish behavior via the clickable_card.js interaction, separate from AnimateOptionPlugin/ImageHoverPlugin which gate On Hover to <img> elements only.

Upgrading from Odoo 19

Nothing to migrate. Both are opt in controls on top of the existing s_card structure.

Change 13 of 60

Color palette preview

New featureCommunity

Preview the selected color palette on demo content.

Official Odoo 20 release note

In plain words

Opening the Theme tab's Colors panel now shows a small eye icon. Clicking it opens a Colors Preview dialog rendering every saved color preset (and general UI elements like inputs and status badges) on the same demo content, so a palette's real look can be checked before applying it to the live site.

Website > Edit > Theme > Colors > Colors previewThe Colors Preview dialog showing all five color presets and UI elements rendered on demo content.

Where to find it

  1. Website > Edit, open the Theme tab.
  2. Click the Colors row to expand it.
  3. Click the eye (Colors preview) button in its top bar.

For users

Color presets can be compared side by side on realistic demo content before picking one for the whole website.

For developers

The eye button lives in the Colors BuilderSlidingPanel's sliding_panel_top_options slot and toggles a Dialog whose body is an iframe of the new /website/theme_colors_preview route.

Upgrading from Odoo 19

Nothing to migrate. This adds a preview only; it does not change how color presets are stored or applied.

Change 14 of 60

Column content selection

New featureCommunity

Press CTRL + A inside a website column to instantly select its entire content.

Official Odoo 20 release note

In plain words

Pressing Ctrl+A (or Cmd+A) while editing text inside a website building block now selects only the content of the nearest structural container, such as a column in a row, instead of jumping straight to the whole page or doing nothing. A dedicated keydown listener computes the deepest editable start and end position inside that container and selects between them.

Website > Edit, click text in a column, Ctrl+AA column's heading and paragraph both highlighted after pressing Ctrl+A inside it, while the other columns stay unselected.

Where to find it

  1. Website > Edit.
  2. Click inside a paragraph in one column of a multi column block.
  3. Press Ctrl+A (Cmd+A on Mac).

For users

Selecting an entire column's text (to copy it, delete it or apply formatting to all of it at once) is now one shortcut instead of a manual click and drag.

For developers

BuilderSelectionRestrictionPlugin listens for control+a on the editable document and stops it from crossing elements matched by its uncrossable_element_selector resource (blockquote, form, div, section, .row by default), which website's own plugin extends for website specific structures.

Upgrading from Odoo 19

Nothing to migrate. This is a new editor only interaction; it does not change stored content.

Change 15 of 60

Connection shape color

EnhancementCommunity

Connection shapes infer the correct background color from their context.

Official Odoo 20 release note

In plain words

Applying a Connections background shape to a section now reads the section's own background and neighbouring colors and colors the shape's dark and light fill areas to match, instead of using fixed default colors that could clash with the surrounding design.

Website > Edit > Style > Shape > ConnectionsA section with a Connections shape applied, its dark and light areas matching the section's own background color.

Where to find it

  1. Website > Edit, select a section (for example a text block).
  2. In Style, open Shape and choose a shape from the Connections group.
  3. Note the shape's colors match the section's own background instead of a fixed default.

For users

Connections style shape dividers blend into the page automatically instead of needing their colors adjusted by hand after being added.

For developers

WebsiteBackgroundShapeOptionPlugin calls backgroundShapeOption.handleBgColorUpdated() whenever the element's background changes, which recomputes the shape's color variables from the current background and text colors.

Upgrading from Odoo 19

Nothing to migrate. Shapes already placed are recolored the same way the next time their background is touched; this does not change the shape files themselves.

Change 16 of 60

Cookies

EnhancementCommunity

Part 1

A "Close" button has been added to the cookie bar.

Official Odoo 20 release note

In plain words

The cookie consent bar shown to visitors now has its own small close (x) button, so it can be dismissed outright without first picking Only essentials or I agree.

Front end page (visitor view)The cookie bar with its new close button on the right.

Part 2

Set any webpage as the cookie policy page.

Official Odoo 20 release note

In plain words

In Website settings, the Cookie policy page field can now be pointed at any page of the website instead of only a fixed built in one, so an existing legal or policy page can be reused as the site's cookie policy page.

Website > Configuration > Settings > Cookies BarThe Cookie policy page selector, limited to pages that belong to this website.

Where to find it

  1. Website > Configuration > Settings, turn on Cookies Bar.
  2. Open any page as a visitor to see the bar and its new close button.
  3. In the same settings, set Cookie policy page to any existing page of the site.

For users

Visitors can close the cookie notice directly, and the policy link it shows can point at whichever page the company actually uses for its cookie policy.

For developers

The close button is a shared website.cookies_bar.close_button template included by all three bar layouts; the new cookie_policy_id many2one on Website settings is domain restricted to that website's own pages.

Upgrading from Odoo 19

Nothing to migrate. A site that never sets a cookie policy page keeps its previous behaviour.

Change 17 of 60

Countdown snippets

EnhancementCommunity

Countdown snippets (both the block and the inner content) have been improved.

Official Odoo 20 release note

In plain words

The Countdown block and its smaller inner content version now share more of the same options: a new Title Position control lets the heading above the timer (for example "Sale begins in:") sit above the numbers, beside them, or be hidden, alongside the layout, display and colour options the countdown already had, so the full block and the inner element behave more consistently with each other.

Website > Edit > Style > Countdown > Title PositionThe Countdown panel with the new Title Position control.

Where to find it

  1. Website > Edit, click a Countdown block.
  2. In Style, open the Countdown panel.
  3. Use Title Position to move or hide the countdown's heading.

For users

The countdown timer's title can be repositioned or hidden, and the same countdown options now apply whether it is used as a full block or dropped in as inner content.

For developers

countdown_option.xml now exposes a Title Position row alongside the merged layout and template options that used to be split between the block and inner-content versions.

Upgrading from Odoo 19

Nothing to migrate. Existing countdown blocks keep their current title and layout until these options are changed.

Change 18 of 60

Customizable portal cards

New featureCommunity

Customize the cards on the portal homepage with the website editor.

Official Odoo 20 release note

In plain words

The account summary cards on the customer portal homepage (My Account, such as Orders, Invoices or Tickets) can now be restyled from the website editor: opening the portal page in Edit mode exposes Background Color, Gap and Border options for these cards, which were plain, fixed links before.

My Account > Edit > Style > Portal CardsThe new Background Color and Gap options for the portal homepage's account cards.

Where to find it

  1. Log in and open My Account (/my) in the website editor (Edit).
  2. Click one of the account cards, such as Orders or Invoices.
  3. In Style, use Background Color, Gap and Border to restyle all the cards.

For users

The portal homepage's account cards can be given the site's own colours and spacing instead of always looking like the default theme.

For developers

portal_option.xml registers builder options on .o_portal_index_card > a, which did not exist as an editable target in odoo19; the portal page itself still comes from the portal module's own templates.

Upgrading from Odoo 19

Nothing to migrate. Cards keep their current look until these new options are used.

Change 19 of 60

DOM elements

New featureCommunity

Designers can now target DOM elements through namespaces. A class is added on body tags, specific to each page, e.g., o_website_sale_products​ on category product pages.

Official Odoo 20 release note

In plain words

Every frontend page now automatically gets extra CSS classes on its <body> tag: one built from the QWeb template used to render the page (for example the website_sale.products template becomes the class o_website_sale_products on the shop's category and product listing pages), and on website pages a second one built from the page's own URL. Designers and developers can use these to target one page, or every page of one type, with CSS or JavaScript, without editing that page's own template.

Browser > View Page Source > /shopThe rendered page's own <body> tag, now carrying the automatic o_website_sale_products class.

Where to find it

  1. Open any Website or portal page, for example the Shop.
  2. View the page's source (the browser's View Page Source).
  3. Look at the <body> tag's class attribute for the new o_ prefixed class.

For users

No direct visual change; pages simply carry extra, predictable classes that a custom stylesheet or script can target.

For developers

portal.frontend_layout now sets classname_from_template from the response_template xmlid (dots replaced with underscores, "o_" prefix) and website.layout adds a second classname_from_mainobject from the page's own URL, both appended to the existing body_classname chain that individual templates used to set entirely by hand.

Upgrading from Odoo 19

Nothing to migrate, but a custom theme that already adds its own body classes with the same names as an auto generated one should check for clashes.

Change 20 of 60

Donation snippet customization

EnhancementCommunity

Partly confirmed in the Odoo 20 source code. Parts of this note could not be traced.

Customize the "Donation" snippet to collect legally required information if needed.

Official Odoo 20 release note

In plain words

The Donation snippet is now submitted through the same cart and checkout flow as any other purchase in the Online Store, instead of posting to its own separate mini form, so a donation is collected using the store's regular checkout fields (name, address, payment). Its Style panel still offers the pre filled amounts, descriptions and a custom amount option; a distinct toggle specifically described as collecting "legally required information" could not be found among these options, so that part is not verified from the supplied source code.

Website > Edit > Style > Donation FormThe Donation Form options panel; submissions from this block now go through the standard eCommerce checkout.

Where to find it

  1. Website > Edit, add or select a Donation block.
  2. Open Style to see its pre-filled amounts and Donation Form options.
  3. Submitting the form now runs through the regular shop checkout.

For users

Making a donation now goes through the same checkout steps as buying a product, including whatever billing details the shop already asks for.

For developers

s_donation now posts into website_sale's own cart and checkout controllers (controllers/donation.py) instead of a standalone endpoint; DonationOptionPlugin still manages the block's pre-filled amounts and descriptions from the Style panel.

Upgrading from Odoo 19

A donation page built for the old standalone form should be reviewed after upgrading, since submissions now flow through the shop's checkout instead.

  • The release note's "legally required information" toggle was not found as a distinct option in the Donation Form panel; only the checkout integration itself was verified in the source.

Change 21 of 60

Dropzones and overlays

EnhancementCommunity

Dropzones and overlays in the Website builder have been updated to be more modern and discrete.

Official Odoo 20 release note

In plain words

Dragging a new block onto the page now shows a softer, striped drop zone band in a muted theme colour instead of a plain solid block, and the selection outline drawn around a block being edited is similarly more subtle. It is a visual refresh of the editor's own drag and drop feedback, not a change to any block's content.

Website > Edit > Blocks, mid dragA block being dragged onto the page, showing the new striped drop zone band above the content.

Where to find it

  1. Website > Edit.
  2. Open the Blocks tab and start dragging any block onto the page.
  3. Note the striped drop zone band that appears before releasing it.

For users

Dragging blocks around the page feels less clunky, with a lighter, striped drop zone instead of a heavy solid highlight.

For developers

The visual styling lives in drop_zone_plugin.edit.scss and builder_overlay.scss; no dropzone_selectors logic changed, only how a drop target and the current selection are drawn.

Upgrading from Odoo 19

Nothing to migrate. This only changes the editor's own visuals, not saved page content.

Change 22 of 60

Dynamic "Today" value

New featureCommunity

Date and datetime fields on Website forms now include adynamic "Today" value.

Official Odoo 20 release note

In plain words

A Date or Datetime field on a Website form can now be given a requirement such as "Is date after", and the comparison date can be set with a single click to "Set today as a relative date" instead of typing a fixed calendar date, so the requirement always compares against the day the visitor actually submits the form rather than the day the form was built.

Website > Edit > Style > Field > RequirementA date field's requirement set to "Is date after" with its comparison date set to the dynamic value Today.

Where to find it

  1. Website > Edit, select a Date field on a form.
  2. In Style, set Requirement to Is date after (or another date comparison).
  3. Click the small calendar/today icon to set the comparison date to Today.

For users

A form requirement like "must be after today" keeps working correctly however long the form stays live, instead of silently comparing against whatever fixed date was originally typed in.

For developers

BuilderDateTimePicker adds a "Set today as a relative date" button gated by an allowRelativeDate prop, which form_option.xml only passes to a date field's Requirement/Conditions row, not to its plain Default Value row.

Upgrading from Odoo 19

Nothing to migrate. Existing fixed dates on form requirements are left as they are until this is used.

Change 23 of 60

Dynamic carousels

New featureCommunity + Enterprise

Dynamic carousel building blocks are now available for all modules, including Blogs, Events, and Appointments.

Official Odoo 20 release note

In plain words

A ready made carousel of Blog posts is now available as its own building block from the Blocks panel, alongside similar dynamic carousels for other record types such as Events and Appointments, so a rotating showcase of live records can be dropped onto any page instead of only appearing on that app's own index page.

Website > Edit > Blocks > Blogs > Blog Posts CarouselThe new Blog Posts Carousel block added to a page, with its Style options open.

Where to find it

  1. Website > Edit, open the Blocks tab.
  2. Open the Blogs category and drag Blog Posts Carousel onto the page.
  3. In Style, the Blog Posts panel controls which posts and how many are shown.

For users

A rotating carousel of recent blog posts (or events, or appointment types) can be added to any page, such as the homepage, not only the module's own listing page.

For developers

s_blog_posts_carousel.xml is a new snippet template with its own dynamic_snippet_blog_posts_carousel_option.js; Events and Appointments (the appointment app, Enterprise) gained equivalent dynamic carousel snippets in the same effort.

Upgrading from Odoo 19

Nothing to migrate. This only adds a new block to drag onto pages.

Change 24 of 60

Events, Jobs, and Blog pages

EnhancementCommunity

On Events, Jobs, and Blog pages where the sidebar is enabled, the "Follow Us" and "Share" sections have been replaced with standard "Social Media" and "Share" snippets that can be easily customized.

Official Odoo 20 release note

In plain words

On Blog posts (and similarly on Events and Jobs pages) that show a sidebar, the old fixed "Follow us" social icon list and share links are replaced by the standard, editable Social Media and Share snippets, the same building blocks used elsewhere on the site, so their icons, networks and styling can be customized instead of being hardcoded.

Blog post page > Share iconsA blog post's Share icons, now the standard editable Share snippet instead of a fixed sidebar block.

Where to find it

  1. Open a blog post whose sidebar is enabled.
  2. In Edit mode, click the Share icons near the title.
  3. The Social Media and Share panels shown are the same ones used on other pages.

For users

The Follow us and Share icons on a blog post now look and behave like the Social Media and Share blocks used anywhere else on the site, and can be edited the same way.

For developers

website_blog_templates.xml adds blog_post_content_footer_share_links, an xpath that calls the shared website.s_share snippet into the post, while the old opt_sidebar_blog_index_follow_us view is switched from active to inactive.

Upgrading from Odoo 19

A theme that customized the old hardcoded Follow us block should reapply that customization to the new Social Media snippet instead.

Change 25 of 60

Font weight selector

New featureCommunity

Specify the weight for light, normal, and bold font weights.

Official Odoo 20 release note

In plain words

The Theme tab's Headings and Paragraph sections gain a Font Weight control, and expanding it shows separate Light and Bold weight settings as well, so the light, normal and bold weights used across the site's text can each be set to a specific value instead of relying on the font's own defaults.

Website > Edit > Theme > Paragraph > Font WeightThe Theme tab's Font Weight controls, with Light and Bold weight values shown underneath.

Where to find it

  1. Website > Edit, open the Theme tab.
  2. Open Headings or Paragraph.
  3. Use Font Weight, and expand it to set the Light and Bold values.

For users

The overall boldness of headings and body text across the whole site can be tuned from one place, including how light and how bold text look when those styles are used.

For developers

theme_font_weight_option.xml adds a Font Weight BuilderSelect per typography level, with nested Light and Bold rows for the font's specific weight values, stored as theme colour/typography CSS variables.

Upgrading from Odoo 19

Nothing to migrate. Existing sites keep their current font weights until this is changed.

Change 26 of 60

Form enhancements

New featureCommunity

Part 1

Use the "no default value" option in a dropdown on a form to force visitors to select a value.

Official Odoo 20 release note

In plain words

A Selection type field (a dropdown) on a Website form can now be set to Allow Empty, so visitors are shown a blank first option and must actively choose one instead of a value being pre-selected for them.

Website > Edit > Style > Field (Selection) > Allow EmptyA dropdown field's Allow Empty option, forcing visitors to pick a value themselves.

Part 2

More design options are available when adding a "Terms & Conditions" checkbox to forms.

Official Odoo 20 release note

In plain words

A Checkbox field, such as the "I agree to the Terms & Conditions" field forms already use, gains its own design options, including a Hide Label switch, instead of being styled the same as every other field type.

Website > Edit > Style > Field (Checkbox) > Hide LabelA checkbox field's own Hide Label design option.

Part 3

Set different border values for the top/bottom/left/right side in the "Theme" tab.

Official Odoo 20 release note

In plain words

In the Theme tab, form input fields get a Border Width control that expands into separate Top, Right, Bottom and Left values, instead of one width applying to all four sides.

Website > Edit > Theme > Input Fields > Border WidthThe Theme tab's per side Top/Right/Bottom/Left border width controls for form inputs.

Part 4

Label positions are set at the form level.

Official Odoo 20 release note

In plain words

A Labels Position option on the Form panel itself now applies to every field in that form at once (hidden, above, or to the left or right of its input), instead of being set field by field.

Website > Edit > Style > Form > Labels PositionThe form level Labels Position control, applying to every field at once.

Part 5

Restrict file upload to certain file types.

Official Odoo 20 release note

In plain words

A File Upload field can restrict which file types it accepts with a new Restrict File Types option.

Website > Edit > Style > Field (File Upload) > Restrict File TypesA file upload field's new Restrict File Types option.

Part 6

Set character limits on text fields.

Official Odoo 20 release note

In plain words

A Text field can be given a Character Limit, capping how many characters a visitor can type.

Website > Edit > Style > Field (Text) > Character LimitA text field's new Character Limit option.

Part 7

Limit email submission to certain domains.

Official Odoo 20 release note

In plain words

An Email field's Requirement can be set to Matches domain, with a list of allowed domains (for example gmail.com), so submissions from other email domains are rejected.

Website > Edit > Style > Field (Email) > RequirementAn email field's Requirement set to Matches domain, with the allowed domains list.

Part 8

Drag and drop inner content between a form's fields to create sections, add images, set titles, and more.

Official Odoo 20 release note

In plain words

Small inner content blocks, such as a Text snippet, can now be dragged from the Blocks panel and dropped between a form's own fields, to add extra sections, images or titles inside the form.

Website > Edit > Blocks, drag Text between fieldsA Text inner content block dropped in between two of a form's own fields.

Part 9

Edit and format field labels directly in the form.

Official Odoo 20 release note

In plain words

A field's label text can be edited and formatted directly in place on the form, instead of only through a separate Label property field.

Website > Edit, click a field's labelA field's label text selected for direct, in place editing on the form.

Where to find it

  1. Website > Edit, click a field on a form to open its Style options.
  2. Change Type to see the design options specific to that field type (Selection, Checkbox, File Upload, Email, Text).
  3. Select the Form panel itself for the form wide Labels Position option, and try dragging a Text block from Blocks in between two fields.

For users

Website forms are noticeably more flexible to build: dropdowns can force a real choice, checkboxes and file uploads get their own relevant options, one Labels Position setting covers the whole form, and extra content can be dropped in between fields.

For developers

These are separate rows added across form_option.xml and form_field_option.js (BuilderCheckbox/BuilderSelect/BuilderList entries keyed to the selected field's Type), plus new dropzone_selectors letting .s_website_form_inner_content blocks land inside .s_website_form_field rows.

Upgrading from Odoo 19

Nothing to migrate; existing forms keep their current fields and behave the same until these new options are used on them.

Change 27 of 60

Forum notifications

New featureCommunity

Follow specific forum answers with fine-tuned notifications.

Official Odoo 20 release note

In plain words

A forum answer now has its own Follow button, separate from the question's, so a user who cares about one particular answer (not the whole question thread) can follow just that answer and be notified only about activity on it, such as edits or comments.

Where to find it

  1. Open a forum question with at least one answer.
  2. Next to an individual answer (not the question itself), find its own Follow icon.
  3. Click it to follow just that answer; edits or comments on it now notify only its own followers.

For users

Following an answer someone gave, rather than the whole question, means only getting notified when that specific answer changes or gets a comment.

For developers

forum.post drops the generic mail.thread inheritance it had in odoo19 and gets its own follower_ids/is_follower fields plus a shared website_forum.follow_button template, called on any post with a parent_id (an answer), not only on the question.

Upgrading from Odoo 19

A customization that relied on forum.post being a mail.thread (chatter, generic Followers widget) needs to be checked, since forum posts now use their own lightweight follower model instead.

  • No screenshot: the website_forum module is not installed in this environment, and the task rules say not to install modules; the feature is verified directly from the model and template source instead (forum.post's new follower_ids/is_follower fields and the follow_button template called per answer, both absent from odoo19).

Change 28 of 60

Fullscreen images

New featureCommunity

Click on images to see them full-size.

Official Odoo 20 release note

In plain words

An image can be given a new Pop-up on Click option so clicking it on the published page opens it full size in a lightbox, instead of the image only being clickable when it was already part of an Image Gallery block.

Website > Edit > Style > Image > Pop-up on ClickAn image with the new Pop-up on Click option turned on.

Where to find it

  1. Website > Edit, select any image.
  2. In Style, turn on Pop-up on Click.
  3. On the published page, click the image to see it open full size.

For users

Any single image on a page can be made to open full size when clicked, not only images placed inside a gallery block.

For developers

image_popup.js is a new interaction bound to img.o_image_popup, added by image_popup_option.xml; the existing Image Gallery lightbox is now also gated by the same class instead of always being active.

Upgrading from Odoo 19

Nothing to migrate. Existing images stay as they are until Pop-up on Click is turned on for them.

Change 29 of 60

General shadow options

New featureCommunity

Set general shadow styles and options for sections, cards, etc.

Official Odoo 20 release note

In plain words

The Theme tab gains a general Shadow section with Small, Normal and Large presets, each with its own horizontal and vertical offset, so the drop shadow used on cards, sections and other elements across the whole site can be tuned from one place instead of being fixed by the theme.

Website > Edit > Theme > ShadowThe Theme tab's general Shadow section, with Small, Normal and Large offset controls.

Where to find it

  1. Website > Edit, open the Theme tab.
  2. Scroll to the Shadow section.
  3. Adjust the Small, Normal or Large shadow values.

For users

The general drop shadow look used by cards and sections across the site can be adjusted site wide instead of being stuck with the theme's fixed default.

For developers

shadow_option.xml exposes the Small/Normal/Large shadow presets as editable Bootstrap shadow classes, with dedicated offset controls, backed by shadow_option_plugin.js.

Upgrading from Odoo 19

Nothing to migrate. Existing shadows keep their current values until these Theme controls are used.

Change 30 of 60

Google Tag Manager (GTM)

EnhancementCommunity

Configure Google Analytics or Google Tag Manager from a single identifier field in the Website settings.

Official Odoo 20 release note

In plain words

The Website settings field for Google tracking (labelled Google Tag Manager/Google Analytics, using one Identifier value) now works out on its own whether that identifier is a Google Analytics measurement id (starting with G-) or a Google Tag Manager container id (starting with GTM-), and loads the matching gtag.js or Tag Manager script accordingly, instead of always loading the Google Analytics script regardless of which kind of id was entered.

Website > Configuration > Settings > Tracking & SEOThe single Identifier field, shared by Google Analytics and Google Tag Manager.

Where to find it

  1. Website > Configuration > Settings.
  2. Turn on Google Tag Manager/Google Analytics.
  3. Enter either a G- or a GTM- identifier in the single Identifier field.

For users

Pasting either a Google Analytics G- id or a Tag Manager GTM- id into the same single Identifier field now loads the correct tracking script automatically.

For developers

website_templates.xml branches on is_google_analytics (key starts with G-) versus is_google_tag_manager (key starts with GTM-) to inject the right snippet, where odoo19 always rendered the gtag.js loader.

Upgrading from Odoo 19

A site already using a GTM- id should confirm Tag Manager now loads correctly, since the injected script changed for that case.

Change 31 of 60

Inner content blocks: icons and Instagram

New featureCommunity + Enterprise

Add Icon and Instagram building blocks as inner content on website pages.

Official Odoo 20 release note

In plain words

The Inner Content section of the Blocks tab now has an Icon block (a single icon you can drop inside any section) and an Instagram block (an Instagram profile feed that fits inside a column), next to Image, Video, Facebook and the others.

Website > Edit > Blocks > Inner ContentThe Inner Content tiles. The box spans from the new Icon tile (top right) to the new Instagram tile (bottom left).

Where to find it

  1. Website > open a page > Edit.
  2. Blocks tab > scroll to Inner Content.
  3. Drag Icon or Instagram into a column.

For users

Two more small blocks to drop inside sections: a single icon and an Instagram feed.

For developers

website.s_icon is a new template; website.s_instagram_page is now also registered in the snippet_content (inner content) group, not only as a Social building block.

Upgrading from Odoo 19

No data migration. Existing Instagram sections keep working.

Change 32 of 60

Job and eLearning course building blocks

New featureCommunity

Use dynamic building blocks (available in developer mode) to display jobs and eLearning courses.

Official Odoo 20 release note

In plain words

With developer mode on, the Blocks tab has a Debug group with the Dynamic Snippet and Dynamic Carousel blocks. Their Filter list now also offers Latest eLearning Courses and Latest Job Positions, so you can show courses and open jobs that update automatically.

Website > Edit (debug) > Dynamic Snippet > FilterThe Filter list of the Dynamic Snippet, which now includes Latest eLearning Courses and Latest Job Positions.

Where to find it

  1. Activate developer mode.
  2. Website > Edit > Blocks > Debug > Dynamic Snippet.
  3. Style tab > Filter.

For users

Courses and job offers can be listed with the generic dynamic blocks.

For developers

New website.snippet.filter records and display templates in website_slides and website_hr_recruitment.

Upgrading from Odoo 19

None.

Change 35 of 60

llms.txt

New featureCommunity + Enterprise

Create an llms.txt file in the website settings to help large language models (LLMs) better understand and use website content.

Official Odoo 20 release note

In plain words

Website settings have a new LLMs.txt option in Tracking & SEO. Click Edit llms.txt to write a short Markdown document about your site; it is then served at /llms.txt so AI tools know what your content is and how to use it.

Website > Configuration > Settings > Tracking & SEOThe new LLMs.txt setting with its Edit llms.txt link.

Where to find it

  1. Website > Configuration > Settings.
  2. Tracking & SEO > LLMs.txt > Edit llms.txt.

For users

Site owners can publish an llms.txt file without any code.

For developers

New route /llms.txt in the website controller, new field on website for the content and a transient wizard website.llms (form view_edit_llms) opened by action_open_llms.

Upgrading from Odoo 19

None.

Change 36 of 60

Mega menu

New featureCommunity + Enterprise

Add blocks or inner content to a mega menu. A new, empty mega menu template has also been added.

Official Odoo 20 release note

In plain words

Add blocks or inner content to a mega menu. A new, empty mega menu template has also been added.

Website > Edit > Mega menu > Style > TemplateThe Template picker for a mega menu, with the new blank template boxed as the last option; it opens as an empty dropzone that accepts any block.

Where to find it

  1. Website > Edit.
  2. Open a menu item that has a mega menu, then click inside it.
  3. Style tab > Template.
  4. Pick the last, blank template.

For users

Site owners get a blank mega menu template and can drop any building block, such as Text, Image, Columns or Buttons, inside a mega menu instead of only the old fixed menu-link layouts.

For developers

New Template row in the mega menu Style options (mega_menu_option_plugin.js) lists a new blank template, s_mega_menu_dropzone, next to the existing ones. Picking it drops a plain section that accepts normal blocks.

Upgrading from Odoo 19

Custom code that assumed a mega menu only ever holds the old fixed link snippets should allow for a mega menu section that can contain arbitrary blocks now.

Change 38 of 60

Multiple websites: change default site

EnhancementCommunity + Enterprise

Change the default website by reordering the websites in the configuration.

Official Odoo 20 release note

In plain words

The default website is now simply the first one in Website > Configuration > Websites. Drag a website to the top of the list with the handle and it becomes the default; website settings meant for the default site are moved to it.

Website > Configuration > WebsitesThe drag handles used to reorder websites; the first website in the list is the default one.

Where to find it

  1. Website > Configuration > Websites.
  2. Drag a website to the first row.

For users

Changing the default website no longer needs technical tricks.

For developers

website._ensure_default_website_consistency() keeps the XML id base.default_website pointing at the first website by sequence, id, and copies default-website settings across (_get_settings_to_copy_onto_new_default_website).

Upgrading from Odoo 19

Code that referenced base.default_website expecting a fixed record should read it again after reordering.

Change 39 of 60

New Icon List inner content block

New featureCommunity + Enterprise

Add a list with icons using the new "Icon List" inner content block.

Official Odoo 20 release note

In plain words

A new Icon List inner block adds a list where every line starts with an icon (a check mark by default). You can change the icons and the text of each line.

Website > Edit > Blocks > Inner ContentThe new Icon List tile in the Inner Content group.

Where to find it

  1. Website > Edit.
  2. Blocks tab > Inner Content > drag Icon List into a column.

For users

Feature lists with icons can be built without custom HTML.

For developers

New template website.s_icon_list (html_editor also got list support for it).

Upgrading from Odoo 19

None.

Change 40 of 60

Partners page

New featureCommunity

Display members and partners online with a new module.

Official Odoo 20 release note

In plain words

A new module, Website Partnership (website_partnership), publishes your members and partners on the website: a /partners style page grouped by partnership level, with building blocks to show them. It was split out of the Resellers module and depends on the Partnership app.

Website > /partnersThe public partners page grouping published partners by level, with the Gold group boxed.

Where to find it

  1. Apps > install Website Partnership.
  2. Set a Level on a contact and publish it.
  3. Open the partners page on the website.

For users

Install Website Partnership to list partners and members online by level.

For developers

New module website_partnership (depends on partnership, website_partner). Grades use website.published.mixin.

Upgrading from Odoo 19

Code that extended the partner pages in website_crm_partner_assign may have to move to website_partnership.

Change 41 of 60

Portal users: profile picture

New featureCommunity

Portal users can now update their own profile picture from the portal dashboard.

Official Odoo 20 release note

In plain words

On the portal Account Details page (reached from the portal dashboard) a portal user now sees their profile picture with an edit (pencil) and a delete button, and can upload a new picture themselves.

Portal > My Account > Account DetailsPortal user Joel Willis sees his profile picture card with the edit and delete buttons.

Where to find it

  1. Log in as a portal user.
  2. My Account > Account Details (edit your details).
  3. Click the pencil on the picture.

For users

Customers can change their own avatar without asking you.

For developers

New template portal.profile_picture_card inside portal.portal_my_details and interaction portal_profile_editor.js; the portal controller accepts the uploaded image.

Upgrading from Odoo 19

Custom overrides of portal_my_details should keep the new card or hide it on purpose.

Change 42 of 60

Property fields supported in website forms

New featureCommunity + Enterprise

Property fields can be used in website forms when the action is "Create a Customer" or "Subscribe to Newsletter."

Official Odoo 20 release note

In plain words

Property fields can be used in website forms when the action is "Create a Customer" or "Subscribe to Newsletter."

Website > Edit > Form field > Type > Existing fieldsThe Type dropdown for a new form field, with the Favourite Topic property boxed among the Existing fields for the newsletter contact.

Where to find it

  1. Website > Edit a page with a Subscribe to Newsletter or Create a Customer form.
  2. Add a field to the form.
  3. Set its Type, then pick a property from Existing Fields.

For users

When a form's action creates a res.partner customer or subscribes to a mailing.contact newsletter, a field added to that form can be set to an existing Property defined on that record, not just a plain database field.

For developers

website_form.py resolves properties.field type entries reported by the model so the form builder's Existing Field list mixes real fields with any Properties already defined for that model, and submissions write straight into that property.

Upgrading from Odoo 19

A custom module reading website form submissions should expect a value coming from a property field to land in the record's Properties JSON like any other property, not in a plain column.

Change 43 of 60

Publish/unpublish partners

EnhancementCommunity

Batch publish/unpublish partners.

Official Odoo 20 release note

In plain words

Website > Site > Partners opens a list of partner pages with a Published column, like the Pages list. Select several partners and publish or unpublish them in one go.

Website > Site > PartnersThe Partner Pages list with three rows selected and the Actions menu's Publish and Unpublish entries boxed.

Where to find it

  1. Install Resellers (website_crm_partner_assign).
  2. Website > Site > Partners.
  3. Select partners > Actions > Publish or Unpublish.

For users

Partner pages can be published in bulk instead of one by one.

For developers

New list view partner_pages_tree_view with js_class website_pages_list and action action_partner_pages_list (path partner-pages).

Upgrading from Odoo 19

None.

Change 44 of 60

Redirections

EnhancementCommunity + Enterprise

Redirection creation has been improved.

Official Odoo 20 release note

In plain words

Creating a redirect is quicker: the Action now defaults to 301 Moved permanently, the Name is filled in automatically when left empty, and a warning appears right away when the URL you redirect from is an existing page, because such a redirect would have no effect.

Website > Configuration > Redirects > NewThe warning shown as soon as URL from is a page that already exists; Action is already 301 and the name is generated.

Where to find it

  1. Website > Configuration > Redirects > New.
  2. Type an existing page URL in URL from.

For users

Fewer useless redirects and less typing.

For developers

website.rewrite: redirect_type default changed from '302' to '301', create() fills name with _generate_name() when empty, new computed is_url_from_exist used by the form alert and a list decoration; widget url_warning_banner_visibility on url_from.

Upgrading from Odoo 19

Scripts that create redirects without a name still work; the name is generated.

Change 45 of 60

Repositioning text over cover image

EnhancementCommunity + Enterprise

Text over a cover image can now be repositioned by dragging and dropping.

Official Odoo 20 release note

In plain words

The title, text and buttons of the Cover block now sit inside a column. Click the text and the column gets its own move handle, so you can drag the whole text box to another spot on the cover image.

Website > Edit > Cover blockAfter clicking the cover title the whole text column is selected; the box shows its drag and move handle.

Where to find it

  1. Website > Edit a page with a Cover block.
  2. Click the cover title.
  3. Use the move handle above the column to drag it.

For users

Text on a Cover can be moved around like any other column.

For developers

s_cover content is now wrapped in a row/column structure; custom code that targets direct children of .s_cover .container may need an update.

Upgrading from Odoo 19

Existing Cover blocks keep their old markup until they are dropped again.

Change 46 of 60

Search results

EnhancementCommunity

Part 1

On a multi-language website, the page name is now translated in the search results.

Official Odoo 20 release note

In plain words

On a multi-language website, the page name is now translated in the search results.

Website > search bar (other language)The French-language search results, with the entry for the Services Web B page boxed among the Pages results.

Part 2

Search results are split by category with improved layouts and a new fuzzy search algorithm.

Official Odoo 20 release note

In plain words

Search results are split by category with improved layouts and a new fuzzy search algorithm.

Website > /website/searchA misspelled search with the fuzzy-match notice above it and the Pages and Products result sections boxed together, showing the new grouped layout.

Where to find it

  1. Set up a website with more than one language and translate a page's name.
  2. Search for that page from the search bar in the other language.
  3. Search for something with a small typo or a missing word on the main website search page.

For users

Typing in the website search bar on a translated page now shows that page's translated name in the results instead of always falling back to the original language's title.

For developers

The search results page groups its results into separate sections per content type (pages, products, blog posts, and so on) with a clearer layout, and the underlying search tolerates small typos or missing words instead of requiring an exact match.

Upgrading from Odoo 19

website_page.py resolves the translated name field for search hits; the searchbar template refactor (search_modal.js, search_more.js, s_searchbar/000.xml) reworks how results render, and mixins.py's fuzzy matching (covered by test_fuzzy.py) widens what counts as a match.

Change 47 of 60

SEO

EnhancementCommunity + Enterprise

Part 1

Mobile performance has been improved via adaptive image sizing (srcset), and SEO logic has been refined to prevent duplicate content on paginated pages.

Official Odoo 20 release note

In plain words

When an image is edited and saved on a page, Odoo now keeps several resized copies and lists them in the image's srcset attribute, so a phone downloads a smaller file than a desktop instead of the same full-size picture. The duplicate-content refinement for paginated listing pages could not be separately confirmed from the supplied commit subjects: not verified from the supplied source code.

Website > Edit > Image > Save > page sourceThe saved image's srcset attribute listing several resized copies of the same picture for different screen widths.

Part 2

Use AI to improve a web page's SEO.

Official Odoo 20 release note

In plain words

The Website > Site > Optimize SEO dialog gets a new Update with AI button that fills in the page title, description and keywords for you instead of writing them by hand.

Website > Site > Optimize SEOThe Search Engine Optimization dialog with its new Update with AI button boxed.

Where to find it

  1. Website > Edit > select an image > adjust its quality or size > Save, then view the page source.
  2. Website > Site > Optimize SEO > Update with AI.

For users

Pages load faster on phones and tablets because the browser picks the right image size on its own, and the SEO dialog can draft its own title, description and keywords.

For developers

image_post_process_plugin.js resizes a saved image into several widths and ir_qweb_fields.py's srcset builder lists them; ai_website's seo_patch.js/xml adds the Update with AI button to the core website SEO dialog, backed by ai_composer.py.

Upgrading from Odoo 19

Filling SEO fields with Update with AI needs the AI app and credits; the dialog's own fields and the image markup are otherwise unchanged, so existing customizations keep working.

Change 49 of 60

Simplified inner content blocks

RefactoringCommunity + Enterprise

The "Social Media" and "Share" inner content blocks have been simplified by removing some options and merging others.

Official Odoo 20 release note

In plain words

Share and Social Media now use the same option panel (alignment, layout, a size slider, color, link style, background color). In Share, each network is a simple row with an on/off switch that you can drag to reorder; the old separate options for each block were removed or merged.

Website > Edit > Share block > StyleThe simplified Share options: common layout and size settings plus one switch per network.

Where to find it

  1. Website > Edit.
  2. Click a Share block.
  3. Look at the options in the Style tab.

For users

Fewer, clearer settings for Share and Social Media blocks.

For developers

website.SocialMediaOption is registered for the selector '.s_share, .s_social_media'. Icon size is now a range (--oi-icon-size) instead of fa-2x / fa-3x classes.

Upgrading from Odoo 19

Blocks saved with the old fa size classes keep rendering, but custom CSS aimed at fa-* classes should be reviewed.

Change 51 of 60

Sitemap enhancements

EnhancementCommunity

Sitemaps include only indexable 2XX URLs and remain within Google size and URL limits.

Official Odoo 20 release note

In plain words

Sitemaps include only indexable 2XX URLs and remain within Google size and URL limits.

Website > /sitemap.xmlThe generated sitemap.xml, with a boxed block of listed URLs that all resolve to real 2XX pages.

Where to find it

  1. Open /sitemap.xml (or /sitemap-1.xml on a large site).
  2. Check that listed URLs return pages, not redirects or errors.

For users

/sitemap.xml no longer lists pages that would answer with a redirect or an error, only pages that actually return a normal 2XX page, so search engines are not sent to dead links.

For developers

The sitemap-generation code now checks the response status before adding a URL, dropping non-200 entries; the existing per-file limit of 45000 URLs (LOC_PER_SITEMAP in website/controllers/main.py, already present in Odoo 19) still splits large sites into several sitemap files as before.

Upgrading from Odoo 19

Custom controllers that register URLs for the sitemap only need to change something if they were relying on a non-200 URL being listed; the file-splitting behaviour for very large sites is unchanged.

Change 52 of 60

Block preview for mobile devices

New featureCommunity + Enterprise

Preview how any block will appear on mobile devices.

Official Odoo 20 release note

In plain words

The Insert a block dialog (opened from a block category such as Intro) has a phone button next to the close button. Click it to see every block preview at mobile width before you add it.

Website > Edit > Blocks > IntroThe Toggle Mobile Preview button (active, in green); the block previews are shown at phone width.

Where to find it

  1. Website > Edit.
  2. Blocks tab > click a category (e.g. Intro).
  3. Click the phone icon in the dialog header.

For users

Check how a block looks on phones before dropping it on the page.

For developers

AddSnippetDialog has a new header template with toggleMobilePreview (hotkey M); snippet previews get the o_is_mobile_preview class. Custom snippets may add .preview styles for mobile.

Upgrading from Odoo 19

None.

Change 53 of 60

Structured data

New featureCommunity

Structured data is now added to webpages' HTML by default to improve SEO and create Google Rich Results.

Official Odoo 20 release note

In plain words

Structured data is now added to webpages' HTML by default to improve SEO and create Google Rich Results.

Website > page sourceThe application/ld+json script tag embedded in the page head, boxed, containing the Schema.org structured data.

Where to find it

  1. Open any website page.
  2. View page source.
  3. Search for application/ld+json.

For users

Every website page now automatically embeds a Schema.org JSON-LD script describing the organization, and pages for blogs, events, forum posts and products add their own structured data (article, event, product, and so on), without any manual setup.

For developers

website/tools.py builds the JSON-LD graph and website/views/website_templates.xml embeds it as a script application/ld+json on every page; models across website_blog, website_event, website_forum and website_sale each contribute their own structured-data fields (for example product SKU).

Upgrading from Odoo 19

Any custom page or theme that overrides the base website layout should keep the structured-data script tag, since removing the base template block would drop SEO markup Google and other search engines can otherwise use for rich results.

Change 54 of 60

Theme layout and background options

EnhancementCommunity + Enterprise

Theme layout and background options have been clarified and unified.

Official Odoo 20 release note

In plain words

Theme tab > Page Layout now shows each choice (Full, Boxed, Framed, Postcard) as a picture. For every layout except Full, the Background options (color or image, with image position) sit right under it, so layout and page background are set in one spot.

Website > Edit > Theme > Page LayoutThe Page Layout choices, each with a preview image.

Where to find it

  1. Website > Edit.
  2. Theme tab > Page Layout.

For users

Clearer choice of page layout and background.

For developers

theme_tab.xml: Page Layout is a BuilderSelect with image items; Background, Image and Position rows are level-1 rows shown only when the layout is not Full. Themes can also set page options.

Upgrading from Odoo 19

None; existing layout values are kept.

Change 55 of 60

Translation

EnhancementCommunity + Enterprise

Partly confirmed in the Odoo 20 source code. Parts of this note could not be traced.

Part 1

Translate selection field options in contact forms more easily.

Official Odoo 20 release note

In plain words

Translate selection field options in contact forms more easily. This could not be reproduced live in the test environment despite adding a proper Selection field through the form builder and entering translation mode: not verified from the supplied source code beyond the commit itself.

Part 2

On a multi-language website, static page URLs can now be translated per language.

Official Odoo 20 release note

In plain words

On a multi-language website, static page URLs can now be translated per language.

Website page (backend form) > Page URLThe Page URL field on a website page's form, with its EN translate button boxed.

Part 3

When translating web content, different images, videos, or documents can be displayed for each language.

Official Odoo 20 release note

In plain words

When translating web content, different images, videos, or documents can be displayed for each language. No image or video on any tested page (including a newly built one and the default homepage) exposed the editor's per-language replace control in this environment: not verified from the supplied source code beyond the commit itself.

Where to find it

  1. Website > Site > Pages > open a page's Properties, or the page's backend form, to translate its URL.
  2. Enter translate mode on a page with a form containing a Selection field.
  3. Enter translate mode on a page with an image and look for a per-language replace option.

For users

A dropdown field built from Selection options (for example on a contact or newsletter form) shows one small text box per option when translating a page, instead of asking to edit hidden HTML on the option tags.

For developers

The Page URL field on a website page's backend form now has its own EN translate button, the same kind of button other translatable fields use, so a French or Spanish version of a page can live at its own URL.

Upgrading from Odoo 19

An image or video snippet edited on a page can be marked so a different file is shown automatically depending on the visitor's language, instead of everyone seeing the same file regardless of language.

  • Bullet 1 (selection field translation): no screenshot. The per-option translation box never appeared in translate mode for a Selection field built through the form builder or added directly on the model, in this test environment, even though the feature is confirmed in the source and its test file.
  • Bullet 3 (per-language media): no screenshot. No image or video, including the default homepage's, showed the editor's per-language replace control in translate mode in this test environment, even though the feature is confirmed in the source and its test file.

Change 56 of 60

Vertical video format

New featureCommunity + Enterprise

Add videos in vertical format.

Official Odoo 20 release note

In plain words

Videos can now be inserted in vertical (portrait) format instead of only the traditional widescreen shape.

Website > Edit > Video > optionsThe video options list with the new Vertical row boxed, next to Autoplay, Loop and the other playback options.

Where to find it

  1. Website > Edit a page with a video block.
  2. Double-click the video to open its options.
  3. Turn on Vertical.

For users

A video block dropped on a page or email can be switched to a tall, portrait shape (like a phone screen) instead of only the classic wide shape, which suits short social-style clips better.

For developers

The video selector dialog (embedded_video_selector.js) that opens when you double-click a video now has a Vertical option alongside Autoplay, Loop and the others; video.js/video.scss apply the matching portrait aspect ratio to the embedded player.

Upgrading from Odoo 19

The video embed is still the same component, just with an extra display option, so existing videos and custom code that reads or writes video embeds keep working.

Change 57 of 60

Visitor tracking

PerformanceCommunity + Enterprise

The efficiency of the visitor tracking system has been improved.

Official Odoo 20 release note

In plain words

Visitor tracking does less database work: the visitor lookup made on each tracked page view now fetches the record in one query (search_fetch) instead of two, and page view tracking was reworked so it can cover more kinds of pages (blog posts and other website records) through a shared mixin.

Where to find it

  1. Website > Reporting > Visitors (tracking works as before).

For users

Nothing to click: pages load with a little less database work when visitors are tracked.

For developers

Page view tracking now goes through a mixin in website/models/mixins.py; models that want their pages tracked can inherit it.

Upgrading from Odoo 19

None.

  • No screenshot: this is a server-side efficiency change with no visible difference in the interface.

Change 58 of 60

Website configuration wizard

EnhancementCommunity + Enterprise

Partly confirmed in the Odoo 20 source code. Parts of this note could not be traced.

Part 1

The website configuration wizard includes an improved industry list and synonym matching, as well as AI-powered choices for positioning (e.g., luxury versus eco-conscious) based on the type of business.

Official Odoo 20 release note

In plain words

The website configuration wizard includes an improved industry list and synonym matching, as well as AI-powered choices for positioning (e.g., luxury versus eco-conscious) based on the type of business.

Website configurator > Description screenThe wizard after typing an industry, with its AI-generated positioning options boxed.

Part 2

Several new themes have been added, existing themes have been improved, and default images for all themes have been updated.

Official Odoo 20 release note

In plain words

Several new themes have been added, existing themes have been improved, and default images for all themes have been updated. The wizard's visual template step was confirmed live, but which specific themes were added or updated could not be verified from the supplied source code, since Odoo ships most themes through the separate Apps store rather than as local modules in this repository.

Website configurator > template stepThe wizard's visual template preview grid, boxed, shown after choosing a color palette.

Where to find it

  1. Apps > Website (or Site > Configuration > Website Configurator) to relaunch the wizard.
  2. Type a business type and an industry.
  3. Open the positioning dropdown.
  4. Pick a color palette to reach the template preview step.

For users

The website setup wizard now asks for a business type, an industry (matched against a built-in list and its synonyms, with an AI fallback when nothing matches closely) and finally a positioning; the positioning dropdown is filled by an AI request that proposes six options tailored to that exact industry (for example 'artisan' or 'gluten-free' for a bakery) instead of a fixed list.

For developers

After picking a color palette, the wizard shows a grid of visual template previews with real images so the choice feels concrete instead of abstract; on a site with the eCommerce app, this step shows online catalog page styles built the same way.

Upgrading from Odoo 19

configurator.js builds a word-and-synonym dictionary from the industries list and calls /html_editor/generate_text for both the closest-industry match and the six positioning suggestions, falling back to a fixed list of six positionings if that call fails; website_sale's shopPageSelectionScreen.js/xml plugs an extra template-preview step into the same wizard for shop sites.

Change 59 of 60

Website editor UI/UX

EnhancementCommunity + Enterprise

The Website editor's UI and UX has been improved.

Official Odoo 20 release note

In plain words

The editor sidebar got many small design and usability fixes in Odoo 20: parent option groups fold automatically, switching between Blocks, Style and Theme is animated, overlay buttons on the selected element are clearer, the color picker was redesigned and the theme colors can be previewed as a palette. The release note gives no single list, so this entry covers the main visible changes found in the commits.

Website > EditThe Website editor sidebar with its Blocks, Style and Theme tabs and the new folded option groups.

Where to find it

  1. Website > Edit.
  2. Click any element and look at the sidebar.

For users

A cleaner, calmer sidebar while editing pages.

For developers

Builder components in html_builder changed in many places (option containers, color picker, overlay buttons). Custom builder options should be tested against the new layout.

Upgrading from Odoo 19

Retest custom website builder options and tours.

Change 60 of 60

WhatsApp widget snippet

New featureCommunity + Enterprise

Allow visitors to start a WhatsApp conversation with your company in a single click.

Official Odoo 20 release note

In plain words

Allow visitors to start a WhatsApp conversation with your company in a single click.

Website > WhatsApp blockThe WhatsApp chat popup that opens from the floating button, boxed, ready for a visitor to send a message.

Where to find it

  1. Website > Edit > Blocks.
  2. Drag the WhatsApp block onto the page.
  3. Set the phone number and message in its options.

For users

A new building block adds a floating WhatsApp button to a page; visitors click it to open a chat bubble and start a WhatsApp conversation with the configured phone number in one click, similar to a live chat widget.

For developers

The s_whatsapp snippet (000.xml, whatsapp.js) renders the floating button and chat popup, whatsapp_option_plugin.js exposes its settings (phone number, default message, agent name and photo) in the Style tab, and a later commit reworked the popup's visual design.

Upgrading from Odoo 19

The snippet is self-contained and does not touch existing chat or contact-form snippets, so adding it is optional and does not change other blocks.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Website: common questions

What is new in Odoo 20 Website?

The official Odoo 20 release notes list 60 Website changes (33 new features, 25 enhancements, 1 refactoring, 1 performance). They include Accented characters in URLs, Age verification popup, AI Website Assistant, AI-generated content indicator and more.

Are the Odoo 20 Website changes available in Community edition?

57 of the 60 changes are in Odoo 20 Community (and Enterprise). 3 are Enterprise only. Each change on this page is labeled with its edition.

Do Odoo 20 Website changes affect my customizations when upgrading from Odoo 19?

29 of the 60 changes have something to check when upgrading from Odoo 19, for example Accented characters in URLs, Age verification popup, AI Website Assistant. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade Website to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Website, then test your main Website flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

More Odoo 20 release notes

Planning your Odoo 20 move

Want these Website changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.