Every marketing page asks pageMetadata() for its metadata. The values compiled into the page act as both the seed and the fallback; a row in seo_page_meta overrides any field independently. A blank override is ignored rather than honoured, and any failure in the lookup returns exactly what the page shipped with — there is no state in which the system can blank a page's title.
Also called: edit meta description without a deploy · page title editor · canonical URL · noindex toggle
- 1generateMetadata() calls pageMetadata({ path, title, description }) with the page's compiled values as the seed.
- 2getPageMeta() looks up the row; a missing row, an empty column or a database error all fall through to the seed.
- 3The result is assembled into Next.js metadata including canonical, OpenGraph and Twitter cards.
- 4A noindex flag on the row sets robots to index:false, follow:true.
- 5seedPageMeta() records what a page shipped with, and only ever inserts when no row exists — it can never overwrite a correction.
- 6applyPageMeta() writes a correction and stamps updated_by as seed, auto or human.
The header names the change: "PAGE METADATA AS DATA (Keith 08-24) — the change that turns 'audits itself' into 'corrects itself'. The weekly audit's largest class of finding is on-page… Every one of those lived in export const metadata inside a TSX file, so acting on the finding meant a commit and a push to main — which is a production deploy." And the safety rule is stated just as plainly: "THE FALLBACK IS THE POINT… There is no state in which this system can blank a page's title — which is the only reason it is safe to let a machine write to it."
- On-page fixes required a code change and a deploy.
- A machine could not be trusted with metadata that had no fallback.
- Nobody could see a page's current title without reading source.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →