From 939e77dbae3c974507513f5c8f384d308d9607b8 Mon Sep 17 00:00:00 2001 From: Ben Holmes Date: Mon, 16 Mar 2026 09:06:20 +0000 Subject: [PATCH] SEO/AEO audit: improve titles, descriptions, structured data, and crawlability - Add site property to astro.config.mjs for canonical URLs, sitemap, and OG tags - Add Organization JSON-LD structured data via Starlight head config - Create robots.txt pointing to sitemap - Improve homepage title and description for search visibility - Remove emojis from page titles, keep in sidebar labels only - Add noindex meta to deprecated pages (Stream, Form) - Improve meta descriptions with specific, compelling copy - Add answer-first summaries to Store, Scope, and Query pages for AEO Co-Authored-By: Oz --- www/astro.config.mjs | 17 +++++++++++++++++ www/public/robots.txt | 4 ++++ www/src/content/docs/form/client.md | 9 +++++++-- www/src/content/docs/form/index.mdx | 9 +++++++-- www/src/content/docs/form/parse.md | 9 +++++++-- www/src/content/docs/index.mdx | 11 ++++------- www/src/content/docs/query.mdx | 8 +++++--- www/src/content/docs/scope.mdx | 8 +++++--- www/src/content/docs/store.mdx | 8 ++++---- www/src/content/docs/stream.md | 11 +++++++++-- 10 files changed, 69 insertions(+), 25 deletions(-) create mode 100644 www/public/robots.txt diff --git a/www/astro.config.mjs b/www/astro.config.mjs index 0d7e4c1..ddc639a 100644 --- a/www/astro.config.mjs +++ b/www/astro.config.mjs @@ -2,6 +2,7 @@ import starlight from "@astrojs/starlight"; import { defineConfig } from "astro/config"; export default defineConfig({ + site: "https://simple-stack.dev", integrations: [ starlight({ title: "Simple Stack 🌱", @@ -13,6 +14,22 @@ export default defineConfig({ }, { icon: "discord", label: "Discord", href: "https://wtw.dev/chat" }, ], + head: [ + { + tag: "script", + attrs: { type: "application/ld+json" }, + content: JSON.stringify({ + "@context": "https://schema.org", + "@type": "Organization", + name: "Simple Stack", + url: "https://simple-stack.dev", + logo: "https://simple-stack.dev/favicon.svg", + sameAs: [ + "https://github.com/bholmesdev/simple-stack", + ], + }), + }, + ], sidebar: [ { label: "💾 Store", 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/client.md b/www/src/content/docs/form/client.md index 884c722..3cb4d20 100644 --- a/www/src/content/docs/form/client.md +++ b/www/src/content/docs/form/client.md @@ -1,8 +1,13 @@ --- -title: Add client validation -description: Add client validation to your forms +title: Add Client Validation (Deprecated) +description: "Guide for adding client-side validation to Simple Form. This package is no longer maintained." sidebar: order: 3 +head: + - tag: meta + attrs: + name: robots + content: noindex, follow --- :::caution diff --git a/www/src/content/docs/form/index.mdx b/www/src/content/docs/form/index.mdx index 3e1654e..e32f728 100644 --- a/www/src/content/docs/form/index.mdx +++ b/www/src/content/docs/form/index.mdx @@ -1,9 +1,14 @@ --- -title: Simple form -description: The simple way to validate forms in your fullstack app. +title: Simple Form (Deprecated) +description: "Simple Form provided server and client form validation for Astro apps. This package is no longer maintained — use Astro Form Actions instead." sidebar: label: Get started order: 1 +head: + - tag: meta + attrs: + name: robots + content: noindex, follow --- import { Tabs, TabItem } from '@astrojs/starlight/components'; diff --git a/www/src/content/docs/form/parse.md b/www/src/content/docs/form/parse.md index 35116f9..7110540 100644 --- a/www/src/content/docs/form/parse.md +++ b/www/src/content/docs/form/parse.md @@ -1,8 +1,13 @@ --- -title: Parse form requests -description: Validate forms server-side +title: Parse Form Requests (Deprecated) +description: "Guide for server-side form validation with Simple Form. This package is no longer maintained." sidebar: order: 2 +head: + - tag: meta + attrs: + name: robots + content: noindex, follow --- :::caution diff --git a/www/src/content/docs/index.mdx b/www/src/content/docs/index.mdx index 1e6d15c..17cdf51 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 Tools for Astro & React +description: "Simple Stack is a collection of lightweight, zero-config developer tools for Astro and React. Includes a reactive store, scoped IDs, and DOM query utilities." 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 developer tools that **make web development simpler.** Each package solves a focused use case with minimal configuration and a small API surface — a reactive store, scoped IDs, and DOM query utilities for Astro components. -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. +They follow 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..2071b73 100644 --- a/www/src/content/docs/query.mdx +++ b/www/src/content/docs/query.mdx @@ -1,13 +1,15 @@ --- -title: 💰 Simple Query -description: A simple library to query the DOM from your Astro components. +title: Simple Query — DOM Scripting for Astro Components +description: "Simple Query is an Astro integration for scoped DOM queries and client-side interactivity. Target elements with data attributes, pass server data, and use Signals for state." +sidebar: + label: 💰 Simple Query --- import { Tabs, TabItem, LinkCard } from '@astrojs/starlight/components'; -A simple library to query the DOM from your Astro components. +Simple Query (`@simplestack/query`) is an Astro integration that provides scoped DOM queries for your Astro components. Target elements with `data-target` attributes, pass server data to client scripts, and optionally use the TC39 Signals polyfill for reactive state — all without a component framework. ```astro diff --git a/www/src/content/docs/scope.mdx b/www/src/content/docs/scope.mdx index 93740de..c9c5d78 100644 --- a/www/src/content/docs/scope.mdx +++ b/www/src/content/docs/scope.mdx @@ -1,13 +1,15 @@ --- -title: 🔎 Simple scope -description: Get a scoped ID for whatever file you're in. Resolved at build-time with zero client JS. +title: Simple Scope — Build-Time Scoped IDs for Vite +description: "Simple Scope is a Vite plugin that generates deterministic scoped IDs at build time with zero client JS. Works with Astro, Nuxt, SvelteKit, and any Vite framework." +sidebar: + label: 🔎 Simple Scope --- import { LinkCard } from '@astrojs/starlight/components'; -Get a scoped ID for whatever file you're in. Resolved at build-time with zero client JS. +Simple Scope (`vite-plugin-simple-scope`) is a Vite plugin that generates deterministic, file-scoped IDs at build time with zero client JavaScript. Use it for form label `for`/`id` pairs, query selectors, or any case where you need unique-per-file identifiers. Compatible with Astro, Nuxt, SvelteKit, and any Vite-based framework. ```jsx import { scope } from 'simple:scope'; diff --git a/www/src/content/docs/store.mdx b/www/src/content/docs/store.mdx index cda86d1..3bd404b 100644 --- a/www/src/content/docs/store.mdx +++ b/www/src/content/docs/store.mdx @@ -1,8 +1,8 @@ --- -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. +title: Simple Store — Reactive State Management for React +description: "Simple Store is a lightweight reactive state management library for React. Combines signal-like simplicity with Zustand-style selectors for fine-grained updates." sidebar: - label: Get started + label: 💾 Get started order: 1 --- @@ -10,7 +10,7 @@ import { LinkCard, Tabs, TabItem } from '@astrojs/starlight/components'; -A reactive store that combines the simplicity of signals with the power of "selectors" you'd find in Zustand or Redux. +Simple Store (`@simplestack/store`) is a lightweight reactive state management library for React and vanilla JavaScript. It combines the simplicity of signals with the power of "selectors" you'd find in Zustand or Redux, allowing fine-grained subscriptions to nested state without boilerplate. ```tsx import { store } from "@simplestack/store"; diff --git a/www/src/content/docs/stream.md b/www/src/content/docs/stream.md index 5c734fb..7c324e3 100644 --- a/www/src/content/docs/stream.md +++ b/www/src/content/docs/stream.md @@ -1,6 +1,13 @@ --- -title: Simple stream 🌊 -description: Suspend Astro components with fallback content. Like React Server Components, but Just HTML ™️ +title: Simple Stream (Deprecated) +description: "Simple Stream suspended Astro components with fallback content, similar to React Server Components. This package is no longer maintained." +sidebar: + label: 🌊 Stream +head: + - tag: meta + attrs: + name: robots + content: noindex, follow --- :::caution