Page titles and descriptions as data

A page's title, description, canonical and index flag live in a table that overrides what the page shipped with — so fixing an audit finding is a row edit rather than a production deploy.

What it is

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

See it
Page titles and descriptions as data
CustomerBuildingAmountStatus
Sutter Kline30×40 Garage$17,730Sent
Delia Yoder40×64 Shop$9,370Open
Sutter Kline40×64 Shop$13,170Sent
Gideon Alt30×40 Garage$17,730Approved
Sutter KlineEquipment Storage$15,830Sent
The Settings page-meta editor: path, title, description, canonical, noindex, with the shipped fallback shown greyed beneath each field. Sample data — no customer information appears here.
How it works
  1. 1generateMetadata() calls pageMetadata({ path, title, description }) with the page's compiled values as the seed.
  2. 2getPageMeta() looks up the row; a missing row, an empty column or a database error all fall through to the seed.
  3. 3The result is assembled into Next.js metadata including canonical, OpenGraph and Twitter cards.
  4. 4A noindex flag on the row sets robots to index:false, follow:true.
  5. 5seedPageMeta() records what a page shipped with, and only ever inserts when no row exists — it can never overwrite a correction.
  6. 6applyPageMeta() writes a correction and stamps updated_by as seed, auto or human.
Why we built it

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."

The problem
  • 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.
Sound familiar?
What you get
Title, description, canonical and indexability editable from the panel
A missing or bad row can never blank a page — it falls back to what shipped
Every change records who made it: seed, auto or human

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 →