From ca7693b4f7ae19927bd1d9f7a1ad71468fc2abfa Mon Sep 17 00:00:00 2001 From: Ben Holmes Date: Wed, 11 Mar 2026 09:04:37 +0000 Subject: [PATCH] =?UTF-8?q?feat(www):=20SEO/AEO=20audit=20=E2=80=94=20add?= =?UTF-8?q?=20sitemap,=20robots.txt,=20structured=20data,=20and=20improved?= =?UTF-8?q?=20meta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add site property to astro.config.mjs to enable sitemap generation and canonical URLs - Add robots.txt with sitemap reference - Add global WebSite JSON-LD schema and og:site_name meta tag - Add SoftwareSourceCode JSON-LD to store, scope, and query pages - Improve homepage title and description for search/AI discoverability - Rewrite homepage intro with answer-first format for AEO - Improve meta descriptions on all pages (keyword-rich, 150-160 chars) - Mark deprecated packages (stream, form) clearly in descriptions Co-Authored-By: Oz --- www/astro.config.mjs | 31 +++++++++++++++++++++++++++++ www/public/robots.txt | 4 ++++ www/src/content/docs/form/index.mdx | 2 +- www/src/content/docs/index.mdx | 11 ++++------ www/src/content/docs/query.mdx | 21 ++++++++++++++++++- www/src/content/docs/scope.mdx | 21 ++++++++++++++++++- www/src/content/docs/store.mdx | 21 ++++++++++++++++++- www/src/content/docs/stream.md | 2 +- 8 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 www/public/robots.txt diff --git a/www/astro.config.mjs b/www/astro.config.mjs index 0d7e4c1..3e61bf4 100644 --- a/www/astro.config.mjs +++ b/www/astro.config.mjs @@ -2,9 +2,40 @@ import starlight from "@astrojs/starlight"; import { defineConfig } from "astro/config"; export default defineConfig({ + site: "https://simple-stack.dev", integrations: [ starlight({ title: "Simple Stack 🌱", + head: [ + { + tag: "meta", + attrs: { + property: "og:site_name", + content: "Simple Stack", + }, + }, + { + tag: "script", + attrs: { type: "application/ld+json" }, + content: JSON.stringify({ + "@context": "https://schema.org", + "@type": "WebSite", + name: "Simple Stack", + url: "https://simple-stack.dev", + description: + "A collection of lightweight developer tools for building simpler web apps with Astro, React, and Vite.", + author: { + "@type": "Person", + name: "Ben Holmes", + url: "https://bholmes.dev", + sameAs: [ + "https://github.com/bholmesdev", + "https://twitter.com/babormedev", + ], + }, + }), + }, + ], social: [ { icon: "github", diff --git a/www/public/robots.txt b/www/public/robots.txt new file mode 100644 index 0000000..3214756 --- /dev/null +++ b/www/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://simple-stack.dev/sitemap-index.xml diff --git a/www/src/content/docs/form/index.mdx b/www/src/content/docs/form/index.mdx index 3e1654e..631d7fc 100644 --- a/www/src/content/docs/form/index.mdx +++ b/www/src/content/docs/form/index.mdx @@ -1,6 +1,6 @@ --- title: Simple form -description: The simple way to validate forms in your fullstack app. +description: "[Deprecated] simple-stack-form provided Zod-based form validation for Astro apps. Use Astro Form Actions for server validation and client validation instead." sidebar: label: Get started order: 1 diff --git a/www/src/content/docs/index.mdx b/www/src/content/docs/index.mdx index 1e6d15c..c0f1d81 100644 --- a/www/src/content/docs/index.mdx +++ b/www/src/content/docs/index.mdx @@ -1,15 +1,12 @@ --- -title: Simple stack 🌱 -description: A suite of tools built for Astro to simplify your workflow. +title: Simple Stack – Lightweight Developer Tools for the Modern Web +description: "Simple Stack is a collection of lightweight, open-source developer tools by Ben Holmes. Includes a reactive store, scoped IDs plugin, and DOM query library for Astro, React, and Vite." tableOfContents: false -head: - - tag: title - content: Simple stack 🌱 --- -A collection of tools I've built to **make web development simpler.** +Simple Stack is a collection of lightweight, open-source JavaScript tools designed to **make web development simpler.** Built by [Ben Holmes](https://bholmes.dev), each package solves a focused use case — reactive state management, scoped element IDs, and DOM querying — without unnecessary complexity. -To be honest, there isn't a "story" connecting these packages together (I'm no TanStack). But they follow a common theme: solve a simple use case without too many features. +These packages share a common theme: solve a simple use case without too many features. import { CardGrid, Card, LinkCard } from '@astrojs/starlight/components'; diff --git a/www/src/content/docs/query.mdx b/www/src/content/docs/query.mdx index 5549582..d99e1cd 100644 --- a/www/src/content/docs/query.mdx +++ b/www/src/content/docs/query.mdx @@ -1,6 +1,25 @@ --- title: 💰 Simple Query -description: A simple library to query the DOM from your Astro components. +description: "@simplestack/query is an Astro integration for scoped DOM queries in components. Use data-target selectors, signal-based state, and server data passing with zero boilerplate." +head: + - tag: script + attrs: + type: application/ld+json + content: | + { + "@context": "https://schema.org", + "@type": "SoftwareSourceCode", + "name": "@simplestack/query", + "description": "An Astro integration for scoped DOM queries with data-target selectors and signal-based state.", + "codeRepository": "https://github.com/bholmesdev/simplestack-query", + "programmingLanguage": "TypeScript", + "runtimePlatform": "Node.js", + "author": { + "@type": "Person", + "name": "Ben Holmes", + "url": "https://bholmes.dev" + } + } --- import { Tabs, TabItem, LinkCard } from '@astrojs/starlight/components'; diff --git a/www/src/content/docs/scope.mdx b/www/src/content/docs/scope.mdx index 93740de..c605cbd 100644 --- a/www/src/content/docs/scope.mdx +++ b/www/src/content/docs/scope.mdx @@ -1,6 +1,25 @@ --- title: 🔎 Simple scope -description: Get a scoped ID for whatever file you're in. Resolved at build-time with zero client JS. +description: "vite-plugin-simple-scope generates unique, scoped IDs per file at build time with zero client JavaScript. Works with Astro, Nuxt, SvelteKit, and any Vite framework." +head: + - tag: script + attrs: + type: application/ld+json + content: | + { + "@context": "https://schema.org", + "@type": "SoftwareSourceCode", + "name": "vite-plugin-simple-scope", + "description": "A Vite plugin that generates scoped IDs per file at build time with zero client JS.", + "codeRepository": "https://github.com/bholmesdev/simplestack-scope", + "programmingLanguage": "TypeScript", + "runtimePlatform": "Node.js", + "author": { + "@type": "Person", + "name": "Ben Holmes", + "url": "https://bholmes.dev" + } + } --- import { LinkCard } from '@astrojs/starlight/components'; diff --git a/www/src/content/docs/store.mdx b/www/src/content/docs/store.mdx index cda86d1..81bd5f7 100644 --- a/www/src/content/docs/store.mdx +++ b/www/src/content/docs/store.mdx @@ -1,9 +1,28 @@ --- title: 💾 Simple store -description: A reactive store that combines the simplicity of signals with the power of "selectors" you'd find in Zustand or Redux. +description: "@simplestack/store is a lightweight reactive state management library for React and Next.js. Combines the simplicity of signals with Zustand-style selectors for fine-grained updates." sidebar: label: Get started order: 1 +head: + - tag: script + attrs: + type: application/ld+json + content: | + { + "@context": "https://schema.org", + "@type": "SoftwareSourceCode", + "name": "@simplestack/store", + "description": "A lightweight reactive store combining signal simplicity with Zustand-style selectors for React and Next.js.", + "codeRepository": "https://github.com/bholmesdev/simplestack-store", + "programmingLanguage": "TypeScript", + "runtimePlatform": "Node.js", + "author": { + "@type": "Person", + "name": "Ben Holmes", + "url": "https://bholmes.dev" + } + } --- import { LinkCard, Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/www/src/content/docs/stream.md b/www/src/content/docs/stream.md index 5c734fb..0e3402d 100644 --- a/www/src/content/docs/stream.md +++ b/www/src/content/docs/stream.md @@ -1,6 +1,6 @@ --- title: Simple stream 🌊 -description: Suspend Astro components with fallback content. Like React Server Components, but Just HTML ™️ +description: "[Deprecated] simple-stack-stream suspended Astro components with fallback content, similar to React Server Components. Use Astro Server Islands instead." --- :::caution