From b36d012a01388cc9b152d71bb0a94eb2061ea0bd Mon Sep 17 00:00:00 2001 From: engineer Date: Thu, 4 Jun 2026 00:24:54 +0200 Subject: [PATCH] feat: add SoftwareApplication JSON-LD to skill detail pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Emit schema.org SoftwareApplication structured data on each skill detail page so search engines can surface rich results. - lib/jsonLd.ts builds the markup from real catalog fields only - No aggregateRating/review and no install counts — we have no honest source, so they are deliberately absent - license emitted only for real SPDX ids; offers only when a real price exists (free/per-use/one-time); 0.0.0 pre-release version omitted Co-Authored-By: Claude Opus 4.8 (1M context) Co-authored-by: multica-agent --- app/skills/[slug]/page.tsx | 7 +++ lib/jsonLd.ts | 109 +++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 lib/jsonLd.ts diff --git a/app/skills/[slug]/page.tsx b/app/skills/[slug]/page.tsx index 277cd43..1cc0ef5 100644 --- a/app/skills/[slug]/page.tsx +++ b/app/skills/[slug]/page.tsx @@ -4,6 +4,7 @@ import Link from "next/link" import { skills, getSkillBySlug } from "@/lib/skills" import { LICENSE_LABEL } from "@/lib/types" import { agenticUrl, priceDisplay } from "@/lib/x402" +import { skillJsonLd } from "@/lib/jsonLd" import { PlatformBadge } from "@/components/PlatformBadge" import { CopyButton } from "@/components/CopyButton" import { SkillCard } from "@/components/SkillCard" @@ -57,6 +58,12 @@ export default async function SkillDetailPage({ params }: Props) { return (
+ {/* schema.org SoftwareApplication structured data for rich results */} +