diff --git a/app/layout.tsx b/app/layout.tsx
index 16a6a06..185d7f5 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -51,9 +51,14 @@ export const metadata: Metadata = {
type: "website",
siteName: "CODERCOPS Tools",
url: "https://tools.codercops.com",
+ locale: "en_US",
+ title: "CODERCOPS Tools โ Developer Utilities",
+ description:
+ "Free, fast, privacy-first developer tools: JSON formatter, JWT decoder, Base64 encoder, and more. Runs entirely in your browser.",
},
twitter: {
card: "summary_large_image",
+ site: "@codercops",
creator: "@codercops",
},
};
diff --git a/app/page.tsx b/app/page.tsx
index 88c2e8e..d8ab0a4 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,11 +1,24 @@
+import type { Metadata } from "next";
import { ToolCard } from "@/components/shared/ToolCard";
import { CtaBanner } from "@/components/shared/CtaBanner";
import { Footer } from "@/components/shared/Footer";
import { TOOLS } from "@/lib/tools";
+import { homeJsonLd } from "@/lib/jsonLd";
+
+// Only the canonical is set here; title, description, and OpenGraph are inherited
+// from the root layout (Next merges metadata shallowly, so re-declaring openGraph
+// would drop the root's siteName/locale/type from the homepage).
+export const metadata: Metadata = {
+ alternates: { canonical: "/" },
+};
export default function HomePage() {
return (
<>
+
diff --git a/components/shared/ToolPageLayout.tsx b/components/shared/ToolPageLayout.tsx
index d2fffe8..10a45ab 100644
--- a/components/shared/ToolPageLayout.tsx
+++ b/components/shared/ToolPageLayout.tsx
@@ -1,5 +1,6 @@
+import Link from "next/link";
import { cn } from "@/lib/cn";
-import { toolJsonLd } from "@/lib/toolMetadata";
+import { toolJsonLd, breadcrumbJsonLd, faqJsonLd } from "@/lib/jsonLd";
import type { Tool } from "@/lib/tools";
import { CtaBanner } from "./CtaBanner";
import { Faq } from "./Faq";
@@ -29,18 +30,41 @@ export function ToolPageLayout({
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(toolJsonLd(tool)) }}
/>
+
+ {tool.faqs.length > 0 && (
+
+ )}
-
-
- /{tool.slug}
-
-
-
- {tool.heroBreadcrumb}
+ {/* The breadcrumb trail is only Home > Tool (matching the JSON-LD). The
+ heroBreadcrumb tagline sits outside the