#521·Instatic

[Bug]: Page-level SEO title and description are saved but the published head always uses the site-level Meta Title and Meta Description

Author: jblueproductionsCreated Sep 10, 2026Updated Sep 10, 2026
Labelsbug

Summary

Each page has SEO title and SEO description fields in the page panel. Those values save and persist across republishes, but the published always emits the site-level Meta Title and Meta Description from Settings → General. Page-level values never appear, so every page in the site presents the same title and description to search engines and link previews.

The site-level path itself works: before the site-level Meta Title was filled, the published was composed as {Site Name} · {page H1} and no <meta name="description"> was emitted at all. Filling the site-level fields produced the current output. Only the page-level override is ignored.</p> <h3>Steps to reproduce</h3> <p>Steps to reproduce</p> <ol> <li>Settings → General: set Meta Title to J Blue Productions | Growth Systems Engineering and Meta Description to J Blue finds where growing companies are losing time, money, or unrealized value, then builds the systems that fix it.</li> <li>Open a page (slug blueprint). In the page panel, set SEO title to The Blueprint | Growth Systems Engineering by J Blue Productions and SEO description to The J Blue method: measure what matters, trace problems across the business, build the fix as a system, and hand it to your team to run. Save.</li> <li>Publish the page. The panel shows Updated and Published at the same timestamp.</li> <li>View source on /blueprint and compare to /.</li> </ol> <h3>Expected behavior</h3> <title>The Blueprint | Growth Systems Engineering by J Blue Productions

Page-level SEO fields override the site-level defaults when present; site-level values are used only as a fallback.

Actual behavior

Image

The /blueprint head is byte-identical to the / head. Same on every other page.

/ head:

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'none'; img-src 'self' data: https:; media-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline'; worker-src 'self' blob:;">
  <title>J Blue Productions | Growth Systems Engineering</title>
  <meta name="description" content="J Blue finds where growing companies are losing time, money, or unrealized value, then builds the systems that fix it. Strategy, systems, brand, operations, and measurement designed to work together.">
  <link rel="icon" href="/uploads/FzTLyW9YfYTcXuFgCVEoM-A2_mark_small.svg">
  <link rel="stylesheet" href="/_instatic/css/reset-c24c98af0f96.css">
  <link rel="stylesheet" href="/_instatic/css/framework-e790a27104d3.css">
  <link rel="stylesheet" href="/_instatic/css/userStyles-b5ec6074d330.css">
</head>

/blueprint head (page SEO title and description are set in the page panel, see screenshot):

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'none'; img-src 'self' data: https:; media-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline'; worker-src 'self' blob:;">
  <title>J Blue Productions | Growth Systems Engineering</title>
  <meta name="description" content="J Blue finds where growing companies are losing time, money, or unrealized value, then builds the systems that fix it. Strategy, systems, brand, operations, and measurement designed to work together.">
  <link rel="icon" href="/uploads/FzTLyW9YfYTcXuFgCVEoM-A2_mark_small.svg">
  <link rel="stylesheet" href="/_instatic/css/reset-c24c98af0f96.css">
  <link rel="stylesheet" href="/_instatic/css/framework-e790a27104d3.css">
  <link rel="stylesheet" href="/_instatic/css/userStyles-b5ec6074d330.css">
</head>

Version or commit

local Docker build ("dev" / revision "unknown"), built from main on 2026-09-07, includes #476 and #480

Deployment mode

Docker Compose with Postgres

Logs or screenshots

bash
Environment is Docker with PostgreSQL 16 backend; pages were created via Super Import from a static HTML export and then edited in the admin; Publishing shows Site /, Draft source Database. If a fix isn't near-term, is the intended workaround a plugin on the publish.html filter reading each page's SEO cells via api.cms.content? If so, which field ids hold the page SEO title and description?