Files
hanzo.ai/lib/meta-layout.tsx
zooqueenandHanzo Dev 4c371edc4c seo: 33 of 53 indexed pages shared one title — 17 of them now say what they are
Measured on production: every URL in sitemap.xml, titles compared. Thirty-three
of the fifty-three served the root fallback, "Hanzo — the AI cloud for agents
and apps". Nearly two thirds of the indexed brand site was indistinguishable in
a search result, in a browser tab, and in a shared link.

Same structural cause as hanzo.app's four: these pages are 'use client', and a
client component CANNOT `export const metadata` — it is a server-only export,
so writing one is silently ignored rather than an error and the page inherits
the root. Nothing fails, nothing warns.

THE TITLES ARE THE PAGES' OWN WORDS. Each was lifted from the rendered <h1> and
its lede — /mcp already calls itself "The Model Context Protocol, hosted" and
/cli "A senior engineer in your shell". Writing fresh copy for search would make
each page describe itself one way to a reader and another to Google, which is
two pages.

`pageMeta` exists because the pattern this repo already had (see contact/layout)
types the title and description THREE times each — plain, OpenGraph, Twitter. A
fix to one is a fix to three, and the third is the one nobody edits. Across 33
pages that is a hundred strings free to disagree. Said once now.

SEVENTEEN of the thirty-three, not all: these are the product pages whose <h1>
and lede state plainly what they are, so the metadata is derived rather than
invented. The remaining sixteen — /affiliate /ai-studio /auto /automations
/cookies /docs/sdk /gallery /insights /jin /open-source-fund /operative
/overview /privacy /sms-opt-in /terms /world — need copy written or read, and
guessing at them is how a marketing site ends up describing itself in sentences
nobody approved.

Noted while reading: /download's live <h1> is "Everything you love,across every
app." — a missing space, on the page itself. The metadata says it correctly;
the heading still needs fixing at the source.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-08 10:20:00 -07:00

15 lines
570 B
TypeScript

import type { ReactNode } from 'react'
/**
* Passthrough layout body for client-component marketing pages that need static
* <head> metadata.
*
* It renders children unchanged — no element, no wrapper, nothing in the DOM —
* so a route can gain a `layout.tsx` purely to carry `metadata` without any
* chance of shifting what the page looks like. That property is the whole point:
* adding a title should be invisible on the page and visible only in the tab.
*/
export default function MetaLayout({ children }: { children: ReactNode }) {
return children
}