
Redirect Manager: 301 Redirects & 404 Monitor
Keep a redirect table honest: validate a CSV before import, find loops, chains and dead targets, flatten a chain, and let the 404 log propose targets.
Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_redirect_pro.
Redirect Manager: 301 Redirects & 404 Monitor
An add-on for BambooForge SEO Pro. SEO Pro gives you the redirect rules; this keeps them healthy once the migration week is over: a dry run before a CSV becomes six hundred live rules, a scan that finds the loops, chains and dead targets already in the table, and a 404 monitor that proposes the target instead of asking you to type it.
Install
Install BambooForge Redirect Manager Pro. It requires BambooForge SEO Pro; nothing else changes on install. Two menu entries appear under SEO Pro: Redirect Health and, under Configuration, Scan redirects now.
Access rights are SEO Pro's: an SEO User can read the findings, an SEO Manager can scan, fix, import and accept suggestions.
Redirect Health
SEO Pro → Redirect Health. The list is grouped by finding, worst first.
- Redirect loop
The visitor is sent in a circle and the browser answers ERR_TOO_MANY_REDIRECTS. SEO Pro refuses to save a rule that closes a loop, which catches the loop somebody writes in one sitting. It cannot catch the other kind: A to B, B to C, and six months later somebody edits C. Every rule was legal when it was written. The scan follows the chain to its end instead, and reports the rule that closes the circle.
- Redirect chain
A to B to C. Every hop is a round trip for the visitor, and search engines stop following after a few. Fix points the rule straight at the end of the chain.
- Target does not exist
The redirect still works, and lands the visitor in a 404 because the target page was deleted. The finding names the website the target is missing on - useful when one rule serves six client sites. A target that answers 410 is reported too: two round trips to be told the page is gone.
- Duplicate origin
Two rules, same origin. Only one of them ever fires; Fix disables the other.
- Never used
Created more than six months ago and never hit once. Rules cost a lookup on every 404, so retiring the ones nobody asks for is free speed. Fix archives the rule; it is not deleted, and un-archiving it brings it back.
The scan runs every Monday at 03:00 server time, and on demand from Configuration → Scan redirects now. It updates findings instead of duplicating them, closes the ones that went away, and leaves anything you marked Ignore ignored - a report that re-opens every Monday is a report nobody reads twice.
What it does not do
Scanning never changes a rule. Rules change when you press Fix, or Flatten the chain on the rule itself, or accept a suggestion.
Regex rules are scanned like any other rule - the chain walk uses a sample path derived from the pattern - but are never rewritten automatically: the target of a regex rule depends on the URL that matched, so rewriting it from one sample would break every other path it serves.
Importing a redirect list
Redirects → Import redirects (CSV), then Check the file.
The header is SEO Pro's: url_from,url_to,redirect_type plus the optional is_regex, sequence and name. Every row gets a verdict:
Verdict |
Meaning |
|---|---|
Will be created |
Nothing wrong with the row. |
Duplicate inside the file |
An earlier line already redirects that URL. |
Origin already redirected |
A rule for that URL exists; the import would add a second one that never fires. |
Would create a loop |
The target redirects straight back here. |
Redirects to itself |
Origin and target are the same URL. |
Target does not exist |
Not a page and not a route on this site. A warning, not a block - you may be importing ahead of the content. |
Invalid row |
No origin, or a 301 without a target. |
Rows that are blocked come unticked; warnings stay ticked. You can edit a target in the preview before importing. Import the ticked rows creates exactly those, each in its own savepoint, so one bad row reports itself instead of sinking the file.
A target that is itself redirected is shortened on the way in: importing /a -> /b when /b -> /contact already exists writes /a -> /contact and saves you the chain you would have had to flatten next Monday.
The 404 monitor proposes a target
SEO Pro → 404 Monitor. A dead URL is almost never random: it is yesterday's slug. Every open 404 is scored against the pages SEO Pro has indexed for that website:
the slug - the last segment, because that is what a rename touches;
the whole path;
the words the two URLs share, ignoring stop words and numbering.
The best match is shown with a confidence between 0 and 1. Below 0.55 the monitor says nothing at all: a wrong 301 removes the row from the list and hides the problem from the next person who looks at it.
Accept suggestion creates a 301 for the selected rows, marks each 404 as redirected and links the rule. Rows without a suggestion are skipped, and a row that cannot be created - because somebody redirected the target back in the meantime - does not roll back the rows that could.
Scoring runs every four hours for 404s nobody has looked at yet, and on demand with Suggest targets.
Multi-website and multi-company
A finding belongs to the rule, not to the website that happened to be scanned last. A rule that serves every website produces one finding.
Suggestions never cross sites: a page published on client B is never proposed as the target for a 404 on client A.
The findings list is filtered by the websites the user can see, and by company through the website's company.
Housekeeping
Findings marked fixed or ignored are deleted 30 days later by the standard autovacuum.
Nothing is crawled and nothing leaves the server: "does this URL exist" is answered from SEO Pro's page index and the routes this Odoo really serves.
Support
support@bambooforge.dev - the people who wrote it.
Screens


