From b94413deb03d7177145928f977aa7cf74b69dfac Mon Sep 17 00:00:00 2001 From: Ben Holmes Date: Wed, 25 Mar 2026 09:05:49 +0000 Subject: [PATCH] =?UTF-8?q?feat(www):=20SEO/AEO=20audit=20=E2=80=94=20add?= =?UTF-8?q?=20site=20config,=20robots.txt,=20structured=20data,=20and=20im?= =?UTF-8?q?proved=20meta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add site URL to astro.config.mjs enabling canonical URLs and sitemap generation - Add Organization JSON-LD schema site-wide via Starlight head config - Create robots.txt with sitemap reference - Improve homepage: descriptive title, richer description, WebSite + FAQPage JSON-LD - Add OG meta tags on homepage - Override on Store, Scope, Query pages to remove emojis for cleaner SERPs - Improve meta descriptions on all active package pages Co-Authored-By: Oz <oz-agent@warp.dev> --- www/astro.config.mjs | 17 +++++++++ www/public/robots.txt | 4 +++ www/src/content/docs/index.mdx | 63 ++++++++++++++++++++++++++++++++-- www/src/content/docs/query.mdx | 5 ++- www/src/content/docs/scope.mdx | 5 ++- www/src/content/docs/store.mdx | 5 ++- 6 files changed, 93 insertions(+), 6 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/index.mdx b/www/src/content/docs/index.mdx index 1e6d15c..d5aa3f6 100644 --- a/www/src/content/docs/index.mdx +++ b/www/src/content/docs/index.mdx @@ -1,10 +1,67 @@ --- -title: Simple stack 🌱 -description: A suite of tools built for Astro to simplify your workflow. +title: Simple Stack +description: Simple Stack is a collection of lightweight tools for Astro and Vite — including a reactive store, scoped IDs, and DOM query helpers — built to simplify web development. tableOfContents: false head: - tag: title - content: Simple stack 🌱 + content: "Simple Stack — Reactive Store, Scoped IDs & DOM Queries for Astro" + - tag: meta + attrs: + property: "og:title" + content: "Simple Stack — Reactive Store, Scoped IDs & DOM Queries for Astro" + - tag: meta + attrs: + property: "og:description" + content: "Simple Stack is a collection of lightweight tools for Astro and Vite — including a reactive store, scoped IDs, and DOM query helpers." + - tag: meta + attrs: + property: "og:type" + content: "website" + - tag: script + attrs: + type: "application/ld+json" + content: | + { + "@context": "https://schema.org", + "@type": "WebSite", + "name": "Simple Stack", + "url": "https://simple-stack.dev", + "description": "A collection of lightweight tools for Astro and Vite to simplify web development." + } + - tag: script + attrs: + type: "application/ld+json" + content: | + { + "@context": "https://schema.org", + "@type": "FAQPage", + "mainEntity": [ + { + "@type": "Question", + "name": "What is Simple Store?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Simple Store is a reactive state management library that combines the simplicity of signals with the power of selectors found in Zustand or Redux. It supports nested sub-stores, React hooks, middleware, and Next.js SSR." + } + }, + { + "@type": "Question", + "name": "What is Simple Scope?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Simple Scope is a Vite plugin that generates scoped IDs for any file you are in, resolved at build time with zero client JavaScript. It is compatible with Astro, Nuxt, SvelteKit, and any Vite-based framework." + } + }, + { + "@type": "Question", + "name": "What is Simple Query?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Simple Query is an Astro integration that provides a simple way to query the DOM from Astro components using scoped data-target attributes and a lightweight ready() API with optional signal-based state management." + } + } + ] + } --- A collection of tools I've built to **make web development simpler.** diff --git a/www/src/content/docs/query.mdx b/www/src/content/docs/query.mdx index 5549582..fafe079 100644 --- a/www/src/content/docs/query.mdx +++ b/www/src/content/docs/query.mdx @@ -1,6 +1,9 @@ --- title: 💰 Simple Query -description: A simple library to query the DOM from your Astro components. +description: An Astro integration for querying the DOM from Astro components using scoped data-target attributes, with optional signal-based state management. +head: + - tag: title + content: "Simple Query — DOM Queries and Scoped Selectors for Astro Components" --- 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..919c65d 100644 --- a/www/src/content/docs/scope.mdx +++ b/www/src/content/docs/scope.mdx @@ -1,6 +1,9 @@ --- title: 🔎 Simple scope -description: Get a scoped ID for whatever file you're in. Resolved at build-time with zero client JS. +description: A Vite plugin that generates scoped IDs for any file, resolved at build time with zero client JavaScript. Works with Astro, Nuxt, SvelteKit, and any Vite-based framework. +head: + - tag: title + content: "Simple Scope — Scoped IDs for Vite at Build Time with Zero Client JS" --- import { LinkCard } from '@astrojs/starlight/components'; diff --git a/www/src/content/docs/store.mdx b/www/src/content/docs/store.mdx index cda86d1..09cc52f 100644 --- a/www/src/content/docs/store.mdx +++ b/www/src/content/docs/store.mdx @@ -1,9 +1,12 @@ --- 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: A reactive store that combines the simplicity of signals with the power of "selectors" you'd find in Zustand or Redux. Supports sub-stores, React hooks, middleware, and Next.js SSR. sidebar: label: Get started order: 1 +head: + - tag: title + content: "Simple Store — Reactive State Management with Signals and Selectors" --- import { LinkCard, Tabs, TabItem } from '@astrojs/starlight/components';