SEO & Discoverability¶
Homebase is optimized for search engines, AI answer engines (AEO), generative engine optimization (GEO), and social sharing out of the box.
Fields Reference¶
seo.title¶
The <title> tag and og:title. Keep under 60 characters.
seo.description¶
The <meta name="description"> and og:description. Keep 120-160 characters.
seo.canonical¶
The canonical URL for your site (no trailing slash). Used in <link rel="canonical">, og:url, JSON-LD, and sitemap.
seo.og_image¶
Open Graph image URL. Shown as the preview image when shared on social media. Recommended size: 1200×630px.
seo.og_image_auto / seo.og_image_brand_color¶
When og_image_auto: true, Homebase generates a 1200×630 PNG at build time and uses it for all og:image, twitter:image, and JSON-LD image references. The image composites your brand color background, a circular avatar (from profile.avatar), your name, tagline, and site URL.
seo:
og_image_auto: false # set true to enable; false by default
og_image_brand_color: "#1E2330" # optional background color override
| Field | Default | Description |
|---|---|---|
og_image_auto |
false |
Set to true to generate src/assets/og-image-auto.png before each build. |
og_image_brand_color |
"#1E2330" |
Hex background color for the generated image. |
Requires @napi-rs/canvas
The generator uses @napi-rs/canvas (a devDependency with prebuilt native bindings). It is triggered by Eleventy's eleventy.before event and works in GitHub Actions without extra setup. When auto mode is active, og:image dimensions are reported as 1200×630 (PNG).
seo.keywords¶
Array of keywords for <meta name="keywords">. Not heavily weighted by modern search engines but still included.
seo.person.correction_notes¶
Array of factual statements written into your llms.txt to anchor AI-generated answers. Use this to prevent LLMs from hallucinating wrong job titles, affiliations, or product attributions.
seo:
person:
correction_notes:
- "All content is independent and does not represent my employer's views."
- "My SaaS product is separate from my personal brand."
seo.person.wikidata_id¶
Your Wikidata entity ID (e.g. "Q12345678"). When set, appends https://www.wikidata.org/wiki/{wikidata_id} to the Person.sameAs[] array in your JSON-LD.
Cross-source identity
A valid Wikidata entity can strengthen identity disambiguation by linking
the creator to an independently maintained entity URL. It is one of many
possible sameAs signals and does not guarantee a Knowledge Panel or
ranking change.
What Gets Generated¶
| Tag / File | Source |
|---|---|
<title> |
seo.title |
<meta name="description"> |
seo.description |
<meta name="author"> |
profile.name |
<link rel="canonical"> |
seo.canonical |
<link rel="me"> |
All entries in socials (IndieAuth / Mastodon identity) |
og:title |
seo.title |
og:description |
seo.description |
og:image |
seo.og_image (or auto-generated PNG when seo.og_image_auto: true) |
og:image dimensions |
1200×630 when seo.og_image_auto: true |
og:url |
seo.canonical |
og:type |
profile (hardcoded) |
twitter:card |
summary_large_image (hardcoded) |
twitter:image |
Same as og:image |
| Schema.org JSON-LD | Page-aware WebSite graph with ProfilePage or CollectionPage, Person, and ItemList |
FAQPage JSON-LD |
integrations.faq.items (when enabled) |
BreadcrumbList JSON-LD |
Auto-generated for home and shop pages |
Speakable JSON-LD |
Marks profile bio and FAQ answers for voice assistants |
VideoObject JSON-LD |
One per video from youtube_channels feed or featured_videos |
Standalone Review + AggregateRating entities referencing Person |
Visible integrations.testimonials items and ratings |
/sitemap.xml |
seo.canonical + all page URLs |
/robots.txt |
Auto-generated (see below) |
/llms.txt |
Auto-generated from site.yaml (see below) |
/llms-full.txt |
Auto-generated, full-text companion (see below) |
Identity Meta Tags¶
Every page emits author, creator, and publisher meta tags automatically from your profile and SEO config:
<meta name="author" content="Dev Leader" />
<meta name="creator" content="Dev Leader" />
<meta name="publisher" content="Dev Leader | Software Engineering" />
A <link rel="me"> tag is emitted for every URL in your socials array. This is used by Mastodon and IndieAuth to verify that your social profiles belong to the same identity.
JSON-LD Schemas¶
Homebase emits one connected JSON-LD graph per page. The graph provides consumer-neutral structured semantics; specific presentation features depend on each search engine or application.
WebSite + ProfilePage + Person + ItemList¶
The home page emits one connected graph describing the site, profile page,
creator identity, links, optional FAQ content, videos, reviews, and breadcrumb.
Stable @id references connect the entities without duplicating their data.
Shop CollectionPage¶
The shop route emits a CollectionPage whose canonical URL matches the shop
page. It references the same stable WebSite and Person entities and uses a
page-scoped ItemList and breadcrumb.
FAQPage¶
Emitted when integrations.faq.enabled: true. Each visible
question/answer pair becomes a Question + acceptedAnswer. Google
removed FAQ rich results in May 2026, but the schema remains valid structured
Q&A for other compatible consumers.
BreadcrumbList¶
Always present. Provides structured navigation hints (Home → Shop) to search engines.
Speakable¶
Marks the profile bio (.profile-bio) and FAQ answers
(.integration-faq-answer) as concise text-to-speech candidates for consumers
that support SpeakableSpecification.
Speakable is in beta
Google's documented Speakable implementation is a beta for US English-language topical news. Homebase preserves the valid semantic property as experimental interoperability metadata without promising Google Assistant presentation. Source: Google Search Central
VideoObject¶
Emitted automatically as one VideoObject entity per video from your
youtube_channels live feed or featured_videos fallback.
thumbnailUrl, contentUrl, and embedUrl are auto-derived from the video's
youtube_id. The uploadDate is extracted from the YouTube Atom feed (Option
A) or from the upload_date field supplied on each featured_videos entry
(Option B). When no accurate date is available, Homebase preserves the video
entity and omits uploadDate.
See Configuration — Featured Videos for the description and upload_date fields.
Review + AggregateRating¶
Emitted automatically when integrations.testimonials.enabled: true and at
least one testimonial item exists:
- one standalone
Reviewentity per visible testimonial, withitemReviewedreferencing the stablePerson; - one standalone
AggregateRatingwhen at least one testimonial has a numeric rating, calculated from the visible rated testimonials and referencing the same reviewedPerson.
This preserves the review relationship without attaching properties whose
Schema.org domain excludes Person. Google does not support Person review
snippets.
OG Image Auto Generation¶
When seo.og_image_auto: true, Homebase generates src/assets/og-image-auto.png (1200×630) before each build using scripts/generate-og-image.js. The image is then used everywhere og:image, twitter:image, and JSON-LD image references appear — you do not need to set seo.og_image separately.
The generated image composites:
- Brand color background (
seo.og_image_brand_color, default#1E2330) - Circular avatar from
profile.avatar - Display name from
profile.name - Tagline / bio text
- Site URL from
seo.canonical
seo:
og_image_auto: false # set true to enable
og_image_brand_color: "#1E2330" # optional background color override
Build-time only
The image is regenerated on every build. To preview it locally, run npm run build and open src/assets/og-image-auto.png. The generator runs as part of Eleventy's eleventy.before event, so it is always up to date before pages are rendered.
llms.txt (AEO/GEO)¶
llms.txt is an emerging plain-text interoperability convention served at
/llms.txt. Some documentation and developer tools consume the format, while
major search and AI providers do not universally document support.
What is AEO/GEO?
AEO and GEO describe efforts to improve machine understanding and
visibility in answer-oriented experiences. Google treats this work as SEO
and explicitly states that it ignores llms.txt. Homebase keeps the file
for other and future consumers without claiming ranking or citation
benefits. Spec: llmstxt.org
The generated llms.txt includes these sections, all driven by site.yaml:
| Section | Source |
|---|---|
## Canonical Identity |
profile.name, profile.username, profile.location, profile.language, seo.canonical |
## Correction Notes |
seo.person.correction_notes[] + a default disclaimer |
## About |
seo.llms_about (falls back to seo.description) |
## Topics |
seo.llms_topics[] |
## Content Formats |
seo.llms_content_formats[] |
## Audience |
seo.llms_audience |
## Frequently Asked Questions |
integrations.faq.items[] (when enabled) |
## Links |
All links from sections |
## Social Profiles |
All visible entries in socials |
## Content Metadata |
seo.date_modified (when configured) + generated-file timestamp |
## Shop |
shop.collections (when shop is enabled) |
llms-full.txt (Full Content Companion)¶
A full-text companion to llms.txt served at /llms-full.txt. Per the llmstxt.org spec, this file provides the complete page content for AI systems that want to ingest more context — extended bio, full link descriptions, complete FAQ answers, and detailed shop item descriptions.
The ## Correction Notes, ## Canonical Identity, and ## Frequently Asked Questions sections are identical to llms.txt. Additional sections include:
| Section | Source |
|---|---|
## Full Bio |
profile.ai_summary + profile.extended_bio |
## All Links |
All sections and links with descriptions |
## Products & Services |
Full shop items with descriptions and pricing |
robots.txt¶
Auto-generated. The wildcard rule already allows all crawlers. Named entries make the current policy explicit and document the different search, training, and user-triggered agents that creators may choose to configure differently in future versions:
| Crawler | Operator |
|---|---|
GPTBot |
OpenAI |
OAI-SearchBot |
OpenAI |
ChatGPT-User |
OpenAI |
ClaudeBot |
Anthropic |
Claude-SearchBot |
Anthropic |
anthropic-ai |
Anthropic |
PerplexityBot |
Perplexity |
Google-Extended |
|
PhindBot |
Phind |
YouBot |
You.com |
Applebot-Extended |
Apple |
CCBot |
Common Crawl (LLM pre-training datasets) |
Bytespider |
ByteDance |
Amazonbot |
Amazon |
The robots.txt also includes a comment pointing crawlers to /llms.txt and /llms-full.txt for structured content.
sitemap.xml¶
Auto-generated from seo.canonical. Submitted to Google Search Console at /sitemap.xml.
Google Analytics¶
Set analytics.google_analytics_id in site.yaml. Leave blank to disable (no tracking code is injected).