diff --git a/apps/site/src/app/layout.tsx b/apps/site/src/app/layout.tsx
index 0ebdc6ea8e..97e9fb4e99 100644
--- a/apps/site/src/app/layout.tsx
+++ b/apps/site/src/app/layout.tsx
@@ -1,4 +1,6 @@
import { Provider } from "@/components/provider";
+import { JsonLd } from "@/components/json-ld";
+import { createSiteStructuredData } from "@/lib/structured-data";
import { getBaseUrl } from "@/lib/url";
import "./global.css";
import { Inter } from "next/font/google";
@@ -47,6 +49,8 @@ const themeInitScript = `
})();
`;
+const siteStructuredData = createSiteStructuredData();
+
function baseOptions() {
return {
nav: {
@@ -58,32 +62,27 @@ function baseOptions() {
sub: [
{
text: "Postgres",
- url: "https://www.prisma.io/postgres",
+ url: "/postgres",
desc: "Managed Postgres for global workloads",
icon: "fa-regular fa-chart-pyramid",
},
{
text: "ORM",
- url: "https://www.prisma.io/orm",
+ url: "/orm",
desc: "Managed Postgres for global workloads",
icon: "fa-regular fa-database",
},
{
text: "Studio",
icon: "fa-regular fa-table",
- url: "https://www.prisma.io/studio",
+ url: "/studio",
desc: "Explore and manipulate your data",
},
- {
- icon: "fa-regular fa-bolt",
- text: "Accelerate",
- desc: "Make your database global",
- url: "https://www.prisma.io/accelerate",
- },
+
],
},
{
- url: "https://www.prisma.io/pricing",
+ url: "/pricing",
text: "Pricing",
},
{
@@ -92,7 +91,7 @@ function baseOptions() {
sub: [
{
text: "MCP",
- url: "https://www.prisma.io/mcp",
+ url: "/mcp",
icon: "fa-regular fa-message-code",
},
{
@@ -113,17 +112,17 @@ function baseOptions() {
},
{
text: "Stack",
- url: "https://www.prisma.io/stack",
+ url: "/stack",
icon: "fa-regular fa-layer-group",
},
{
text: "Ecosystem",
- url: "https://www.prisma.io/ecosystem",
+ url: "/ecosystem",
icon: "fa-regular fa-globe",
},
{
text: "Customer stories",
- url: "https://www.prisma.io/showcase",
+ url: "/showcase",
icon: "fa-regular fa-users",
},
{
@@ -135,7 +134,7 @@ function baseOptions() {
],
},
{
- url: "/docs",
+ url: "https://www.prisma.io/docs",
text: "Docs",
},
{
@@ -152,6 +151,36 @@ export default function Layout({ children }: { children: React.ReactNode }) {
+
+
+
+
+
+
diff --git a/apps/site/src/app/migrate/page.tsx b/apps/site/src/app/migrate/page.tsx
index 19401ee736..9869ea204c 100644
--- a/apps/site/src/app/migrate/page.tsx
+++ b/apps/site/src/app/migrate/page.tsx
@@ -1,15 +1,14 @@
-import type { Metadata } from "next";
-import {
- SITE_HOME_DESCRIPTION,
- SITE_HOME_TITLE,
-} from "../../lib/blog-metadata";
+import { createPageMetadata } from "@/lib/page-metadata";
import { Action, Button, Card } from "@prisma/eclipse";
import HeroCode, { HeroCodeStep } from "@/components/migrate/hero-code";
-export const metadata: Metadata = {
- title: SITE_HOME_TITLE,
- description: SITE_HOME_DESCRIPTION,
-};
+export const metadata = createPageMetadata({
+ title: "Prisma Migrate | Schema-driven SQL database migrations",
+ description:
+ "Prisma Migrate turns schema changes into SQL migrations with safe, repeatable workflows for local development, CI, and production.",
+ path: "/migrate",
+ ogImage: "/og/og-migrate.png",
+});
const migrateSteps: HeroCodeStep[] = [
{
@@ -101,7 +100,7 @@ export default function Migrate() {
diff --git a/apps/site/src/app/newsletter/page.tsx b/apps/site/src/app/newsletter/page.tsx
index c2bc9be9d3..c8c573d68b 100644
--- a/apps/site/src/app/newsletter/page.tsx
+++ b/apps/site/src/app/newsletter/page.tsx
@@ -1,4 +1,4 @@
-import type { Metadata } from "next";
+import { createPageMetadata } from "@/lib/page-metadata";
import Image from "next/image";
import Link from "next/link";
import {
@@ -10,14 +10,13 @@ import {
} from "@prisma/eclipse";
import { NewsletterSignup } from "./newsletter-signup";
-export const metadata: Metadata = {
+export const metadata = createPageMetadata({
title: "Newsletter | Prisma",
description:
- "Get release updates, tutorials, and more content delivered to your inbox monthly.",
- alternates: {
- canonical: "https://www.prisma.io/newsletter",
- },
-};
+ "Subscribe for monthly Prisma release notes, tutorials, and product updates covering ORM, Postgres, and the developer ecosystem.",
+ path: "/newsletter",
+ ogImage: "/og/og-newsletter.png",
+});
type RssItem = {
title: string;
diff --git a/apps/site/src/app/orm/page.tsx b/apps/site/src/app/orm/page.tsx
index 3d84c46a34..67d9c31057 100644
--- a/apps/site/src/app/orm/page.tsx
+++ b/apps/site/src/app/orm/page.tsx
@@ -1,8 +1,4 @@
-import type { Metadata } from "next";
-import {
- SITE_HOME_DESCRIPTION,
- SITE_HOME_TITLE,
-} from "../../lib/blog-metadata";
+import { createPageMetadata } from "@/lib/page-metadata";
import { Action, Button, Card, Separator } from "@prisma/eclipse";
import { Bento } from "@/components/homepage/bento";
import { CardSection } from "@/components/homepage/card-section/card-section";
@@ -39,6 +35,9 @@ const badge_list = [
],
},
];
+const prismaPostgresQuickstartUrl =
+ "https://www.prisma.io/docs/getting-started/prisma-orm/quickstart/prisma-postgres";
+
const CardFooter = () => (
<>
@@ -214,7 +213,7 @@ const twoCol_3 = [
description:
"Prisma ORM provides the strongest type-safety guarantees of all the ORMs in the TypeScript ecosystem.",
btn: {
- url: "/docs/orm/more/comparisons/prisma-and-typeorm",
+ url: "https://www.prisma.io/docs/orm/more/comparisons/prisma-and-typeorm",
label: "Read comparison with TypeORM",
icon: "fa-regular fa-arrow-up-right",
},
@@ -236,7 +235,7 @@ const features = [
image: "/illustrations/orm/typesafe",
alt: "Type-safe queries",
icon: "fa-light fa-message-text",
- link: "https://prisma.io/docs/orm/prisma-client/type-safety",
+ link: "https://www.prisma.io/docs/orm/prisma-client/type-safety",
},
{
title: "Data model you can read",
@@ -256,10 +255,13 @@ const features = [
},
];
-export const metadata: Metadata = {
- title: SITE_HOME_TITLE,
- description: SITE_HOME_DESCRIPTION,
-};
+export const metadata = createPageMetadata({
+ title: "Prisma ORM | Next-generation database toolkit for TypeScript",
+ description:
+ "Prisma ORM combines a clean schema, type-safe queries, and developer-friendly workflows for building with Postgres and other databases in TypeScript.",
+ path: "/orm",
+ ogImage: "/og/og-orm.png",
+});
export default function ORM() {
return (
@@ -277,7 +279,7 @@ export default function ORM() {