blume 1.7.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +19 -0
- package/CHANGELOG.md +227 -0
- package/README.md +34 -21
- package/dist/cli/chunk-11j0384y.js +148 -0
- package/dist/cli/chunk-11j0384y.js.map +10 -0
- package/dist/cli/{chunk-xhtpx3ff.js → chunk-1w8dp3qb.js} +17 -16
- package/dist/cli/{chunk-xhtpx3ff.js.map → chunk-1w8dp3qb.js.map} +3 -3
- package/dist/cli/chunk-2q1dwty4.js +75 -0
- package/dist/cli/chunk-2q1dwty4.js.map +11 -0
- package/dist/cli/chunk-41za066z.js +122 -0
- package/dist/cli/chunk-41za066z.js.map +11 -0
- package/dist/cli/chunk-5a2z0198.js +133 -0
- package/dist/cli/chunk-5a2z0198.js.map +10 -0
- package/dist/cli/{chunk-9he6crym.js → chunk-6k8vp3ta.js} +25 -13
- package/dist/cli/{chunk-9he6crym.js.map → chunk-6k8vp3ta.js.map} +4 -4
- package/dist/cli/{chunk-mt76t7dj.js → chunk-79njf86q.js} +133 -54
- package/dist/cli/chunk-79njf86q.js.map +11 -0
- package/dist/cli/{chunk-3w7b2vcx.js → chunk-7ez8ny0t.js} +2 -2
- package/dist/cli/{chunk-688e0dde.js → chunk-88cpgt6h.js} +1 -1
- package/dist/cli/chunk-a9kptbw5.js +361 -0
- package/dist/cli/chunk-a9kptbw5.js.map +14 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-b5aj94ah.js +91 -0
- package/dist/cli/chunk-b5aj94ah.js.map +10 -0
- package/dist/cli/{chunk-hs3gbh8p.js → chunk-bctazmbk.js} +9 -5
- package/dist/cli/chunk-bctazmbk.js.map +10 -0
- package/dist/cli/chunk-beat36xx.js +279 -0
- package/dist/cli/chunk-beat36xx.js.map +10 -0
- package/dist/cli/chunk-bnbmcwfb.js +145 -0
- package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
- package/dist/cli/{chunk-9bkjd11x.js → chunk-bw22s759.js} +15 -5
- package/dist/cli/{chunk-9bkjd11x.js.map → chunk-bw22s759.js.map} +4 -4
- package/dist/cli/chunk-by2290sx.js +39 -0
- package/dist/cli/chunk-by2290sx.js.map +10 -0
- package/dist/cli/chunk-d1tadaw7.js +79 -0
- package/dist/cli/chunk-d1tadaw7.js.map +10 -0
- package/dist/cli/{chunk-t3tj0dgr.js → chunk-d80hr03s.js} +24 -19
- package/dist/cli/chunk-d80hr03s.js.map +15 -0
- package/dist/cli/chunk-ernrthtr.js +97 -0
- package/dist/cli/chunk-ernrthtr.js.map +10 -0
- package/dist/cli/chunk-f2972sbt.js +374 -0
- package/dist/cli/chunk-f2972sbt.js.map +10 -0
- package/dist/cli/{chunk-exeeb35e.js → chunk-f7t03s3g.js} +2 -2
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-12dxjqk7.js → chunk-fh5hj5jt.js} +44 -21
- package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
- package/dist/cli/{chunk-8cd8tj54.js → chunk-j8mw0za6.js} +86 -57
- package/dist/cli/chunk-j8mw0za6.js.map +35 -0
- package/dist/cli/chunk-jts8mvcz.js +106 -0
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ejjx8znq.js → chunk-mnqj32sj.js} +505 -536
- package/dist/cli/chunk-mnqj32sj.js.map +12 -0
- package/dist/cli/{chunk-196vjxp9.js → chunk-mwt1k8n7.js} +100 -372
- package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
- package/dist/cli/chunk-nk3ts2xk.js +51 -0
- package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
- package/dist/cli/{chunk-n9sra6sy.js → chunk-pat2zzwc.js} +10 -14
- package/dist/cli/{chunk-n9sra6sy.js.map → chunk-pat2zzwc.js.map} +2 -2
- package/dist/cli/chunk-pnnvybbk.js +176 -0
- package/dist/cli/chunk-pnnvybbk.js.map +11 -0
- package/dist/cli/{chunk-cvky9gb2.js → chunk-sqn5t4q0.js} +81 -87
- package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
- package/dist/cli/{chunk-eevwt1sc.js → chunk-tzne8qfq.js} +15 -15
- package/dist/cli/{chunk-eevwt1sc.js.map → chunk-tzne8qfq.js.map} +1 -1
- package/dist/cli/chunk-xaz13gwg.js +12449 -0
- package/dist/cli/chunk-xaz13gwg.js.map +182 -0
- package/dist/cli/chunk-y3e45rc8.js +102 -0
- package/dist/cli/chunk-y3e45rc8.js.map +10 -0
- package/dist/cli/chunk-z01ze5c1.js +261 -0
- package/dist/cli/chunk-z01ze5c1.js.map +10 -0
- package/dist/cli/{chunk-5n7t497w.js → chunk-z1f5arsg.js} +247 -755
- package/dist/cli/chunk-z1f5arsg.js.map +36 -0
- package/dist/cli/{chunk-hdm2dkd2.js → chunk-zg2gtj10.js} +1086 -2596
- package/dist/cli/chunk-zg2gtj10.js.map +35 -0
- package/dist/cli/{chunk-ppfvdcd4.js → chunk-zxccj738.js} +1 -1
- package/dist/cli/index.js +214 -57
- package/dist/cli/index.js.map +8 -7
- package/dist/types/ai/agent-readability.d.ts +52 -0
- package/dist/types/ai/ai-catalog.d.ts +42 -0
- package/dist/types/ai/api/paths.d.ts +17 -0
- package/dist/types/ai/api-catalog.d.ts +18 -0
- package/dist/types/ai/ask.d.ts +368 -0
- package/dist/types/ai/changelog-markdown.d.ts +2 -0
- package/dist/types/ai/component-markdown.d.ts +2 -2
- package/dist/types/ai/index.d.ts +24 -0
- package/dist/types/ai/link-headers.d.ts +24 -0
- package/dist/types/ai/llms.d.ts +25 -0
- package/dist/types/ai/markdown.d.ts +45 -0
- package/dist/types/ai/mcp/discovery.d.ts +68 -0
- package/dist/types/ai/mcp/tools.d.ts +16 -0
- package/dist/types/ai/openapi-components.d.ts +43 -0
- package/dist/types/ai/relative-links.d.ts +26 -0
- package/dist/types/ai/serializers.d.ts +15 -0
- package/dist/types/ai/skills.d.ts +42 -0
- package/dist/types/ai/tar.d.ts +25 -0
- package/dist/types/ai/visibility.d.ts +17 -0
- package/dist/types/ai/web-bot-auth.d.ts +16 -0
- package/dist/types/analytics/adobe.d.ts +35 -0
- package/dist/types/analytics/amplitude.d.ts +50 -0
- package/dist/types/analytics/clarity.d.ts +31 -0
- package/dist/types/analytics/clearbit.d.ts +29 -0
- package/dist/types/analytics/cloudflare.d.ts +41 -0
- package/dist/types/analytics/fathom.d.ts +41 -0
- package/dist/types/analytics/google-analytics.d.ts +44 -0
- package/dist/types/analytics/google-tag-manager.d.ts +40 -0
- package/dist/types/analytics/head.d.ts +30 -0
- package/dist/types/analytics/heap.d.ts +40 -0
- package/dist/types/analytics/hightouch.d.ts +44 -0
- package/dist/types/analytics/hotjar.d.ts +33 -0
- package/dist/types/analytics/index.d.ts +61 -0
- package/dist/types/analytics/inline.d.ts +17 -0
- package/dist/types/analytics/logrocket.d.ts +44 -0
- package/dist/types/analytics/mixpanel.d.ts +67 -0
- package/dist/types/analytics/pirsch.d.ts +42 -0
- package/dist/types/analytics/plausible.d.ts +56 -0
- package/dist/types/analytics/posthog.d.ts +45 -0
- package/dist/types/analytics/schema.d.ts +320 -0
- package/dist/types/analytics/script.d.ts +46 -0
- package/dist/types/analytics/segment.d.ts +50 -0
- package/dist/types/analytics/vercel.d.ts +48 -0
- package/dist/types/astro/integration.d.ts +76 -0
- package/dist/types/astro/markdown-negotiation.d.ts +23 -0
- package/dist/types/astro/module-types.d.ts +14 -0
- package/dist/types/astro/pages.d.ts +44 -0
- package/dist/types/cli/env.d.ts +12 -0
- package/dist/types/cli/init/scaffold.d.ts +154 -0
- package/dist/types/components/layout/nav-utils.d.ts +11 -0
- package/dist/types/core/adapter.d.ts +47 -0
- package/dist/types/core/api-name.d.ts +7 -0
- package/dist/types/core/changelog-index.d.ts +13 -0
- package/dist/types/core/config-input.d.ts +209 -505
- package/dist/types/core/config.d.ts +60 -34
- package/dist/types/core/content-assets.d.ts +76 -0
- package/dist/types/core/custom-pages.d.ts +33 -0
- package/dist/types/core/data.d.ts +28 -11
- package/dist/types/core/define-components.d.ts +12 -9
- package/dist/types/core/deployment-env.d.ts +6 -11
- package/dist/types/core/frontmatter.d.ts +10 -0
- package/dist/types/core/graph.d.ts +18 -0
- package/dist/types/core/heading-markers.d.ts +54 -0
- package/dist/types/core/i18n-ui.d.ts +6 -2
- package/dist/types/core/i18n.d.ts +87 -0
- package/dist/types/core/includes.d.ts +138 -0
- package/dist/types/core/last-modified.d.ts +47 -0
- package/dist/types/core/links.d.ts +95 -0
- package/dist/types/core/locale-links.d.ts +60 -0
- package/dist/types/core/manifest.d.ts +17 -0
- package/dist/types/core/meta.d.ts +38 -0
- package/dist/types/core/nav-diagnostics.d.ts +26 -0
- package/dist/types/core/navigation.d.ts +6 -0
- package/dist/types/core/node-require.d.ts +19 -0
- package/dist/types/core/package-json.d.ts +13 -0
- package/dist/types/core/probe.d.ts +42 -0
- package/dist/types/core/project-graph.d.ts +51 -0
- package/dist/types/core/project.d.ts +2 -0
- package/dist/types/core/safe-href.d.ts +2 -0
- package/dist/types/core/safe-links.d.ts +26 -0
- package/dist/types/core/schema.d.ts +2291 -441
- package/dist/types/core/site-url.d.ts +16 -0
- package/dist/types/core/sources/assets.d.ts +36 -0
- package/dist/types/core/sources/cache.d.ts +37 -0
- package/dist/types/core/sources/collection.d.ts +28 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
- package/dist/types/core/sources/contentful.d.ts +40 -0
- package/dist/types/core/sources/filesystem.d.ts +24 -0
- package/dist/types/core/sources/github-releases.d.ts +31 -0
- package/dist/types/core/sources/json.d.ts +30 -0
- package/dist/types/core/sources/lexical.d.ts +19 -0
- package/dist/types/core/sources/lower.d.ts +75 -0
- package/dist/types/core/sources/mdx-remote.d.ts +28 -0
- package/dist/types/core/sources/normalize.d.ts +147 -0
- package/dist/types/core/sources/notion.d.ts +131 -0
- package/dist/types/core/sources/obsidian.d.ts +46 -0
- package/dist/types/core/sources/payload.d.ts +39 -0
- package/dist/types/core/sources/portable-text.d.ts +42 -0
- package/dist/types/core/sources/read.d.ts +23 -0
- package/dist/types/core/sources/remote.d.ts +74 -0
- package/dist/types/core/sources/resolve.d.ts +19 -0
- package/dist/types/core/sources/sanity.d.ts +43 -0
- package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
- package/dist/types/core/sources/strapi.d.ts +33 -0
- package/dist/types/core/sources/types.d.ts +7 -0
- package/dist/types/core/sources/watch.d.ts +45 -0
- package/dist/types/core/text-width.d.ts +11 -0
- package/dist/types/core/types.d.ts +20 -1
- package/dist/types/core/unrecognized-keys.d.ts +7 -0
- package/dist/types/core/versions.d.ts +72 -0
- package/dist/types/core/yaml.d.ts +9 -0
- package/dist/types/deploy/adapter-output.d.ts +45 -0
- package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
- package/dist/types/deploy/adapters/index.d.ts +29 -0
- package/dist/types/deploy/adapters/netlify.d.ts +37 -0
- package/dist/types/deploy/adapters/node.d.ts +37 -0
- package/dist/types/deploy/adapters/registry.d.ts +133 -0
- package/dist/types/deploy/adapters/types.d.ts +71 -0
- package/dist/types/deploy/adapters/vercel.d.ts +38 -0
- package/dist/types/deploy/artifacts.d.ts +65 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
- package/dist/types/deploy/function-bundle.d.ts +80 -0
- package/dist/types/deploy/headers.d.ts +50 -0
- package/dist/types/deploy/node-headers.d.ts +42 -0
- package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
- package/dist/types/deploy/platforms/index.d.ts +18 -0
- package/dist/types/deploy/platforms/netlify.d.ts +13 -0
- package/dist/types/deploy/platforms/node.d.ts +11 -0
- package/dist/types/deploy/platforms/paths.d.ts +27 -0
- package/dist/types/deploy/platforms/static.d.ts +10 -0
- package/dist/types/deploy/platforms/types.d.ts +104 -0
- package/dist/types/deploy/platforms/vercel.d.ts +32 -0
- package/dist/types/deploy/redirects.d.ts +53 -0
- package/dist/types/deploy/robots.d.ts +8 -0
- package/dist/types/deploy/rss.d.ts +31 -0
- package/dist/types/deploy/sitemap.d.ts +21 -0
- package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
- package/dist/types/markdown/code-title.d.ts +32 -0
- package/dist/types/markdown/fence-meta.d.ts +23 -0
- package/dist/types/markdown/themes.d.ts +3 -3
- package/dist/types/openapi/asyncapi.d.ts +129 -0
- package/dist/types/openapi/graphql-build.d.ts +8 -0
- package/dist/types/openapi/graphql.d.ts +122 -0
- package/dist/types/openapi/model.d.ts +158 -0
- package/dist/types/openapi/parse.d.ts +57 -0
- package/dist/types/openapi/references.d.ts +37 -25
- package/dist/types/openapi/render-mdx.d.ts +33 -0
- package/dist/types/openapi/sentence.d.ts +7 -0
- package/dist/types/openapi/signature.d.ts +10 -0
- package/dist/types/openapi/source.d.ts +22 -0
- package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
- package/dist/types/reference/asyncapi.d.ts +166 -0
- package/dist/types/reference/graphql.d.ts +181 -0
- package/dist/types/reference/index.d.ts +32 -0
- package/dist/types/reference/openapi.d.ts +165 -0
- package/dist/types/reference/options.d.ts +157 -0
- package/dist/types/reference/scalar.d.ts +136 -0
- package/dist/types/reference/schema.d.ts +630 -0
- package/dist/types/search/adapters/algolia.d.ts +32 -0
- package/dist/types/search/adapters/flexsearch.d.ts +12 -0
- package/dist/types/search/adapters/index.d.ts +31 -0
- package/dist/types/search/adapters/mixedbread.d.ts +22 -0
- package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
- package/dist/types/search/adapters/orama.d.ts +13 -0
- package/dist/types/search/adapters/pagefind.d.ts +12 -0
- package/dist/types/search/adapters/registry.d.ts +228 -0
- package/dist/types/search/adapters/types.d.ts +34 -0
- package/dist/types/search/adapters/typesense.d.ts +42 -0
- package/dist/types/search/build.d.ts +23 -0
- package/dist/types/search/documents.d.ts +90 -0
- package/dist/types/search/facets.d.ts +3 -0
- package/dist/types/search/sync/algolia.d.ts +14 -0
- package/dist/types/search/sync/index.d.ts +14 -0
- package/dist/types/search/sync/orama-cloud.d.ts +10 -0
- package/dist/types/search/sync/typesense.d.ts +14 -0
- package/dist/types/sources/contentful.d.ts +68 -0
- package/dist/types/sources/custom.d.ts +20 -0
- package/dist/types/sources/filesystem.d.ts +42 -0
- package/dist/types/sources/github-releases.d.ts +46 -0
- package/dist/types/sources/index.d.ts +48 -0
- package/dist/types/sources/mdx-remote.d.ts +63 -0
- package/dist/types/sources/notion.d.ts +65 -0
- package/dist/types/sources/obsidian.d.ts +34 -0
- package/dist/types/sources/payload.d.ts +68 -0
- package/dist/types/sources/registry.d.ts +1414 -0
- package/dist/types/sources/sanity.d.ts +69 -0
- package/dist/types/sources/shared.d.ts +46 -0
- package/dist/types/sources/strapi.d.ts +66 -0
- package/dist/types/theme/icon-kind.d.ts +11 -0
- package/dist/types/theme/icons.d.ts +20 -0
- package/docs/01-quickstart.mdx +18 -18
- package/docs/02-deployment.mdx +50 -26
- package/docs/03-upgrading.mdx +351 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +3 -3
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +20 -8
- package/docs/advanced/meta.ts +1 -8
- package/docs/advanced/skills.mdx +8 -0
- package/docs/cli/audit.mdx +646 -0
- package/docs/cli/doctor.mdx +29 -0
- package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +1 -1
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/ask-ai.mdx +176 -61
- package/docs/configuration/customization.mdx +15 -9
- package/docs/configuration/index.mdx +52 -31
- package/docs/configuration/search.mdx +75 -54
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +37 -1
- package/docs/content/i18n.mdx +8 -6
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +10 -5
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +12 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +26 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +91 -10
- package/docs/discoverability/index.mdx +5 -5
- package/docs/discoverability/json-api.mdx +4 -4
- package/docs/discoverability/llms-txt.mdx +6 -6
- package/docs/discoverability/markdown.mdx +4 -4
- package/docs/discoverability/mcp.mdx +11 -11
- package/docs/discoverability/sitemap-and-robots.mdx +3 -3
- package/docs/index.mdx +2 -2
- package/docs/references/asyncapi.mdx +59 -0
- package/docs/{advanced → references}/graphql.mdx +45 -32
- package/docs/{reference → references}/meta.ts +2 -2
- package/docs/references/openapi.mdx +171 -0
- package/docs/references/scalar.mdx +64 -0
- package/package.json +42 -8
- package/skills/blume/SKILL.md +21 -8
- package/skills/blume-migrate/SKILL.md +22 -21
- package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
- package/skills/blume-migrate/references/docusaurus.md +5 -4
- package/skills/blume-migrate/references/fumadocs.md +4 -4
- package/skills/blume-migrate/references/mintlify.md +23 -8
- package/skills/blume-migrate/references/monorepo.md +6 -6
- package/skills/blume-migrate/references/starlight.md +4 -4
- package/src/ai/agent-readability.ts +26 -22
- package/src/ai/ai-catalog.ts +259 -0
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-data.ts +1 -1
- package/src/ai/ask.ts +624 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +19 -6
- package/src/ai/llms.ts +26 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/mcp/discovery.ts +1 -1
- package/src/ai/openapi-components.ts +4 -1
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +2 -2
- package/src/ai/skills.ts +1 -1
- package/src/ai/web-bot-auth.ts +2 -2
- package/src/analytics/adobe.ts +46 -0
- package/src/analytics/amplitude.ts +79 -0
- package/src/analytics/clarity.ts +46 -0
- package/src/analytics/clearbit.ts +47 -0
- package/src/analytics/cloudflare.ts +67 -0
- package/src/analytics/fathom.ts +64 -0
- package/src/analytics/google-analytics.ts +84 -0
- package/src/analytics/google-tag-manager.ts +61 -0
- package/src/analytics/head.ts +130 -0
- package/src/analytics/heap.ts +65 -0
- package/src/analytics/hightouch.ts +77 -0
- package/src/analytics/hotjar.ts +47 -0
- package/src/analytics/index.ts +71 -0
- package/src/analytics/inline.ts +21 -0
- package/src/analytics/logrocket.ts +71 -0
- package/src/analytics/mixpanel.ts +92 -0
- package/src/analytics/pirsch.ts +66 -0
- package/src/analytics/plausible.ts +83 -0
- package/src/analytics/posthog.ts +78 -0
- package/src/analytics/schema.ts +60 -0
- package/src/analytics/script.ts +60 -0
- package/src/analytics/segment.ts +85 -0
- package/src/analytics/vercel.ts +50 -0
- package/src/astro/adapter-root.ts +7 -9
- package/src/astro/component-slots.ts +131 -91
- package/src/astro/generate.ts +114 -345
- package/src/astro/integration.ts +2 -6
- package/src/astro/pages.ts +13 -101
- package/src/astro/render-deps.ts +379 -0
- package/src/astro/runtime-deps.ts +201 -0
- package/src/astro/templates.ts +554 -541
- package/src/audit/agent.ts +24 -0
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +2 -2
- package/src/audit/checks/dns-aid.ts +1 -1
- package/src/audit/checks/duplicates.ts +3 -1
- package/src/audit/checks/i18n.ts +1 -1
- package/src/audit/checks/indexability.ts +7 -7
- package/src/audit/checks/links.ts +2 -2
- package/src/audit/checks/llms.ts +6 -6
- package/src/audit/checks/network.ts +3 -3
- package/src/audit/checks/og-image.ts +2 -2
- package/src/audit/checks/robots.ts +1 -1
- package/src/audit/checks/sitemap.ts +2 -2
- package/src/audit/checks/social.ts +1 -1
- package/src/audit/run.ts +4 -3
- package/src/audit/terms.ts +31 -0
- package/src/audit/url.ts +13 -13
- package/src/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +39 -20
- package/src/cli/commands/build.ts +71 -314
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +90 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +2 -2
- package/src/cli/commands/init.ts +161 -41
- package/src/cli/commands/migrate.ts +121 -0
- package/src/cli/commands/preview.ts +7 -1
- package/src/cli/commands/translate.ts +2 -2
- package/src/cli/commands/upgrade.ts +141 -0
- package/src/cli/commands/version.ts +57 -44
- package/src/cli/eject-scripts.ts +121 -6
- package/src/cli/index.ts +11 -1
- package/src/cli/init/install.ts +70 -0
- package/src/cli/init/questions.ts +7 -0
- package/src/cli/init/scaffold.ts +459 -75
- package/src/cli/lazy-command.ts +37 -1
- package/src/cli/prepare.ts +40 -6
- package/src/cli/required-secrets.ts +38 -11
- package/src/cli/unknown-flags.ts +266 -0
- package/src/cli/yarn-pnp.ts +52 -0
- package/src/components/content/AccordionItem.astro +7 -1
- package/src/components/content/Card.astro +4 -3
- package/src/components/content/ColorItem.astro +22 -4
- package/src/components/content/GithubInfo.astro +2 -2
- package/src/components/content/Prompt.astro +25 -25
- package/src/components/content/Tabs.astro +3 -1
- package/src/components/content/Tile.astro +2 -3
- package/src/components/content/Tooltip.astro +57 -9
- package/src/components/content/content-strings.ts +34 -0
- package/src/components/content/diff.ts +1 -1
- package/src/components/content/mermaid-element.ts +13 -2
- package/src/components/content/prompt-markdown.ts +292 -0
- package/src/components/content/tooltip-id.ts +41 -0
- package/src/components/islands/hooks.ts +75 -3
- package/src/components/layout/Analytics.astro +21 -79
- package/src/components/layout/Banner.astro +3 -1
- package/src/components/layout/DiscoveryLinks.astro +69 -0
- package/src/components/layout/Header.astro +83 -20
- package/src/components/layout/LanguageSwitcher.astro +4 -1
- package/src/components/layout/Logo.astro +23 -2
- package/src/components/layout/NavSelector.astro +13 -2
- package/src/components/layout/NavTree.astro +12 -3
- package/src/components/layout/NavTreeScript.astro +17 -3
- package/src/components/layout/PageActions.astro +3 -3
- package/src/components/layout/PageFeedback.astro +11 -1
- package/src/components/layout/PageLayout.astro +52 -5
- package/src/components/layout/ReferenceLayout.astro +21 -12
- package/src/components/layout/RootLayout.astro +69 -43
- package/src/components/layout/Search.astro +30 -6
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +101 -15
- package/src/components/layout/drawer-inert.ts +113 -15
- package/src/components/layout/dropdown-clamp.ts +105 -0
- package/src/components/layout/head-scripts.ts +15 -6
- package/src/components/layout/nav-utils.ts +17 -0
- package/src/components/layout/search/algolia.ts +8 -8
- package/src/components/layout/search/orama-cloud.ts +9 -7
- package/src/components/layout/search/typesense.ts +11 -17
- package/src/components/openapi/MessageComposer.astro +2 -2
- package/src/components/openapi/Playground.astro +2 -2
- package/src/components/openapi/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +212 -543
- package/src/core/config.ts +130 -41
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +32 -11
- package/src/core/define-components.ts +12 -9
- package/src/core/deployment-env.ts +18 -74
- package/src/core/diagnostics.ts +14 -7
- package/src/core/graph.ts +69 -25
- package/src/core/i18n-ui.ts +6 -2
- package/src/core/i18n.ts +17 -0
- package/src/core/includes.ts +156 -38
- package/src/core/last-modified.ts +6 -11
- package/src/core/links.ts +166 -2
- package/src/core/manifest.ts +10 -3
- package/src/core/navigation.ts +137 -19
- package/src/core/new-tab.ts +35 -0
- package/src/core/node-require.ts +21 -0
- package/src/core/project-graph.ts +42 -26
- package/src/core/project.ts +9 -4
- package/src/core/request-body.ts +61 -0
- package/src/core/safe-href.ts +28 -0
- package/src/core/safe-links.ts +68 -0
- package/src/core/schema.ts +531 -721
- package/src/core/server-features.ts +8 -9
- package/src/core/sources/assets.ts +47 -11
- package/src/core/sources/collection.ts +67 -0
- package/src/core/sources/contentful-rich-text.ts +285 -0
- package/src/core/sources/contentful.ts +173 -0
- package/src/core/sources/github-releases.ts +51 -1
- package/src/core/sources/json.ts +71 -0
- package/src/core/sources/lexical.ts +195 -0
- package/src/core/sources/lower.ts +226 -0
- package/src/core/sources/normalize.ts +52 -2
- package/src/core/sources/notion.ts +39 -28
- package/src/core/sources/payload.ts +135 -0
- package/src/core/sources/portable-text.ts +11 -16
- package/src/core/sources/remote.ts +226 -0
- package/src/core/sources/resolve.ts +104 -166
- package/src/core/sources/sanity.ts +16 -49
- package/src/core/sources/strapi-blocks.ts +124 -0
- package/src/core/sources/strapi.ts +191 -0
- package/src/core/sources/types.ts +12 -1
- package/src/core/types.ts +20 -1
- package/src/core/ui-packs/ar.ts +6 -2
- package/src/core/ui-packs/bg.ts +6 -2
- package/src/core/ui-packs/bn.ts +6 -2
- package/src/core/ui-packs/ca.ts +3 -1
- package/src/core/ui-packs/cs.ts +6 -2
- package/src/core/ui-packs/da.ts +6 -2
- package/src/core/ui-packs/de.ts +6 -2
- package/src/core/ui-packs/el.ts +3 -1
- package/src/core/ui-packs/es.ts +3 -1
- package/src/core/ui-packs/fa.ts +6 -2
- package/src/core/ui-packs/fi.ts +6 -2
- package/src/core/ui-packs/fr.ts +3 -1
- package/src/core/ui-packs/he.ts +6 -2
- package/src/core/ui-packs/hi.ts +6 -2
- package/src/core/ui-packs/hr.ts +6 -2
- package/src/core/ui-packs/hu.ts +6 -2
- package/src/core/ui-packs/id.ts +6 -2
- package/src/core/ui-packs/it.ts +3 -1
- package/src/core/ui-packs/ja.ts +3 -1
- package/src/core/ui-packs/ko.ts +3 -1
- package/src/core/ui-packs/nl.ts +6 -2
- package/src/core/ui-packs/no.ts +6 -2
- package/src/core/ui-packs/pl.ts +6 -2
- package/src/core/ui-packs/pt-br.ts +3 -1
- package/src/core/ui-packs/pt.ts +3 -1
- package/src/core/ui-packs/ro.ts +6 -2
- package/src/core/ui-packs/ru.ts +6 -2
- package/src/core/ui-packs/sk.ts +6 -2
- package/src/core/ui-packs/sr.ts +6 -2
- package/src/core/ui-packs/sv.ts +6 -2
- package/src/core/ui-packs/th.ts +3 -1
- package/src/core/ui-packs/tr.ts +6 -2
- package/src/core/ui-packs/uk.ts +6 -2
- package/src/core/ui-packs/vi.ts +3 -1
- package/src/core/ui-packs/zh-tw.ts +3 -1
- package/src/core/ui-packs/zh.ts +3 -1
- package/src/core/unrecognized-keys.ts +10 -0
- package/src/core/version-cut.ts +116 -8
- package/src/deploy/adapter-output.ts +57 -97
- package/src/deploy/adapters/cloudflare.ts +39 -0
- package/src/deploy/adapters/index.ts +41 -0
- package/src/deploy/adapters/netlify.ts +34 -0
- package/src/deploy/adapters/node.ts +34 -0
- package/src/deploy/adapters/registry.ts +127 -0
- package/src/deploy/adapters/types.ts +92 -0
- package/src/deploy/adapters/vercel.ts +35 -0
- package/src/deploy/artifacts.ts +67 -28
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +129 -22
- package/src/deploy/node-headers.ts +198 -0
- package/src/deploy/platforms/cloudflare.ts +312 -0
- package/src/deploy/platforms/index.ts +67 -0
- package/src/deploy/platforms/netlify.ts +52 -0
- package/src/deploy/platforms/node.ts +40 -0
- package/src/deploy/platforms/paths.ts +42 -0
- package/src/deploy/platforms/static.ts +29 -0
- package/src/deploy/platforms/types.ts +112 -0
- package/src/deploy/platforms/vercel.ts +193 -0
- package/src/deploy/redirects.ts +30 -18
- package/src/deploy/robots.ts +3 -3
- package/src/deploy/rss.ts +2 -2
- package/src/deploy/sitemap.ts +2 -2
- package/src/deploy/vercel-negotiation.ts +27 -4
- package/src/eval/agents.ts +32 -1
- package/src/eval/findings.ts +19 -11
- package/src/eval/report.ts +10 -2
- package/src/markdown/external-links.ts +65 -0
- package/src/markdown/include.ts +45 -27
- package/src/markdown/index.ts +34 -9
- package/src/markdown/inline-code.ts +12 -6
- package/src/markdown/relative-links.ts +324 -0
- package/src/markdown/themes.ts +3 -3
- package/src/migrate/migrate.ts +149 -0
- package/src/openapi/parse.ts +64 -16
- package/src/openapi/proxy.ts +62 -10
- package/src/openapi/references.ts +147 -147
- package/src/openapi/render-mdx.ts +32 -10
- package/src/openapi/scalar.ts +15 -13
- package/src/openapi/sentence.ts +14 -0
- package/src/openapi/source.ts +37 -21
- package/src/openapi/spec-dependency-error.ts +15 -0
- package/src/reference/asyncapi.ts +83 -0
- package/src/reference/graphql.ts +89 -0
- package/src/reference/index.ts +40 -0
- package/src/reference/openapi.ts +83 -0
- package/src/reference/options.ts +201 -0
- package/src/reference/scalar.ts +136 -0
- package/src/reference/schema.ts +88 -0
- package/src/registry/eject.ts +97 -42
- package/src/search/adapters/algolia.ts +46 -0
- package/src/search/adapters/flexsearch.ts +29 -0
- package/src/search/adapters/index.ts +39 -0
- package/src/search/adapters/mixedbread.ts +39 -0
- package/src/search/adapters/orama-cloud.ts +51 -0
- package/src/search/adapters/orama.ts +24 -0
- package/src/search/adapters/pagefind.ts +27 -0
- package/src/search/adapters/registry.ts +131 -0
- package/src/search/adapters/types.ts +46 -0
- package/src/search/adapters/typesense.ts +57 -0
- package/src/search/build.ts +33 -7
- package/src/search/documents.ts +6 -0
- package/src/search/sync/algolia.ts +12 -11
- package/src/search/sync/index.ts +35 -20
- package/src/search/sync/orama-cloud.ts +12 -9
- package/src/search/sync/typesense.ts +15 -13
- package/src/sources/contentful.ts +63 -0
- package/src/sources/custom.ts +38 -0
- package/src/sources/filesystem.ts +51 -0
- package/src/sources/github-releases.ts +52 -0
- package/src/sources/index.ts +60 -0
- package/src/sources/mdx-remote.ts +76 -0
- package/src/sources/notion.ts +63 -0
- package/src/sources/obsidian.ts +38 -0
- package/src/sources/payload.ts +60 -0
- package/src/sources/registry.ts +182 -0
- package/src/sources/sanity.ts +66 -0
- package/src/sources/shared.ts +52 -0
- package/src/sources/strapi.ts +58 -0
- package/src/theme/entry.ts +47 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-12dxjqk7.js.map +0 -10
- package/dist/cli/chunk-196vjxp9.js.map +0 -13
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-30e87n55.js +0 -108
- package/dist/cli/chunk-30e87n55.js.map +0 -10
- package/dist/cli/chunk-450a7rcr.js +0 -185
- package/dist/cli/chunk-450a7rcr.js.map +0 -11
- package/dist/cli/chunk-5n7t497w.js.map +0 -40
- package/dist/cli/chunk-61j18dwk.js +0 -5342
- package/dist/cli/chunk-61j18dwk.js.map +0 -58
- package/dist/cli/chunk-88by27n5.js +0 -17
- package/dist/cli/chunk-88by27n5.js.map +0 -10
- package/dist/cli/chunk-8cd8tj54.js.map +0 -34
- package/dist/cli/chunk-aztttvb3.js +0 -381
- package/dist/cli/chunk-aztttvb3.js.map +0 -12
- package/dist/cli/chunk-cvky9gb2.js.map +0 -11
- package/dist/cli/chunk-ejjx8znq.js.map +0 -15
- package/dist/cli/chunk-fmceyezb.js +0 -1007
- package/dist/cli/chunk-fmceyezb.js.map +0 -13
- package/dist/cli/chunk-hdm2dkd2.js.map +0 -48
- package/dist/cli/chunk-hs3gbh8p.js.map +0 -10
- package/dist/cli/chunk-jbj4qhfw.js +0 -30
- package/dist/cli/chunk-jbj4qhfw.js.map +0 -10
- package/dist/cli/chunk-mqb2ka8m.js +0 -68
- package/dist/cli/chunk-mqb2ka8m.js.map +0 -10
- package/dist/cli/chunk-mt76t7dj.js.map +0 -11
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-ra1v2nc2.js +0 -35
- package/dist/cli/chunk-ra1v2nc2.js.map +0 -10
- package/dist/cli/chunk-t3tj0dgr.js.map +0 -15
- package/dist/cli/chunk-tqa1s0k8.js +0 -69
- package/dist/cli/chunk-tqa1s0k8.js.map +0 -11
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vkrsvbr5.js +0 -107
- package/dist/cli/chunk-vkrsvbr5.js.map +0 -11
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-wjt80jps.js +0 -1049
- package/dist/cli/chunk-wjt80jps.js.map +0 -24
- package/docs/advanced/api-reference.mdx +0 -240
- package/docs/reference/cli.mdx +0 -197
- package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
- package/src/components/content/changelog-element.ts +0 -69
- package/src/search/providers.ts +0 -91
- /package/dist/cli/{chunk-3w7b2vcx.js.map → chunk-7ez8ny0t.js.map} +0 -0
- /package/dist/cli/{chunk-688e0dde.js.map → chunk-88cpgt6h.js.map} +0 -0
- /package/dist/cli/{chunk-exeeb35e.js.map → chunk-f7t03s3g.js.map} +0 -0
- /package/dist/cli/{chunk-ppfvdcd4.js.map → chunk-zxccj738.js.map} +0 -0
|
@@ -0,0 +1,646 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Audit
|
|
3
|
+
description: blume audit crawls the built site and reports SEO and site-health issues — every finding names the source file and front matter line that fixes it.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
[`blume validate`](/docs/cli/validate) reads your _content_; `blume audit` reads the _built site_. It crawls the HTML in `dist/` after a build and reports SEO and site-health issues — titles, meta descriptions, canonicals, Open Graph and X cards, headings, hreflang, images, the sitemap, `robots.txt`, and structured data.
|
|
7
|
+
|
|
8
|
+
Because Blume built the site, every finding names the source file **and the front matter line** that fixes it, not just the URL a crawler would see:
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
⚠ Meta description too long or too short 5 pages
|
|
12
|
+
/docs/configuration/export content/docs/configuration/export.mdx:3
|
|
13
|
+
fix: Rewrite `description` in the frontmatter to fit the length range.
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Run it after a build:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
blume build
|
|
20
|
+
blume audit
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Findings are grouped by check rather than listed per page, so the report reads as a to-do list. Use `--verbose` to expand every affected page with its full detail, and `--only`/`--skip` to work through one category at a time. `blume audit --list-checks` prints the full catalog, which is also the [check catalog](#check-catalog) at the end of this page — every finding's `docsUrl` links to its entry there.
|
|
24
|
+
|
|
25
|
+
## Flags
|
|
26
|
+
|
|
27
|
+
- `--fail-on error|warning|info` — the CI gate: exit non-zero at this severity or above. Defaults to `error`; `--strict` is an alias for `--fail-on warning`.
|
|
28
|
+
- `--url <origin>` — also probe a live deployment for status codes, response headers, and redirect chains.
|
|
29
|
+
- `--external` — probe outbound links over the network.
|
|
30
|
+
- `--only <check|category>` / `--skip <check|category>` — narrow the report to, or away from, these checks or categories (comma-separated). A term that names no check or category is an error that suggests the closest one, so a typo can't quietly empty the report.
|
|
31
|
+
- `--list-checks` — print every check the audit can report, then exit.
|
|
32
|
+
- `--verbose` — list every affected page with each finding's full detail, instead of the first few.
|
|
33
|
+
- `--json` — emit the report as JSON on stdout.
|
|
34
|
+
- `--claude` / `--codex` — hand the findings to Claude Code or Codex to fix interactively.
|
|
35
|
+
|
|
36
|
+
## Failing CI
|
|
37
|
+
|
|
38
|
+
The exit code is the contract. By default `blume audit` fails only on errors — things that are definitely broken, like a link to a page that was never built, a redirect loop, or an invalid sitemap. Advisory findings (a short description, a duplicate title) are warnings and do not fail the build:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
blume audit # fails on errors
|
|
42
|
+
blume audit --fail-on warning # also fails on warnings
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Checking a live deployment
|
|
46
|
+
|
|
47
|
+
Some things only the real server can tell you: whether a page that exists in `dist/` actually 404s behind a bad rewrite, whether responses are compressed, and whether an `X-Robots-Tag` header is quietly deindexing a page whose HTML looks perfectly fine. Point the audit at a deployment to add those checks:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
blume audit --url https://docs.example.com
|
|
51
|
+
blume audit --url https://docs.example.com --external # also probe outbound links
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Outbound links are graded rather than flatly failed: a 404 is a broken link you can fix, while a 403 or 5xx is usually rate limiting or someone else's outage and is reported as a warning.
|
|
55
|
+
|
|
56
|
+
## Fixing the findings with an agent
|
|
57
|
+
|
|
58
|
+
If you use [Claude Code](https://claude.com/claude-code) or [Codex](https://developers.openai.com/codex/cli), the audit can hand its findings straight to it:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
blume audit --claude # or --codex
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
This writes the complete JSON report — every affected page, not the terminal's three-page preview — to a file and opens the agent interactively with a prompt that walks it through the findings: edit the source file each finding names, apply its suggested fix, then run `blume build` and `blume audit` again until the report is clean. The session is interactive by design: you review the edits through the agent's own permission flow, and the agent is told never to fix a finding by deleting content.
|
|
65
|
+
|
|
66
|
+
`--only` and `--skip` narrow the handoff the same way they narrow the report, so you can send one category at a time.
|
|
67
|
+
|
|
68
|
+
## What it does and doesn't check
|
|
69
|
+
|
|
70
|
+
The check set is deliberately narrower than a general-purpose SEO crawler's. Much of what such a crawler reports cannot happen to a Blume site — it never emits `rel=nofollow`, and Vite's content-hashed bundles are never missing or redirecting — and reporting those as permanent zeroes would just teach you to ignore the report.
|
|
71
|
+
|
|
72
|
+
Two limits worth stating plainly:
|
|
73
|
+
|
|
74
|
+
- **Structured data** is validated for well-formedness (valid JSON, a `@context`, a `@type` on every node). Blume does not validate against the full schema.org vocabulary or Google's rich-results rules.
|
|
75
|
+
- **Core Web Vitals** are not checked. They need a real browser, and a flag that quietly measured nothing would be worse than not having one — so `blume audit` reports the layout-shift causes it _can_ see offline (images with no `width`/`height`, oversized assets) and leaves the rest alone for now.
|
|
76
|
+
|
|
77
|
+
Anything the audit did not run is reported as skipped rather than silently passing:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
⊘ network skipped — pass --url <origin> (11 checks)
|
|
81
|
+
⊘ external skipped — pass --external (2 checks)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Check catalog
|
|
85
|
+
|
|
86
|
+
Every check `blume audit` can report, grouped by category, with its default severity, the tier it runs in, and the fix the report suggests. `--only` and `--skip` accept these ids (without the `BLUME_AUDIT_` prefix is fine too) or the category names.
|
|
87
|
+
|
|
88
|
+
### Content
|
|
89
|
+
|
|
90
|
+
#### Title tag missing or empty [#title-missing]
|
|
91
|
+
|
|
92
|
+
`BLUME_AUDIT_TITLE_MISSING` · error · from the built HTML
|
|
93
|
+
|
|
94
|
+
Fix: Add a `title` to the page's frontmatter.
|
|
95
|
+
|
|
96
|
+
#### Multiple title tags [#title-multiple]
|
|
97
|
+
|
|
98
|
+
`BLUME_AUDIT_TITLE_MULTIPLE` · error · from the built HTML
|
|
99
|
+
|
|
100
|
+
Fix: Remove the extra `<title>` from the page's layout or MDX.
|
|
101
|
+
|
|
102
|
+
#### Title too long or too short [#title-length]
|
|
103
|
+
|
|
104
|
+
`BLUME_AUDIT_TITLE_LENGTH` · warning · from the built HTML
|
|
105
|
+
|
|
106
|
+
Fix: Rewrite `title` in the frontmatter to fit the length range.
|
|
107
|
+
|
|
108
|
+
#### Meta description missing or empty [#description-missing]
|
|
109
|
+
|
|
110
|
+
`BLUME_AUDIT_DESCRIPTION_MISSING` · warning · from the built HTML
|
|
111
|
+
|
|
112
|
+
Fix: Add a `description` to the page's frontmatter.
|
|
113
|
+
|
|
114
|
+
#### Multiple meta description tags [#description-multiple]
|
|
115
|
+
|
|
116
|
+
`BLUME_AUDIT_DESCRIPTION_MULTIPLE` · error · from the built HTML
|
|
117
|
+
|
|
118
|
+
Fix: Remove the extra description `<meta>` from the page's layout or MDX.
|
|
119
|
+
|
|
120
|
+
#### Meta description too long or too short [#description-length]
|
|
121
|
+
|
|
122
|
+
`BLUME_AUDIT_DESCRIPTION_LENGTH` · warning · from the built HTML
|
|
123
|
+
|
|
124
|
+
Fix: Rewrite `description` in the frontmatter to fit the length range.
|
|
125
|
+
|
|
126
|
+
#### H1 tag missing or empty [#h1-missing]
|
|
127
|
+
|
|
128
|
+
`BLUME_AUDIT_H1_MISSING` · warning · from the built HTML
|
|
129
|
+
|
|
130
|
+
Fix: Give the page a `title` — Blume renders it as the page's `<h1>`.
|
|
131
|
+
|
|
132
|
+
#### Multiple H1 tags [#h1-multiple]
|
|
133
|
+
|
|
134
|
+
`BLUME_AUDIT_H1_MULTIPLE` · warning · from the built HTML
|
|
135
|
+
|
|
136
|
+
Fix: Demote the extra `# Heading` in the body to `##` — Blume already renders `title` as the h1.
|
|
137
|
+
|
|
138
|
+
#### Low word count [#low-word-count]
|
|
139
|
+
|
|
140
|
+
`BLUME_AUDIT_LOW_WORD_COUNT` · info · from the built HTML
|
|
141
|
+
|
|
142
|
+
Fix: Expand the page, or fold it into a larger one.
|
|
143
|
+
|
|
144
|
+
#### Heading levels skip (e.g. h2 to h4) [#heading-skip]
|
|
145
|
+
|
|
146
|
+
`BLUME_AUDIT_HEADING_SKIP` · info · from the built HTML
|
|
147
|
+
|
|
148
|
+
Fix: Adjust the heading to the next level down — skipped levels break table-of-contents nesting and screen-reader outlines.
|
|
149
|
+
|
|
150
|
+
#### Page is dated in the future [#future-dated-page]
|
|
151
|
+
|
|
152
|
+
`BLUME_AUDIT_FUTURE_DATED_PAGE` · info · from the built HTML
|
|
153
|
+
|
|
154
|
+
Fix: Correct the `date`, or hold the page back until it is meant to be live.
|
|
155
|
+
|
|
156
|
+
#### Viewport not set [#viewport-missing]
|
|
157
|
+
|
|
158
|
+
`BLUME_AUDIT_VIEWPORT_MISSING` · error · from the built HTML
|
|
159
|
+
|
|
160
|
+
Fix: Restore the viewport `<meta>` in your ejected layout.
|
|
161
|
+
|
|
162
|
+
### Duplicates
|
|
163
|
+
|
|
164
|
+
#### Duplicate title [#duplicate-title]
|
|
165
|
+
|
|
166
|
+
`BLUME_AUDIT_DUPLICATE_TITLE` · warning · from the built HTML
|
|
167
|
+
|
|
168
|
+
Fix: Give each page a distinct `title` — search engines show it as the result headline.
|
|
169
|
+
|
|
170
|
+
#### Duplicate meta description [#duplicate-description]
|
|
171
|
+
|
|
172
|
+
`BLUME_AUDIT_DUPLICATE_DESCRIPTION` · warning · from the built HTML
|
|
173
|
+
|
|
174
|
+
Fix: Give each page a distinct `description`.
|
|
175
|
+
|
|
176
|
+
#### Duplicate pages without canonical [#duplicate-content]
|
|
177
|
+
|
|
178
|
+
`BLUME_AUDIT_DUPLICATE_CONTENT` · warning · from the built HTML
|
|
179
|
+
|
|
180
|
+
Fix: Merge the pages, or set `seo.canonical` on all but one.
|
|
181
|
+
|
|
182
|
+
### Indexability
|
|
183
|
+
|
|
184
|
+
#### deployment.site is not set [#site-not-set]
|
|
185
|
+
|
|
186
|
+
`BLUME_AUDIT_SITE_NOT_SET` · warning · from the built HTML
|
|
187
|
+
|
|
188
|
+
Fix: Set `deployment.site` in blume.config.ts to the site's public URL.
|
|
189
|
+
|
|
190
|
+
#### deployment.site is inferred at deploy time [#site-inferred-at-deploy]
|
|
191
|
+
|
|
192
|
+
`BLUME_AUDIT_SITE_INFERRED_AT_DEPLOY` · info · from the built HTML
|
|
193
|
+
|
|
194
|
+
Fix: Audit a production-like build (e.g. `VERCEL=1 VERCEL_PROJECT_PRODUCTION_URL=<host> blume build`) or the deployment itself with `--url <origin>`. Do not hardcode `deployment.site` — the platform sets it on every deploy.
|
|
195
|
+
|
|
196
|
+
#### Page is noindex but declares a canonical [#canonical-on-noindex]
|
|
197
|
+
|
|
198
|
+
`BLUME_AUDIT_CANONICAL_ON_NOINDEX` · warning · from the built HTML
|
|
199
|
+
|
|
200
|
+
Fix: Drop the canonical from noindex pages — Google treats the pairing as contradictory and may ignore one of the two.
|
|
201
|
+
|
|
202
|
+
#### Draft page is in the build [#draft-page-published]
|
|
203
|
+
|
|
204
|
+
`BLUME_AUDIT_DRAFT_PAGE_PUBLISHED` · warning · from the built HTML
|
|
205
|
+
|
|
206
|
+
Fix: Rebuild without `--preview` before deploying, or remove `draft: true` if the page is ready to ship.
|
|
207
|
+
|
|
208
|
+
#### Canonical URL missing [#canonical-missing]
|
|
209
|
+
|
|
210
|
+
`BLUME_AUDIT_CANONICAL_MISSING` · warning · from the built HTML
|
|
211
|
+
|
|
212
|
+
Fix: Set `deployment.site` so Blume can emit absolute canonical URLs.
|
|
213
|
+
|
|
214
|
+
#### Non-canonical page [#canonical-not-self]
|
|
215
|
+
|
|
216
|
+
`BLUME_AUDIT_CANONICAL_NOT_SELF` · info · from the built HTML
|
|
217
|
+
|
|
218
|
+
Fix: Point `seo.canonical` at this page, or remove it to use the default self-canonical.
|
|
219
|
+
|
|
220
|
+
#### Canonical points to a broken or redirecting page [#canonical-bad-target]
|
|
221
|
+
|
|
222
|
+
`BLUME_AUDIT_CANONICAL_BAD_TARGET` · error · from the built HTML
|
|
223
|
+
|
|
224
|
+
Fix: Point `seo.canonical` at a page that exists and doesn't redirect.
|
|
225
|
+
|
|
226
|
+
#### Canonical protocol does not match the site [#canonical-protocol-mismatch]
|
|
227
|
+
|
|
228
|
+
`BLUME_AUDIT_CANONICAL_PROTOCOL_MISMATCH` · error · from the built HTML
|
|
229
|
+
|
|
230
|
+
Fix: Use the same protocol in `seo.canonical` as in `deployment.site`.
|
|
231
|
+
|
|
232
|
+
#### Page is not indexable [#robots-meta-unexpected]
|
|
233
|
+
|
|
234
|
+
`BLUME_AUDIT_ROBOTS_META_UNEXPECTED` · info · from the built HTML
|
|
235
|
+
|
|
236
|
+
Fix: Remove `noindex` from the page's frontmatter if it should be indexed.
|
|
237
|
+
|
|
238
|
+
#### Page exceeds Googlebot's 2 MB crawl limit [#html-too-large]
|
|
239
|
+
|
|
240
|
+
`BLUME_AUDIT_HTML_TOO_LARGE` · error · from the built HTML
|
|
241
|
+
|
|
242
|
+
Fix: Split the page — Googlebot stops reading an HTML document at 2 MB.
|
|
243
|
+
|
|
244
|
+
#### X-Robots-Tag header conflicts with the page's robots meta [#robots-header-conflict]
|
|
245
|
+
|
|
246
|
+
`BLUME_AUDIT_ROBOTS_HEADER_CONFLICT` · error · needs `--url`
|
|
247
|
+
|
|
248
|
+
Fix: Remove the X-Robots-Tag header, or align it with the page's robots meta.
|
|
249
|
+
|
|
250
|
+
### Links
|
|
251
|
+
|
|
252
|
+
#### Page has links to a broken page [#link-to-broken]
|
|
253
|
+
|
|
254
|
+
`BLUME_AUDIT_LINK_TO_BROKEN` · error · from the built HTML
|
|
255
|
+
|
|
256
|
+
Fix: Fix the link target, or create the page it points at.
|
|
257
|
+
|
|
258
|
+
#### Page has links to a redirect [#link-to-redirect]
|
|
259
|
+
|
|
260
|
+
`BLUME_AUDIT_LINK_TO_REDIRECT` · warning · from the built HTML
|
|
261
|
+
|
|
262
|
+
Fix: Link straight to the destination instead of through the redirect.
|
|
263
|
+
|
|
264
|
+
#### Orphan page (only reachable from navigation) [#orphan-page]
|
|
265
|
+
|
|
266
|
+
`BLUME_AUDIT_ORPHAN_PAGE` · warning · from the built HTML
|
|
267
|
+
|
|
268
|
+
Fix: Link to this page from the body of a related page.
|
|
269
|
+
|
|
270
|
+
#### Internal link hardcodes the site's own origin [#internal-link-absolute]
|
|
271
|
+
|
|
272
|
+
`BLUME_AUDIT_INTERNAL_LINK_ABSOLUTE` · warning · from the built HTML
|
|
273
|
+
|
|
274
|
+
Fix: Use a root-relative path (`/docs/x`) so the link survives previews and `basePath`.
|
|
275
|
+
|
|
276
|
+
#### Page has nofollow outgoing internal links [#internal-link-nofollow]
|
|
277
|
+
|
|
278
|
+
`BLUME_AUDIT_INTERNAL_LINK_NOFOLLOW` · info · from the built HTML
|
|
279
|
+
|
|
280
|
+
Fix: Drop `rel="nofollow"` — it stops this page passing authority internally.
|
|
281
|
+
|
|
282
|
+
#### Double slash in URL [#double-slash-url]
|
|
283
|
+
|
|
284
|
+
`BLUME_AUDIT_DOUBLE_SLASH_URL` · error · from the built HTML
|
|
285
|
+
|
|
286
|
+
Fix: Check `basePath` / `deployment.base` — a trailing slash there produces `//`.
|
|
287
|
+
|
|
288
|
+
#### Link fragment matches no id on the target page [#anchor-broken]
|
|
289
|
+
|
|
290
|
+
`BLUME_AUDIT_ANCHOR_BROKEN` · warning · from the built HTML
|
|
291
|
+
|
|
292
|
+
Fix: Point the fragment at a heading that exists on the target page, or fix the heading it meant.
|
|
293
|
+
|
|
294
|
+
#### URL contains uppercase, underscores, or spaces [#url-style]
|
|
295
|
+
|
|
296
|
+
`BLUME_AUDIT_URL_STYLE` · info · from the built HTML
|
|
297
|
+
|
|
298
|
+
Fix: Rename the source file to a lowercase, hyphenated slug — and add a redirect from the old URL if it was already published.
|
|
299
|
+
|
|
300
|
+
### Redirects
|
|
301
|
+
|
|
302
|
+
#### Broken redirect [#redirect-broken]
|
|
303
|
+
|
|
304
|
+
`BLUME_AUDIT_REDIRECT_BROKEN` · error · from the built HTML
|
|
305
|
+
|
|
306
|
+
Fix: Point the redirect at a page that exists.
|
|
307
|
+
|
|
308
|
+
#### Redirect loop [#redirect-loop]
|
|
309
|
+
|
|
310
|
+
`BLUME_AUDIT_REDIRECT_LOOP` · error · from the built HTML
|
|
311
|
+
|
|
312
|
+
Fix: Break the cycle in `redirects` — it never resolves.
|
|
313
|
+
|
|
314
|
+
#### Redirect chain [#redirect-chain]
|
|
315
|
+
|
|
316
|
+
`BLUME_AUDIT_REDIRECT_CHAIN` · warning · from the built HTML
|
|
317
|
+
|
|
318
|
+
Fix: Point every hop straight at the final destination.
|
|
319
|
+
|
|
320
|
+
#### Meta refresh redirect [#meta-refresh]
|
|
321
|
+
|
|
322
|
+
`BLUME_AUDIT_META_REFRESH` · warning · from the built HTML
|
|
323
|
+
|
|
324
|
+
Fix: Use a real redirect in `blume.config.ts` instead of a meta refresh.
|
|
325
|
+
|
|
326
|
+
#### Redirect source is also a real page [#redirect-source-is-page]
|
|
327
|
+
|
|
328
|
+
`BLUME_AUDIT_REDIRECT_SOURCE_IS_PAGE` · error · from the built HTML
|
|
329
|
+
|
|
330
|
+
Fix: Remove the redirect, or delete the page it shadows — the page wins and the redirect never fires.
|
|
331
|
+
|
|
332
|
+
#### HTTPS to HTTP redirect [#redirect-to-http]
|
|
333
|
+
|
|
334
|
+
`BLUME_AUDIT_REDIRECT_TO_HTTP` · error · needs `--url`
|
|
335
|
+
|
|
336
|
+
Fix: Redirect to the HTTPS URL.
|
|
337
|
+
|
|
338
|
+
### Social cards
|
|
339
|
+
|
|
340
|
+
#### Open Graph tags missing or incomplete [#og-incomplete]
|
|
341
|
+
|
|
342
|
+
`BLUME_AUDIT_OG_INCOMPLETE` · warning · from the built HTML
|
|
343
|
+
|
|
344
|
+
Fix: Add a `description` — Blume fills the rest of the Open Graph tags for you.
|
|
345
|
+
|
|
346
|
+
#### Open Graph image missing [#og-image-missing]
|
|
347
|
+
|
|
348
|
+
`BLUME_AUDIT_OG_IMAGE_MISSING` · warning · from the built HTML
|
|
349
|
+
|
|
350
|
+
Fix: Set `deployment.site` to turn on generated OG images, or set `seo.image` on the page.
|
|
351
|
+
|
|
352
|
+
#### Open Graph image is not in the build [#og-image-broken]
|
|
353
|
+
|
|
354
|
+
`BLUME_AUDIT_OG_IMAGE_BROKEN` · warning · from the built HTML
|
|
355
|
+
|
|
356
|
+
Fix: Point `seo.image` at a file that exists, or rebuild — a dead og:image renders as a blank card everywhere the page is shared.
|
|
357
|
+
|
|
358
|
+
#### Open Graph image is too small for large cards [#og-image-small]
|
|
359
|
+
|
|
360
|
+
`BLUME_AUDIT_OG_IMAGE_SMALL` · warning · from the built HTML
|
|
361
|
+
|
|
362
|
+
Fix: Use an image of at least 1200×630 — smaller ones render blurry or get cropped into small-card layouts.
|
|
363
|
+
|
|
364
|
+
#### Open Graph URL not matching canonical [#og-url-mismatch]
|
|
365
|
+
|
|
366
|
+
`BLUME_AUDIT_OG_URL_MISMATCH` · warning · from the built HTML
|
|
367
|
+
|
|
368
|
+
Fix: Align `og:url` with the page's canonical URL.
|
|
369
|
+
|
|
370
|
+
#### X (Twitter) card missing or incomplete [#twitter-card-incomplete]
|
|
371
|
+
|
|
372
|
+
`BLUME_AUDIT_TWITTER_CARD_INCOMPLETE` · warning · from the built HTML
|
|
373
|
+
|
|
374
|
+
Fix: Set `seo.x.handle` in blume.config.ts so X can attribute the card.
|
|
375
|
+
|
|
376
|
+
### Internationalization
|
|
377
|
+
|
|
378
|
+
#### HTML lang attribute missing [#html-lang-missing]
|
|
379
|
+
|
|
380
|
+
`BLUME_AUDIT_HTML_LANG_MISSING` · error · from the built HTML
|
|
381
|
+
|
|
382
|
+
Fix: Restore the `lang` attribute on `<html>` in your ejected layout.
|
|
383
|
+
|
|
384
|
+
#### HTML lang attribute invalid [#html-lang-invalid]
|
|
385
|
+
|
|
386
|
+
`BLUME_AUDIT_HTML_LANG_INVALID` · error · from the built HTML
|
|
387
|
+
|
|
388
|
+
Fix: Use a valid BCP 47 tag (e.g. `en`, `en-GB`) for the locale.
|
|
389
|
+
|
|
390
|
+
#### Hreflang and HTML lang mismatch [#hreflang-lang-mismatch]
|
|
391
|
+
|
|
392
|
+
`BLUME_AUDIT_HREFLANG_LANG_MISMATCH` · error · from the built HTML
|
|
393
|
+
|
|
394
|
+
Fix: The page's `<html lang>` must match its own hreflang annotation.
|
|
395
|
+
|
|
396
|
+
#### Hreflang annotation invalid [#hreflang-invalid]
|
|
397
|
+
|
|
398
|
+
`BLUME_AUDIT_HREFLANG_INVALID` · error · from the built HTML
|
|
399
|
+
|
|
400
|
+
Fix: Use a valid BCP 47 tag in the hreflang annotation.
|
|
401
|
+
|
|
402
|
+
#### Self-reference hreflang annotation missing [#hreflang-self-missing]
|
|
403
|
+
|
|
404
|
+
`BLUME_AUDIT_HREFLANG_SELF_MISSING` · warning · from the built HTML
|
|
405
|
+
|
|
406
|
+
Fix: A page's hreflang set must include a self-reference.
|
|
407
|
+
|
|
408
|
+
#### X-default hreflang annotation missing [#hreflang-xdefault-missing]
|
|
409
|
+
|
|
410
|
+
`BLUME_AUDIT_HREFLANG_XDEFAULT_MISSING` · info · from the built HTML
|
|
411
|
+
|
|
412
|
+
Fix: Add an `x-default` alternate pointing at the default-locale page.
|
|
413
|
+
|
|
414
|
+
#### Missing reciprocal hreflang (no return-tag) [#hreflang-no-return-tag]
|
|
415
|
+
|
|
416
|
+
`BLUME_AUDIT_HREFLANG_NO_RETURN_TAG` · error · from the built HTML
|
|
417
|
+
|
|
418
|
+
Fix: Every page in an hreflang group must link back to every other one.
|
|
419
|
+
|
|
420
|
+
#### Hreflang points to a broken, redirecting, or non-canonical page [#hreflang-bad-target]
|
|
421
|
+
|
|
422
|
+
`BLUME_AUDIT_HREFLANG_BAD_TARGET` · error · from the built HTML
|
|
423
|
+
|
|
424
|
+
Fix: Point the hreflang alternate at a page that exists and is canonical.
|
|
425
|
+
|
|
426
|
+
#### Hreflang group has a language conflict [#hreflang-conflict]
|
|
427
|
+
|
|
428
|
+
`BLUME_AUDIT_HREFLANG_CONFLICT` · error · from the built HTML
|
|
429
|
+
|
|
430
|
+
Fix: Each language in an hreflang group must name exactly one page.
|
|
431
|
+
|
|
432
|
+
### Assets
|
|
433
|
+
|
|
434
|
+
#### Missing alt text [#image-alt-missing]
|
|
435
|
+
|
|
436
|
+
`BLUME_AUDIT_IMAGE_ALT_MISSING` · warning · from the built HTML
|
|
437
|
+
|
|
438
|
+
Fix: Add descriptive `alt` text, or `alt=""` if the image is decorative.
|
|
439
|
+
|
|
440
|
+
#### Image broken [#image-broken]
|
|
441
|
+
|
|
442
|
+
`BLUME_AUDIT_IMAGE_BROKEN` · error · from the built HTML
|
|
443
|
+
|
|
444
|
+
Fix: Fix the image path, or add the file to public/.
|
|
445
|
+
|
|
446
|
+
#### Asset file size too large [#asset-too-large]
|
|
447
|
+
|
|
448
|
+
`BLUME_AUDIT_ASSET_TOO_LARGE` · warning · from the built HTML
|
|
449
|
+
|
|
450
|
+
Fix: Compress the asset, or serve a modern format (WebP/AVIF).
|
|
451
|
+
|
|
452
|
+
#### Image has no width/height [#image-missing-dimensions]
|
|
453
|
+
|
|
454
|
+
`BLUME_AUDIT_IMAGE_MISSING_DIMENSIONS` · warning · from the built HTML
|
|
455
|
+
|
|
456
|
+
Fix: Set `width` and `height` so the browser can reserve space (avoids layout shift).
|
|
457
|
+
|
|
458
|
+
#### Referenced script, style, or asset is missing from the build [#subresource-missing]
|
|
459
|
+
|
|
460
|
+
`BLUME_AUDIT_SUBRESOURCE_MISSING` · error · from the built HTML
|
|
461
|
+
|
|
462
|
+
Fix: Fix the reference, or restore the missing file.
|
|
463
|
+
|
|
464
|
+
#### HTTPS/HTTP mixed content [#mixed-content]
|
|
465
|
+
|
|
466
|
+
`BLUME_AUDIT_MIXED_CONTENT` · error · from the built HTML
|
|
467
|
+
|
|
468
|
+
Fix: Load the subresource over HTTPS — browsers block mixed content.
|
|
469
|
+
|
|
470
|
+
### Sitemap
|
|
471
|
+
|
|
472
|
+
#### Indexable page not in sitemap [#indexable-page-not-in-sitemap]
|
|
473
|
+
|
|
474
|
+
`BLUME_AUDIT_INDEXABLE_PAGE_NOT_IN_SITEMAP` · warning · from the built HTML
|
|
475
|
+
|
|
476
|
+
Fix: Remove `draft`/`hidden`/`noindex` from the page's frontmatter if it should be indexed.
|
|
477
|
+
|
|
478
|
+
#### Noindex page in sitemap [#noindex-in-sitemap]
|
|
479
|
+
|
|
480
|
+
`BLUME_AUDIT_NOINDEX_IN_SITEMAP` · error · from the built HTML
|
|
481
|
+
|
|
482
|
+
Fix: A noindex page should not be advertised in the sitemap.
|
|
483
|
+
|
|
484
|
+
#### Non-canonical page in sitemap [#non-canonical-in-sitemap]
|
|
485
|
+
|
|
486
|
+
`BLUME_AUDIT_NON_CANONICAL_IN_SITEMAP` · error · from the built HTML
|
|
487
|
+
|
|
488
|
+
Fix: List only canonical URLs in the sitemap.
|
|
489
|
+
|
|
490
|
+
#### Sitemap names a page that does not exist or redirects [#sitemap-bad-url]
|
|
491
|
+
|
|
492
|
+
`BLUME_AUDIT_SITEMAP_BAD_URL` · error · from the built HTML
|
|
493
|
+
|
|
494
|
+
Fix: Remove the URL from the sitemap, or build the page it names.
|
|
495
|
+
|
|
496
|
+
#### Sitemap has a syntax error or wrong format [#sitemap-invalid]
|
|
497
|
+
|
|
498
|
+
`BLUME_AUDIT_SITEMAP_INVALID` · error · from the built HTML
|
|
499
|
+
|
|
500
|
+
Fix: Sitemaps must be valid XML in the sitemaps.org urlset format.
|
|
501
|
+
|
|
502
|
+
#### Sitemap exceeds 50 MB or 50,000 URLs [#sitemap-too-large]
|
|
503
|
+
|
|
504
|
+
`BLUME_AUDIT_SITEMAP_TOO_LARGE` · error · from the built HTML
|
|
505
|
+
|
|
506
|
+
Fix: Split the sitemap — the limits are 50 MB and 50,000 URLs.
|
|
507
|
+
|
|
508
|
+
#### Sitemap lastmod is invalid or in the future [#sitemap-lastmod-invalid]
|
|
509
|
+
|
|
510
|
+
`BLUME_AUDIT_SITEMAP_LASTMOD_INVALID` · warning · from the built HTML
|
|
511
|
+
|
|
512
|
+
Fix: Use a real W3C date that is not in the future — search engines that catch a sitemap lying about freshness stop trusting its lastmod entirely.
|
|
513
|
+
|
|
514
|
+
#### Sitemap includes URLs out of its scope [#sitemap-out-of-scope]
|
|
515
|
+
|
|
516
|
+
`BLUME_AUDIT_SITEMAP_OUT_OF_SCOPE` · warning · from the built HTML
|
|
517
|
+
|
|
518
|
+
Fix: A sitemap may only list URLs on its own origin.
|
|
519
|
+
|
|
520
|
+
#### Sitemap is not accessible [#sitemap-not-accessible]
|
|
521
|
+
|
|
522
|
+
`BLUME_AUDIT_SITEMAP_NOT_ACCESSIBLE` · error · needs `--url`
|
|
523
|
+
|
|
524
|
+
Fix: Make sitemap.xml reachable at the site root.
|
|
525
|
+
|
|
526
|
+
### robots.txt
|
|
527
|
+
|
|
528
|
+
#### robots.txt missing [#robots-missing]
|
|
529
|
+
|
|
530
|
+
`BLUME_AUDIT_ROBOTS_MISSING` · warning · from the built HTML
|
|
531
|
+
|
|
532
|
+
Fix: Set `seo.robots: true` to generate robots.txt.
|
|
533
|
+
|
|
534
|
+
#### robots.txt has a syntax error [#robots-invalid]
|
|
535
|
+
|
|
536
|
+
`BLUME_AUDIT_ROBOTS_INVALID` · error · from the built HTML
|
|
537
|
+
|
|
538
|
+
Fix: Every robots.txt line must be a `Field: value` directive or a comment.
|
|
539
|
+
|
|
540
|
+
#### robots.txt disallows a page that is in the sitemap [#robots-disallows-indexable]
|
|
541
|
+
|
|
542
|
+
`BLUME_AUDIT_ROBOTS_DISALLOWS_INDEXABLE` · error · from the built HTML
|
|
543
|
+
|
|
544
|
+
Fix: A page can't be both disallowed in robots.txt and advertised in the sitemap.
|
|
545
|
+
|
|
546
|
+
#### robots.txt does not reference the sitemap [#robots-sitemap-missing]
|
|
547
|
+
|
|
548
|
+
`BLUME_AUDIT_ROBOTS_SITEMAP_MISSING` · info · from the built HTML
|
|
549
|
+
|
|
550
|
+
Fix: Set `deployment.site` so robots.txt can reference the sitemap.
|
|
551
|
+
|
|
552
|
+
#### robots.txt is not accessible [#robots-not-accessible]
|
|
553
|
+
|
|
554
|
+
`BLUME_AUDIT_ROBOTS_NOT_ACCESSIBLE` · error · needs `--url`
|
|
555
|
+
|
|
556
|
+
Fix: Make robots.txt reachable at the site root.
|
|
557
|
+
|
|
558
|
+
### AI discoverability
|
|
559
|
+
|
|
560
|
+
#### llms.txt missing from the build [#llms-txt-missing]
|
|
561
|
+
|
|
562
|
+
`BLUME_AUDIT_LLMS_TXT_MISSING` · warning · from the built HTML
|
|
563
|
+
|
|
564
|
+
Fix: Rebuild — `agents.llmsTxt` is enabled but the build has no llms.txt. If that's intentional, set `agents.llmsTxt: false`.
|
|
565
|
+
|
|
566
|
+
#### llms.txt lists a page the build does not serve [#llms-txt-stale-entry]
|
|
567
|
+
|
|
568
|
+
`BLUME_AUDIT_LLMS_TXT_STALE_ENTRY` · warning · from the built HTML
|
|
569
|
+
|
|
570
|
+
Fix: Rebuild so llms.txt matches the site — a stale entry sends an AI agent to a page that is not there.
|
|
571
|
+
|
|
572
|
+
#### Indexable page missing from llms.txt [#llms-txt-page-missing]
|
|
573
|
+
|
|
574
|
+
`BLUME_AUDIT_LLMS_TXT_PAGE_MISSING` · warning · from the built HTML
|
|
575
|
+
|
|
576
|
+
Fix: Rebuild so llms.txt matches the site; if the page is deliberately excluded, mark it `seo.noindex` or `sidebar.hidden`.
|
|
577
|
+
|
|
578
|
+
#### No DNS-AID agent-discovery records [#dns-aid-missing]
|
|
579
|
+
|
|
580
|
+
`BLUME_AUDIT_DNS_AID_MISSING` · info · needs `--url`
|
|
581
|
+
|
|
582
|
+
Fix: Publish a ServiceMode SVCB or HTTPS record at `_index._agents.<host>` with your DNS provider so agents can discover the site via DNS (DNS-AID).
|
|
583
|
+
|
|
584
|
+
#### DNS-AID records are not DNSSEC-authenticated [#dns-aid-unsigned]
|
|
585
|
+
|
|
586
|
+
`BLUME_AUDIT_DNS_AID_UNSIGNED` · info · needs `--url`
|
|
587
|
+
|
|
588
|
+
Fix: Enable DNSSEC for the zone so validating resolvers return authenticated DNS-AID answers; if your DNS provider doesn't support DNSSEC, the records still work unsigned.
|
|
589
|
+
|
|
590
|
+
### Structured data
|
|
591
|
+
|
|
592
|
+
#### Structured data is not valid JSON [#jsonld-invalid]
|
|
593
|
+
|
|
594
|
+
`BLUME_AUDIT_JSONLD_INVALID` · error · from the built HTML
|
|
595
|
+
|
|
596
|
+
Fix: The JSON-LD block must be valid JSON.
|
|
597
|
+
|
|
598
|
+
#### Structured data is missing required properties [#jsonld-incomplete]
|
|
599
|
+
|
|
600
|
+
`BLUME_AUDIT_JSONLD_INCOMPLETE` · warning · from the built HTML
|
|
601
|
+
|
|
602
|
+
Fix: Every JSON-LD node needs `@context` and `@type`.
|
|
603
|
+
|
|
604
|
+
### Live deployment
|
|
605
|
+
|
|
606
|
+
#### 4XX page [#http-4xx]
|
|
607
|
+
|
|
608
|
+
`BLUME_AUDIT_HTTP_4XX` · error · needs `--url`
|
|
609
|
+
|
|
610
|
+
Fix: The page is linked or in the sitemap but the deployment 404s it.
|
|
611
|
+
|
|
612
|
+
#### 5XX page [#http-5xx]
|
|
613
|
+
|
|
614
|
+
`BLUME_AUDIT_HTTP_5XX` · error · needs `--url`
|
|
615
|
+
|
|
616
|
+
Fix: The deployment is erroring on this page.
|
|
617
|
+
|
|
618
|
+
#### Timed out [#http-timeout]
|
|
619
|
+
|
|
620
|
+
`BLUME_AUDIT_HTTP_TIMEOUT` · error · needs `--url`
|
|
621
|
+
|
|
622
|
+
Fix: The page did not respond in time.
|
|
623
|
+
|
|
624
|
+
#### Not compressed [#not-compressed]
|
|
625
|
+
|
|
626
|
+
`BLUME_AUDIT_NOT_COMPRESSED` · warning · needs `--url`
|
|
627
|
+
|
|
628
|
+
Fix: Enable gzip or brotli on the host.
|
|
629
|
+
|
|
630
|
+
#### Slow page [#slow-response]
|
|
631
|
+
|
|
632
|
+
`BLUME_AUDIT_SLOW_RESPONSE` · warning · needs `--url`
|
|
633
|
+
|
|
634
|
+
Fix: The page was slow to respond.
|
|
635
|
+
|
|
636
|
+
#### External link is broken [#external-link-broken]
|
|
637
|
+
|
|
638
|
+
`BLUME_AUDIT_EXTERNAL_LINK_BROKEN` · error · needs `--external`
|
|
639
|
+
|
|
640
|
+
Fix: Fix or remove the outbound link.
|
|
641
|
+
|
|
642
|
+
#### External link redirects [#external-link-redirect]
|
|
643
|
+
|
|
644
|
+
`BLUME_AUDIT_EXTERNAL_LINK_REDIRECT` · info · needs `--external`
|
|
645
|
+
|
|
646
|
+
Fix: Link straight to the destination.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Doctor
|
|
3
|
+
description: blume doctor diagnoses configuration and content problems before you build — the config, every page, the Node version, and features that need a server.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`blume doctor` scans the project exactly as `blume build` would and reports what it finds, without generating or building anything. It's the first thing to run when a build fails for a reason that isn't obvious, and a cheap gate to keep in CI:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
blume doctor
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## What it checks
|
|
13
|
+
|
|
14
|
+
- **The Node version** against the range the installed `blume` package supports, read from its own `engines` field. A version outside it is a warning: things may work, but it isn't a combination Blume tests.
|
|
15
|
+
- **`blume.config.ts`**, with the same validation a build runs. A removed or renamed key fails with a hint naming its replacement rather than a bare "unrecognized key".
|
|
16
|
+
- **Every content page and folder meta**: the diagnostics `blume dev` and `blume build` print as they load the project — invalid frontmatter, navigation problems, missing include targets, and the rest — collected in one report.
|
|
17
|
+
- **Features that need a server** on a site configured for static output — Ask AI, the MCP server, or the Try it playground's built-in proxy: an error naming the feature, with the deployment adapter to switch to (or, when a host adapter is set to `output: "static"`, telling you to drop that option).
|
|
18
|
+
- **Packages your config needs** that aren't installed — the SDK a search, content source, or Ask AI adapter imports, a deployment adapter's `@astrojs/*` package, or the renderer for Vue or Svelte islands: an error naming each package, with the install command for your package manager. `blume build` stops on the same check.
|
|
19
|
+
- **`components.ts` overrides** Blume can't plan — an inline or computed entry, or an import whose file doesn't exist: an error for each, at its line.
|
|
20
|
+
- **A version-shaped folder** (`v1.0/`) on a site with no `versions` configured, which would otherwise build as ordinary content: a warning pointing at [`blume version`](/docs/cli/version).
|
|
21
|
+
- **Secrets an enabled feature reads** that aren't set, such as `ALGOLIA_ADMIN_API_KEY` or `OPENROUTER_API_KEY`: a warning naming the variable. Doctor loads `.env` and `.env.local` first, like `blume dev` and `blume build`.
|
|
22
|
+
|
|
23
|
+
## The summary
|
|
24
|
+
|
|
25
|
+
After the diagnostics, doctor prints what the project resolved to, so a mismatch between what you think is configured and what Blume sees is visible at a glance: the page count, the output mode and deployment adapter, the search provider, the configured reference, analytics, and content source adapters, and whether Ask AI is on and which backend it uses.
|
|
26
|
+
|
|
27
|
+
## Exit code and JSON
|
|
28
|
+
|
|
29
|
+
Doctor exits non-zero when there are error diagnostics, so it fails CI on the same problems a build would; warnings are reported and don't fail. `--json` emits the diagnostics as JSON on stdout instead of the terminal report, in the same shape [`blume validate --json`](/docs/cli/validate#json-output) uses.
|