From bef2917e4c2ad37e1001ed9bcfaece11abef16b6 Mon Sep 17 00:00:00 2001 From: vfanucci Date: Tue, 19 May 2026 09:31:44 +0200 Subject: [PATCH 1/3] seo: add SoftwareApplication schema on homepage, enterprise, pricing, features Adds a reusable SchemaSoftwareApplication.astro component and injects it on the four highest-traffic product pages. Gives AI agents and search crawlers a machine-parseable description of Kestra as a software product, including category, license, supported platforms, and offers per tier. Identified as priority 1 in the Agents Taskforce Pillar 1 audit. --- .../common/SchemaSoftwareApplication.astro | 65 +++++++++++++++++++ src/pages/enterprise/index.astro | 8 +++ src/pages/features/index.astro | 7 ++ src/pages/index.astro | 6 ++ src/pages/pricing/index.astro | 5 ++ 5 files changed, 91 insertions(+) create mode 100644 src/components/common/SchemaSoftwareApplication.astro diff --git a/src/components/common/SchemaSoftwareApplication.astro b/src/components/common/SchemaSoftwareApplication.astro new file mode 100644 index 00000000000..b70ef0185ed --- /dev/null +++ b/src/components/common/SchemaSoftwareApplication.astro @@ -0,0 +1,65 @@ +--- +interface Props { + name?: string + description?: string + url?: string +} + +const { name, description, url } = Astro.props + +const canonicalUrl = + url ?? new URL(Astro.url.pathname, Astro.site ?? "https://kestra.io").toString().replace(/\/$/, "") + +const schema = { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + "@id": "https://kestra.io/#software", + "name": name ?? "Kestra", + "url": canonicalUrl, + "description": + description ?? + "Open-source workflow orchestration platform for data pipelines, infrastructure automation, and AI workflows. YAML-native, language-agnostic, 1200+ plugins.", + "applicationCategory": "DeveloperApplication", + "applicationSubCategory": "Workflow Orchestration", + "operatingSystem": "Linux, macOS, Windows, Docker, Kubernetes", + "softwareVersion": "1.0", + "downloadUrl": "https://github.com/kestra-io/kestra", + "author": { "@id": "https://kestra.io/#organization" }, + "publisher": { "@id": "https://kestra.io/#organization" }, + "license": "https://www.apache.org/licenses/LICENSE-2.0", + "offers": [ + { + "@type": "Offer", + "name": "Kestra Open Source", + "price": "0", + "priceCurrency": "USD", + "availability": "https://schema.org/InStock", + "url": "https://github.com/kestra-io/kestra", + }, + { + "@type": "Offer", + "name": "Kestra Cloud", + "priceSpecification": { + "@type": "UnitPriceSpecification", + "priceType": "https://schema.org/InvoicePrice", + "description": "Pay only for what you use", + }, + "availability": "https://schema.org/InStock", + "url": "https://kestra.io/pricing", + }, + { + "@type": "Offer", + "name": "Kestra Enterprise Edition", + "priceSpecification": { + "@type": "UnitPriceSpecification", + "priceType": "https://schema.org/InvoicePrice", + "description": "Annual subscription — contact sales", + }, + "availability": "https://schema.org/InStock", + "url": "https://kestra.io/demo", + }, + ], +} +--- + +