Seatext library

How to Troubleshoot SeaText AI on a Development Odoo Domain

Start by confirming your SeaText account is linked to the exact development domain you're testing, then verify the embed code is pasted correctly in Odoo's Dynamic Content block. Check that the domain is publicly...

Why Domain Matching Matters for SeaText on Odoo

SeaText binds each account to one primary URL. That single domain acts as the identity key for every request the script makes. If the key in your dashboard does not match the URL in the browser address bar, SeaText silently rejects the traffic. The AI never reaches the page, so nothing visible happens on the Odoo site.

This binding is the most common reason SeaText fails on Odoo development domains. A team creates an account for mycompany.com, then installs the script on dev.mycompany.com. Both look like the same brand. To SeaText, they are two different websites. The script loads, calls home, and gets back a mismatch response. The dashboard shows zero sessions.

Domain matching also affects analytics, agent targeting, and conversion attribution. Even when the AI does appear, wrong-match traffic pollutes data. That is why SeaText requires a dedicated account per domain, including staging, preview, and production environments.

Common Odoo-Specific Pitfalls

Odoo's Website builder treats script tags in unusual ways. Several pitfalls catch first-time installers:

  • Wrong block type: Pasting JavaScript into a regular text or HTML block causes Odoo to escape or strip the script tags. Use only the Embed Code module inside Dynamic Content.
  • Visibility settings: The Embed Code module has a Visibility section. The Hide on Desktop checkbox is enabled by default in some templates. The script never runs on desktop if it stays checked.
  • Page caching: Odoo's website cache may serve a stale version of the page without the script. Hard reload or clear the cache after saving.
  • Multi-website setups: Odoo supports multiple websites under one database. Each website has its own front-end domain. Installing the script on the wrong website is a frequent mistake.
  • Database prefix URLs: Some Odoo SaaS instances use database-prefixed hostnames like mycompany.odoo.com. A custom dev domain must be properly connected through Odoo's domain settings before SeaText can see it.
  • User access rights: Only users with Website Editor rights can place Embed Code blocks. Limited users see the block but cannot paste or save the script.

Trade-offs: Development Domains vs. Production Domains

Testing on a development domain is useful but constrained. Production domains have stable hostnames, valid HTTPS, and reliable public access. Development domains often sit behind VPNs, basic auth, or IP allowlists. That setup blocks SeaText servers from seeing the page.

The trade-off looks like this:

  • Production domain: Best match for SeaText behavior. Real traffic, real certificates, real DNS. Downside is that any test changes affect live visitors.
  • Stable dev subdomain: Such as staging.mycompany.com. Good balance. Public DNS, valid HTTPS, isolated from production. Requires its own SeaText account.
  • Localhost: Fastest feedback loop. SeaText blocks localhost for security. Use only for layout testing, not for SeaText integration testing.
  • Tunneled dev URL: Such as yourproject.ngrok.io. Reaches localhost from outside. Free tiers rotate hostnames, which breaks SeaText's domain binding. Paid fixed-host tunnels work.

Choosing the right environment saves hours of debugging. Match the test environment to the SeaText account, not the other way around.

Diagnostic Sequence: Step-by-Step Troubleshooting

Follow this ordered checklist. Each step assumes the previous step passed. Stop at the first step that reveals the cause, then apply the fix before moving on.

  1. Confirm account-to-domain binding. Log into SeaText. Compare the primary URL field against the URL in your browser. They must match exactly, including subdomain, protocol, and port (if non-standard). If they do not match, create a new SeaText account for the dev domain.
  2. Verify the embed block in Odoo. Open the Odoo Website editor on the page. Confirm a Dynamic Content > Embed Code block exists. Open the page source and search for the SeaText script URL. If missing, the block did not save.
  3. Check visibility settings. In the Embed Code module settings, ensure Hide on Desktop is unchecked if you test on desktop. Save again.
  4. Test external HTTPS access. From a phone on cellular data, load the dev URL. If it fails, the domain is not publicly reachable. SeaText cannot see what its servers cannot reach.
  5. Validate the SSL certificate. Use SSL Labs or your browser padlock. Self-signed or expired certificates block the script load with a mixed-content error.
  6. Inspect the browser console. Open developer tools. Look for CORS errors, 4xx responses from SeaText, or blocked script warnings. A CORS error almost always means the domain is not registered.
  7. Check SeaText dashboard logs. Confirm the script is detected. Zero recorded traffic means the script never reached the page.
  8. Test in an incognito window. Browser extensions, ad blockers, and privacy tools can block third-party scripts. An incognito window disables most of them.
  9. Clear Odoo and browser caches. Stale cached pages serve without the script. Hard reload with Ctrl+Shift+R.
  10. Confirm firewall rules. If the dev domain sits behind a WAF or rate limiter, allow SeaText's outbound calls. The exact allowlist is available from SeaText support.
  11. Escalate to support. If all ten steps pass and the AI still does not activate, share the domain, account email, and console log with SeaText. Support can verify whether the script reached their edge.

Deeper Diagnostic Workflow

For stubborn cases, run a deeper investigation. The goal is to isolate whether the failure is at the network, page, or SeaText layer.

Start at the network layer. Use curl -I https://dev.yourdomain.com from a server outside your office network. A 200 OK confirms external reachability. A redirect or timeout suggests DNS or firewall issues. Repeat with curl -I https://dev.yourdomain.com/embed-path if the script is hosted under a known path.

Move to the page layer. View source and confirm the script tag points to the exact URL provided in your SeaText dashboard. A mismatched script URL means a copy-paste error. Copy the snippet directly from the dashboard each time you reinstall.

Move to the SeaText layer. Open the dashboard and check the Last Seen field. If the timestamp never updates despite page loads, SeaText's servers are not receiving the call. Either the domain is wrong, the network blocks SeaText, or the script never executed.

For dynamic development domains with rotating hostnames, freeze the hostname during testing. Ngrok free plans rotate hostnames on each restart. Upgrade to a fixed subdomain, or run the test inside a single session.

Security Implications of Tunneled Domains

Tunneling tools like ngrok, Cloudflare Tunnels, and localtunnel expose a local port to the public internet. This convenience carries real security trade-offs.

Anyone with the tunnel URL can reach your local Odoo instance. Default tunnels have no authentication. A leaked URL becomes a public backdoor into your development environment. Treat tunnel URLs like production credentials.

From a SeaText standpoint, tunnels work as long as the hostname is stable. Free ngrok URLs change every restart, which breaks SeaText's domain binding each time. Paid ngrok plans, Cloudflare named tunnels, and Cloudflare quick tunnels offer fixed hostnames that SeaText can whitelist.

For staging work, prefer a real subdomain like staging.mycompany.com. Real DNS, real HTTPS, real firewall rules. The setup mirrors production and removes tunnel-specific risks.

When to Contact SeaText Support

After completing the diagnostic sequence with no resolution, contact SeaText. Provide the account email, the full dev domain including protocol, the time of the most recent test, and the console log output. Support can confirm whether the script reached their servers and whether the domain is properly whitelisted.

Open the Odoo integration guide for step-by-step install instructions and the latest account setup details. The guide covers the exact embed block placement and the multi-domain account rules.

Frequently Asked Questions

How do I test SeaText on a staging subdomain without affecting production?

Create a separate SeaText account whose primary URL exactly matches the staging subdomain, such as staging.mycompany.com. Install the script on the staging Odoo site only. Production traffic remains untouched because it uses a different account.

What are the security implications of using a tunneled domain?

Tunnel URLs expose your local Odoo instance to the public. Anyone with the URL can reach it if no authentication is in place. Use named tunnels with fixed hostnames, enable basic auth, and rotate URLs after each test session.

Can I share one SeaText account between my dev and production Odoo sites?

No. Each SeaText account binds to a single primary URL. Sharing causes mismatched attribution, broken analytics, and silent failures on whichever domain is not registered.

Why does my Odoo Embed Code block save but the script never runs?

Check the Visibility section. Hide on Desktop is checked by default in some templates. Uncheck it, save again, and reload the page. Also confirm the script URL in the page source matches the one in your SeaText dashboard.

How long does it take SeaText to detect a new domain after installation?

Detection is real-time for active traffic. If the page loads and the script fires, the dashboard updates within minutes. A longer delay usually means the script never executed, not a slow SeaText sync.

Does Odoo's built-in cache break SeaText after every deploy?

Yes, until the cache invalidates. After saving the Embed Code block, invalidate the website cache in Odoo or hard reload with Ctrl+Shift+R. Stale cached pages serve without the new script.

Further reading and comparison sources

These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.

Further reading and comparison sources

These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.

Learn more

Visit the website for more information.