diff --git a/apps/web/src/app/about/page.tsx b/apps/web/src/app/about/page.tsx index 0384e4b..cf4af54 100644 --- a/apps/web/src/app/about/page.tsx +++ b/apps/web/src/app/about/page.tsx @@ -8,14 +8,14 @@ import { FaXTwitter, FaTelegram, FaDiscord, FaBluesky, FaTiktok, FaYoutube, FaIn import type { Metadata } from "next"; export const metadata: Metadata = { - title: "About | Such Software", - description: "Software studio in Kennett Square, PA. Founded by John Winter Murphy, specializing in accessible web engineering and WCAG 2.2 compliance.", + title: "About: A Kennett Square, PA Software Studio | Such Software", + description: "Such Software is a Kennett Square, PA studio founded by John Winter Murphy, building accessible web apps, crypto tools, and games with WCAG 2.2 compliance.", alternates: { canonical: "/about", }, openGraph: { - title: "About | Such Software", - description: "Software studio in Kennett Square, PA. Founded by John Winter Murphy, specializing in accessible web engineering and WCAG 2.2 compliance.", + title: "About: A Kennett Square, PA Software Studio | Such Software", + description: "Such Software is a Kennett Square, PA studio founded by John Winter Murphy, building accessible web apps, crypto tools, and games with WCAG 2.2 compliance.", type: "website", }, }; diff --git a/apps/web/src/app/apps/page.tsx b/apps/web/src/app/apps/page.tsx index adb77a7..d6a7dea 100644 --- a/apps/web/src/app/apps/page.tsx +++ b/apps/web/src/app/apps/page.tsx @@ -7,12 +7,12 @@ import Link from "next/link"; import type { Metadata } from "next"; export const metadata: Metadata = { - title: "Apps | Such Software", - description: "Download our apps on App Store and Google Play.", + title: "Our Apps: Games & Tools for iOS, Android & Web | Such Software", + description: "Download Such Software's apps and games: Bauhaus Echo, Suchoice, Vegan IQ, Such Moon Launch, and more. Free on the App Store, Google Play, and the web.", alternates: { canonical: "/apps" }, openGraph: { - title: "Such Software Apps", - description: "Download our apps on App Store and Google Play.", + title: "Our Apps: Games & Tools for iOS, Android & Web | Such Software", + description: "Download Such Software's apps and games: Bauhaus Echo, Suchoice, Vegan IQ, Such Moon Launch, and more. Free on the App Store, Google Play, and the web.", type: "website", images: [{ url: "/images/branding/OG_banner_v2_light.png", width: 1200, height: 630, alt: "Such Software" }], }, diff --git a/apps/web/src/app/blog/[slug]/page.tsx b/apps/web/src/app/blog/[slug]/page.tsx index fd2bac6..08559d0 100644 --- a/apps/web/src/app/blog/[slug]/page.tsx +++ b/apps/web/src/app/blog/[slug]/page.tsx @@ -13,6 +13,7 @@ import type { Metadata } from "next"; import { notFound } from "next/navigation"; import { MDXRemote } from "next-mdx-remote/rsc"; import { getAllSlugs, getPost } from "@/lib/blog"; +import { JsonLd, articleLd, breadcrumbLd } from "@/components/seo/json-ld"; type Props = { params: Promise<{ slug: string }> }; @@ -50,6 +51,12 @@ export default async function BlogPost({ params }: Props) { return (
+ +
diff --git a/apps/web/src/app/blog/page.tsx b/apps/web/src/app/blog/page.tsx index 8e72a0d..c2114e4 100644 --- a/apps/web/src/app/blog/page.tsx +++ b/apps/web/src/app/blog/page.tsx @@ -6,12 +6,12 @@ import type { Metadata } from "next"; import { getAllPosts } from "@/lib/blog"; export const metadata: Metadata = { - title: "Blog | Such Software", - description: "News, updates, and technical articles from Such Software.", + title: "Blog: Build Notes on Crypto, Commerce & Apps | Such Software", + description: "Technical write-ups from Such Software on provably-fair games, Monero tooling, custom e-commerce, and the apps we ship.", alternates: { canonical: "/blog" }, openGraph: { - title: "Blog | Such Software", - description: "News, updates, and technical articles from Such Software.", + title: "Blog: Build Notes on Crypto, Commerce & Apps | Such Software", + description: "Technical write-ups from Such Software on provably-fair games, Monero tooling, custom e-commerce, and the apps we ship.", type: "website", }, }; diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index 150a4f3..7274c2a 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -9,14 +9,14 @@ const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { metadataBase: new URL("https://such.software"), - title: "Such Software | Precision Engineering for Everyone", - description: "E-commerce infrastructure, custom app development, and accessible web applications. Engineered for scale, compliance, and performance.", + title: "Custom E-Commerce, App & Crypto Development | Such Software", + description: "Such Software is a Kennett Square, PA studio building custom online stores, web apps, mobile games, and Monero & crypto tools. Start a project today.", alternates: { canonical: "/", }, openGraph: { - title: "Such Software", - description: "E-commerce infrastructure, custom app development, and accessible web applications.", + title: "Such Software: Custom E-Commerce, Apps & Crypto Development", + description: "A Kennett Square, PA software studio building custom online stores, web apps, mobile games, and Monero & crypto tools.", type: "website", siteName: "Such Software", images: [ @@ -30,8 +30,8 @@ export const metadata: Metadata = { }, twitter: { card: "summary_large_image", - title: "Such Software", - description: "E-commerce infrastructure, custom app development, and accessible web applications.", + title: "Such Software: Custom E-Commerce, Apps & Crypto Development", + description: "A Kennett Square, PA software studio building custom online stores, web apps, mobile games, and Monero & crypto tools.", images: ["/images/branding/OG_banner_v2_light.png"], }, icons: { @@ -86,6 +86,14 @@ const structuredData = { ], }; +const websiteData = { + "@context": "https://schema.org", + "@type": "WebSite", + name: "Such Software", + url: "https://such.software", + publisher: { "@type": "Organization", name: "Such Software LLC" }, +}; + export default function RootLayout({ children, }: Readonly<{ @@ -98,6 +106,10 @@ export default function RootLayout({ type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }} /> +