Skip to content

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:
  title: "Dev Leader | Software Engineering"

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:
  canonical: "https://links.yoursite.com"

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.

seo:
  person:
    # wikidata_id: "Q12345678"   # Find or create your entity at wikidata.org

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.

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 Review entity per visible testimonial, with itemReviewed referencing the stable Person;
  • one standalone AggregateRating when at least one testimonial has a numeric rating, calculated from the visible rated testimonials and referencing the same reviewed Person.

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 Google
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).

analytics:
  google_analytics_id: "G-XXXXXXXXXX"