ShipNext

Add A Static Page

Add a public page, SEO metadata, translations, and navigation entries.

Public pages should live in the marketing route group. Keep user-facing copy in translation files when the rest of the product uses i18n.

Create the route

Create a page such as:

app/(marketing)/features/page.tsx

Use existing pages like contact and pricing as references.

For internal links, use the project's preferred navigation component. Do not manually add locale prefixes unless the route layer requires them.

import Link from "next/link";

export default function FeaturesPage() {
  return <Link href="/pricing">View pricing</Link>;
}

Add page SEO

Add a page entry to the SEO config if the project uses centralized metadata:

export const seoPageConfig = {
  home: { path: "/" },
  pricing: { path: "/pricing" },
  contact: { path: "/contact" },
  blog: { path: "/blog" },
  features: { path: "/features" },
} as const;

Then use the metadata helper in the page.

Add translations

For production pages, avoid hardcoding user-facing copy if the product uses message JSON files.

Add keys to:

src/i18n/messages/en/seo.json
src/i18n/messages/zh/seo.json

Create a new namespace if the page needs substantial copy.

Add entry points

If the page belongs in nav, footer, or home sections, update the relevant component or config. Keep hrefs language-independent where possible.

Verify the route, metadata, and links before shipping.

On this page