Skip to main content
iVentureTeam

website_urls

One core view asks for widget="website_urls". Nothing in Odoo registers that name, in any version we checked. The field still renders, and this page explains exactly why.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 27, 20266 min read
Technical namewebsite_urls
Field typeschar
Viewsform
ModuleNone. The name is not registered by any module
Used in core1 occurrence, the lead generation rule form in website_crm_iap_reveal
No-code setupNot applicable. There is no widget to select
Alternativesurl, char, text

What the website_urls attribute does

Widget names in Odoo view XML are keys into a registry. When the key exists, the matching component renders the field. When it does not, Odoo does not raise an error: it writes a warning to the browser console and falls back to the component registered for the field's type.

website_urls is one of those missing keys. It appears exactly once in Odoo's own source, on the URL expression field of a lead generation rule, and no module in Odoo 16, 17, 18 or 19 registers that name. The field is a Char, so what actually renders is Odoo's ordinary text input.

The result is a field that looks and behaves like a plain text box, with the placeholder from the view, and a console warning nobody reads. Everything works; it is just that the widget attribute has no effect.

What this means for your team

The reason this page exists is that the name looks meaningful. Somebody reading Odoo's views for inspiration, or searching for a way to render website paths nicely, will find website_urls and reasonably assume it does something. Copying it into a custom view produces no error and no benefit, and the misunderstanding can survive a long time because nothing visibly fails.

There is a maintenance point in it too. A widget name that no longer resolves is exactly the kind of leftover that accumulates in long-lived customizations, usually after a module was refactored and its JavaScript removed while the view kept its attribute. Odoo's own codebase carried one for at least four versions. Auditing your custom views for widget names that no longer resolve is a cheap cleanup with a real payoff: the browser console becomes readable again.

Working examples

The one core usage

<field name="regex_url" widget="website_urls"
       placeholder="e.g. /page"/>

Identical in Odoo 16, 17, 18 and 19. The widget attribute is inert; the placeholder is not.

What renders instead

<!-- effectively equivalent -->
<field name="regex_url" placeholder="e.g. /page"/>

This is what the Odoo 20 development branch actually ships: the widget attribute is gone.

If you wanted URL behavior

<field name="my_url" widget="url"
       options="{'website_path': True}"/>

The url widget is the real one: it renders a clickable link when read-only and understands site-relative paths.

What Odoo does with a widget name it cannot find

The fallback is worth understanding precisely, because it is what makes a typo in a widget name so quiet. Odoo's field lookup tries the requested widget name, first with a view-type prefix and then bare. If neither resolves it logs a warning naming both the widget and the field type, then falls back to the entry registered for the field's type, and finally to a generic default field if even that is missing.

The important consequence is that a wrong widget name never breaks a form. On a Char field you get a text input; on a boolean you get a checkbox; on a many2one you get the standard relation picker. The field saves normally throughout. Only the console warning tells you anything happened, and it appears once per field per render.

In this particular case the field being decorated is a regular expression for matching website paths, used by a lead generation rule to decide which page visits it reacts to. A text input is arguably the right control for a regex, which is probably why nobody noticed for four versions.

We looked for a registration under this name in the website module's field components, in the module that uses it, and across the field registrations we could reach in each branch. There is none. On the development branch the attribute has been dropped from the view entirely, which is the tidy resolution.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Still unregistered, and the development branch removes the attribute from the only view that used it.
Odoo 19.0Not availableNot registered by any module. The field falls back to the widget for its type.
Odoo 18.0Not availableNot registered. Same single view usage.
Odoo 17.0Not availableNot registered. Same single view usage.
Odoo 16.0Not availableNot registered. Same single view usage.

Upgrade note. Nothing to do, in either direction. The attribute has been inert since at least Odoo 16, so removing it from a custom view changes nothing visible and removes a console warning. If a custom module registered its own website_urls widget, that registration is what your view has been using, and it is worth documenting before anyone assumes it is standard.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify the page after release.

The name is retired. On the development branch the lead generation rule view declares the field without any widget attribute, and there is still no registration under this name anywhere. So Odoo 20 simply stops asking for a widget that never existed.

The field keeps its placeholder and continues to render as a text input, which is what it was doing all along.

Common problems and fixes

SymptomCause and fix
Console warning: Missing widget website_urlsThe name is not in the field registry, in any supported version. Remove the widget attribute. The field renders identically without it.
The field does not render as a linkIt falls back to the text widget for its Char type. Use widget="url" if you want link rendering.
My options dictionary is ignoredThere is no widget to read it, and the fallback widget does not recognize those keys. Pass options the fallback widget supports, or switch to a widget that declares what you need.
It works in one database and not anotherA custom module in one database registers its own widget under this name. Search your custom addons for a registration; if there is one, document it as non-standard.
The placeholder still showsExpected. The placeholder belongs to the fallback text widget, not to the missing one. Nothing to fix.

Website_urls attribute vs the alternatives

WidgetBest forKey difference
website_urlsNothing. The name resolves to no widgetA view attribute with no registration behind it, so the field falls back to its type's widget
urlFields holding a link or a site-relative pathA real widget: renders a clickable link when read-only and understands website paths
charA plain single-line text valueWhat actually renders today, just requested explicitly
textLonger free textTextarea rendering rather than a single line

If you came here looking for a way to render website paths, the answer is the url widget, which has a website-path option and renders a real link when read-only. If you only need a text box for a pattern or an expression, drop the widget attribute and let the Char field render itself.

Frequently asked questions

Is website_urls a real Odoo widget?+
No. We searched Odoo 16, 17, 18 and 19 and found no module registering that name. It appears once in core view XML, on a lead generation rule, and has no effect.
Why does the field still work?+
Odoo's field lookup falls back to the widget registered for the field's type when a widget name does not resolve. It logs a Missing widget warning in the browser console and carries on.
What renders instead?+
The field is a Char, so the standard text input renders. Its placeholder attribute still applies, because that belongs to the fallback widget.
What should I use for URLs?+
The url widget, which renders a clickable link in read-only mode and has an option for site-relative paths.
Does it change in Odoo 20?+
The development branch removes the widget attribute from the one view that used it. There is still no registration, so the name is effectively retired.

How much of your Odoo customization is still doing nothing?

Inert widget names, dead options and views inherited from modules that no longer exist accumulate quietly over the years. We audit customizations against the version you are actually on and tell you what can be deleted.

Book a free consultation

How this page was produced

We searched the full Odoo 19.0 source for any registration of this name in the field registry and found none, then checked the same in the 16.0, 17.0 and 18.0 branches and in the website module's field components, where the neighbouring page-url and image-radio widgets are registered. The single view usage was read from website_crm_iap_reveal/views/crm_reveal_views.xml, and the field type from the module's model. The fallback behavior was read from the web client's field lookup. The development branch was checked file by file for both the registration and the usage. Spotted an error? Tell us and we will correct the page.