From 2f5aac578202ef5a01233638ae0983605ddd0de1 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Wed, 5 Nov 2025 12:03:00 -0500 Subject: [PATCH 1/3] Add Schema.org JSON-LD metadata to workflow pages Adds structured data to workflow detail pages to improve discoverability in Google Scholar and academic search engines. Each workflow page now includes JSON-LD with DOI, creators (with ORCID), license, keywords, and version information. This should enable citation tracking and make workflows searchable alongside academic publications, similar to how GTN tutorials appear in Google Scholar. --- website/src/layouts/BaseLayout.astro | 3 + website/src/pages/workflow/[id].astro | 10 +++ website/src/utils/jsonld.ts | 118 ++++++++++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 website/src/utils/jsonld.ts diff --git a/website/src/layouts/BaseLayout.astro b/website/src/layouts/BaseLayout.astro index 47201548df..fb0667be85 100644 --- a/website/src/layouts/BaseLayout.astro +++ b/website/src/layouts/BaseLayout.astro @@ -60,6 +60,9 @@ const { + + + diff --git a/website/src/pages/workflow/[id].astro b/website/src/pages/workflow/[id].astro index 02fa224c17..d23c43e79b 100644 --- a/website/src/pages/workflow/[id].astro +++ b/website/src/pages/workflow/[id].astro @@ -3,6 +3,7 @@ import BaseLayout from "../../layouts/BaseLayout.astro"; import IWCHeader from "../../components/IWCHeader.astro"; import WorkflowContent from "../../components/WorkflowContent.vue"; import { loadManifest, getAllWorkflows } from "../../utils/manifest"; +import { generateWorkflowJsonLd, serializeJsonLd } from "../../utils/jsonld"; import type { Workflow } from "../../models/workflow"; export async function getStaticPaths() { @@ -22,6 +23,10 @@ const { workflow } = Astro.props as { workflow: Workflow }; const baseUrl = "https://iwc.galaxyproject.org"; const workflowName = workflow.definition?.name || "Workflow Details"; const description = workflow.definition.annotation || "Galaxy workflow"; + +// Generate JSON-LD structured data for SEO and academic discoverability +const jsonLd = generateWorkflowJsonLd(workflow, baseUrl); +const jsonLdScript = serializeJsonLd(jsonLd); --- + + +