feat(seo): improve AI/search discoverability and add Matomo measurement #66

Merged
claudiomaradonna merged 5 commits from feat/seo-and-analytics into master 2026-05-30 16:23:48 +02:00
Collaborator

Make the site discoverable and citable by AI answer engines while keeping training cra
wlers out, and stand up the measurement needed to see whether visitors actually reach
a contact action. The robots.txt policy now explicitly allows search/citation bots (OA
I-SearchBot, ChatGPT-User, PerplexityBot) and disallows training/dataset crawlers (GPT
Bot, Google-Extended, ClaudeBot, CCBot and others), advertises both the IT and EN site
maps, and ships a static /llms.txt index for LLM consumption. On-page signals are st
rengthened in seo-translated.html with og:locale:alternate and a richer Organizati
on JSON-LD, plus per-page Service, Person and BreadcrumbList schema, all built with th
e existing manual URL construction to dodge the absolute_url filter-cache bug. On th
e analytics side, matomo.js switches to event delegation so clicks on icons nested i
n contact anchors are caught and fires consent-gated goals and events for mailto, cal.
eu and wa.me links; bottom.html primes custom dimensions (Language, Section) before
trackPageView, and main.js adds debounced site-search tracking. docs/architecture .md and the new docs/analytics.md runbook document the SEO output and how to recons
truct a contact funnel on self-hosted Matomo 5.x without the paid Funnels plugin.

Make the site discoverable and citable by AI answer engines while keeping training cra wlers out, and stand up the measurement needed to see whether visitors actually reach a contact action. The robots.txt policy now explicitly allows search/citation bots (OA I-SearchBot, ChatGPT-User, PerplexityBot) and disallows training/dataset crawlers (GPT Bot, Google-Extended, ClaudeBot, CCBot and others), advertises both the IT and EN site maps, and ships a static `/llms.txt` index for LLM consumption. On-page signals are st rengthened in `seo-translated.html` with `og:locale:alternate` and a richer Organizati on JSON-LD, plus per-page Service, Person and BreadcrumbList schema, all built with th e existing manual URL construction to dodge the `absolute_url` filter-cache bug. On th e analytics side, `matomo.js` switches to event delegation so clicks on icons nested i n contact anchors are caught and fires consent-gated goals and events for mailto, cal. eu and wa.me links; `bottom.html` primes custom dimensions (Language, Section) before `trackPageView`, and `main.js` adds debounced site-search tracking. `docs/architecture .md` and the new `docs/analytics.md` runbook document the SEO output and how to recons truct a contact funnel on self-hosted Matomo 5.x without the paid Funnels plugin.
Set an explicit AI-crawler policy in robots.txt: allow search/citation
bots (OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User) so the
site stays discoverable and citable, while disallowing training/dataset
crawlers (GPTBot, Google-Extended, ClaudeBot, anthropic-ai, CCBot,
Applebot-Extended, Bytespider, meta-externalagent, cohere-ai, Diffbot).
Also advertise both the IT and EN sitemaps.

Add src/llms.txt, a static Markdown index served at /llms.txt that
summarises Unitoo and links the key IT/EN pages for LLM consumption.
Strengthen on-page SEO signals for search and AI answer engines:

- seo-translated.html: emit og:locale:alternate and enrich the
  Organization JSON-LD with areaServed, knowsAbout, a ContactPoint and a
  single founder, dropping noise from the address block.
- Add the breadcrumb-schema.html include that builds language-aware
  BreadcrumbList JSON-LD using the same manual URL construction used
  elsewhere to dodge the absolute_url filter-cache bug.
- Add Service JSON-LD and BreadcrumbList to atlas/thrust/beacon, and
  Person JSON-LD for Claudio Maradonna on about-us.
Instrument Matomo measurement (consent-gated, self-hosted):

- matomo.js: switch contact tracking to event delegation so clicks on
  icons nested in anchors are caught; fire goals 1/2/3 and Contact events
  for mailto, cal.eu and wa.me links.
- bottom.html: prime custom dimensions (1 = Language, 2 = Section) before
  matomo.js runs trackPageView.
- main.js: debounced trackSiteSearch on the page and nav search inputs,
  reporting the keyword and the real result count.
Describe the enriched SEO output in architecture.md: og:locale +
og:locale:alternate, hreflang alternates, WebSite/Organization JSON-LD on
every page, the per-page Service/Person/BreadcrumbList data, the
robots.txt AI-crawler policy plus llms.txt index, and a pointer to the
new analytics runbook.
Add docs/analytics.md: a self-hosted/open-source Matomo runbook covering
what the site tracks (page views, link tracking, heartbeat, custom
dimensions, contact goals/events, site search) and how to reconstruct a
funnel without the paid Funnels plugin, with Matomo 5.x admin paths.
claudiomaradonna deleted branch feat/seo-and-analytics 2026-05-30 16:23:52 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
unitoo/website!66
No description provided.