Mermio, first client of Mermio
Before advising our clients on best SEO and technical practices, we apply them ourselves. This use-case documents the implementation choices made on mermio.ch — with real code snippets, the tools used for tracking, and the reasons behind each decision.
The goal: a site visible to search engines and generative AIs, compliant with current best practices, measurable and maintainable.
1. JSON-LD: the Schema.org structured markup
JSON-LD (JavaScript Object Notation for Linked Data) is the format recommended by Google for injecting structured data into a page without touching the visible HTML. It allows search engines — and AIs — to understand what your site is, not just what it says.
On mermio.ch, each type of page has its own JSON-LD, dynamically generated on the server side (Laravel). Here’s what is implemented:
Homepage:
Organization,LocalBusiness,ProfessionalService,WebSite,WebPage,FAQPageService page:
Service,BreadcrumbListBlog article:
Article,BreadcrumbList,Person(author)Contact page:
ContactPageFAQ page:
FAQPagewithQuestion/Answer
Example of the Organization block injected on the homepage:
{
"@context": "https://schema.org",
"@type": ["Organization", "LocalBusiness", "ProfessionalService"],
"@id": "https://www.mermio.ch/#organization",
"name": "Mermio",
"legalName": "Mermio Sàrl",
"url": "https://www.mermio.ch/",
"logo": {
"@type": "ImageObject",
"url": "https://www.mermio.ch/img/logo.webp",
"width": 200,
"height": 60
},
"address": {
"@type": "PostalAddress",
"streetAddress": "Rue de la Tour-de-l'Ile 4",
"addressLocality": "Geneva",
"postalCode": "1204",
"addressCountry": "CH"
},
"telephone": "+41786000366",
"founder": { "@type": "Person", "name": "Guillaume Mermillod" },
"foundingDate": "2025",
"taxID": "CHE-424.961.613",
"priceRange": "CHF",
"openingHours": "Mo-Fr 09:00-18:00"
}Structured data is regularly validated with the Schema Markup Validator and Google's rich results testing tool.
2. robots.txt: controlling access for crawlers
The robots.txt file, accessible at the root of the domain (https://www.mermio.ch/robots.txt), tells robots what they can — and cannot — explore.
On mermio.ch, we explicitly distinguish traditional crawlers (Googlebot, Bingbot) from AI agents (GPTBot, Claude, Anthropic), allowing the latter to index public content. We block, however, the administration areas and assets not relevant for SEO.
User-agent: *
Disallow: /admin/
....
User-agent: Googlebot
Allow: /
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: anthropic-ai
Allow: /
Sitemap: https://www.mermio.ch/sitemap.xmlIncluding the sitemap at the end of the file is a systematic best practice: it helps crawlers quickly discover all URLs.
3. llms.txt and llms-full.txt: preparing the site for generative AIs
The llms.txt and llms-full.txt files are an emerging convention (inspired by llmstxt.org) to provide LLMs with a structured and readable summary of a site's content — in Markdown, readable by both humans and machines.
It is the equivalent of robots.txt, but for AI agents: instead of controlling access, we guide understanding.
On mermio.ch, two levels are available:
/llms.txt: synthetic version — agency description, list of services with their URLs, recent articles/llms-full.txt: detailed version — complete descriptions of services, article excerpts, manifesto, FAQ
Excerpt from the llms.txt file:
# Mermio
> Web development and AI integration agency based in Geneva, Switzerland.
> Specializing in Laravel, Symfony, MCP integration, n8n automation.
....
## Services
- [Custom website](https://www.mermio.ch/services/developpement-web)
- [Landing page](https://www.mermio.ch/services/landing-pages)
....These files are generated and updated via our internal MCP server, ensuring they always reflect the actual content of the site.
4. GTM / MTM: tracking without polluting the code
Rather than directly integrating tracking scripts into the Laravel source code, we use a Tag Manager — Google Tag Manager (GTM) or Matomo Tag Manager (MTM) depending on the client's compliance requirements.
The advantages:
One snippet in the
<head>and<body>, all tags managed from an interface without deploymentTriggers on events (clicks, forms, scroll, time spent) without modifying the application code
Clear separation between business code and analytics logic
Versioning of containers (rollback possible in case of error)
Matomo Tag Manager snippet inserted in the <head> of the Blade layout:
{{-- Matomo Tag Manager --}}
<script>
var _mtm = window._mtm = window._mtm || [];
_mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
(function() {
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='https://nlpd.mondomaine.ch/js/container_XXXXXXXX.js';
s.parentNode.insertBefore(g,s);
})();
</script>
{{-- End Matomo Tag Manager --}}For nLPD compliance, Matomo hosted on a Swiss server is sufficient in most cases — no data transfer outside Switzerland, no third-party cookies. For more advanced integration (enhanced tracking, multi-touch attribution, audiences), we switch to server-side tagging with GTM server-side hosted on a dedicated subdomain (nlpd.mondomaine.ch) — requests pass through your own server before reaching analytics platforms, giving complete control over the transmitted data.
5. Pages accessible in .md: content designed for machines
Each major content page on mermio.ch is accessible in two formats:
The standard HTML URL:
https://www.mermio.ch/blog/mon-articleThe Markdown version:
https://www.mermio.ch/blog/mon-article.md
This convention allows AI agents (which often access pages via fetch or scraping) to retrieve content in a clean format, without HTML noise, navigation tags, or scripts. It is also useful for feeding RAG pipelines or automation workflows.
On the Laravel side, the implementation is simple: a route or middleware detects the .md extension and returns the content in plain Markdown text rather than the full Blade view:
// In the Article controller
public function show(Article $article, Request $request): Response
{
if (str_ends_with($request->getPathInfo(), '.md')) {
return response($article->toMarkdown(), 200)
->header('Content-Type', 'text/markdown; charset=UTF-8');
}
return view('articles.show', compact('article'));
}6. Indexing and performance tracking
Google Search Console
The Search Console is the essential tool for monitoring indexing. We particularly monitor:
The indexing status of URLs (indexed, excluded, errored)
Search performance: impressions, clicks, CTR, average position
The Core Web Vitals: LCP, INP, CLS — directly measured on real visits
Index coverage after each significant deployment
We systematically submit the XML sitemap (/sitemap.xml) to the Search Console as soon as a new site goes live.
Bing Webmaster Tools
Bing represents a significant share of search traffic, especially since the integration of Copilot. Bing Webmaster Tools allows:
Submitting the sitemap
Tracking indexing specific to Bingbot
The SEO Reports tool (equivalent to a mini-integrated audit)
Validating structured data (IndexNow is supported)
We enable IndexNow on all projects: each publication of a new article or service triggers an automatic notification to compatible engines (Bing, Yandex) for near-instant indexing.
Google PageSpeed Insights
PageSpeed Insights (based on Lighthouse) measures real performance on mobile and desktop. The key metrics tracked:
LCP (Largest Contentful Paint): time before the main content is visible
INP (Interaction to Next Paint): responsiveness to user interactions
CLS (Cumulative Layout Shift): visual stability during loading
TTFB (Time To First Byte): server response speed
On mermio.ch, we aim for a Lighthouse score > 90 on all metrics in production. Images are served in .webp, CSS is purged via Tailwind, and assets are minified and versioned via Vite.
7. Screaming Frog SEO Spider: recurring technical audit
Screaming Frog SEO Spider is our reference tool for technical SEO audits. It crawls the site as Googlebot would and returns a comprehensive list of potential issues.
We use it at several key moments:
Before launching a site (pre-launch audit)
After each redesign or migration
In monthly follow-ups to detect regressions
The main checkpoints:
HTTP Codes: detection of 404, 301, 500 errors and redirect chains
Title and meta description tags: absences, duplicates, incorrect lengths
Headings structure: missing H1, inconsistent hierarchy
Images: missing
altattributes, excessive weight, unoptimized formatsInternal links: generic anchors, orphan pages, indexing depth
Hreflang (if multilingual): consistency of tags between versions
Structured data: validation via integration with the Schema.org validator
Screaming Frog also integrates with Google Analytics, Google Search Console, and PageSpeed Insights to cross-reference data and prioritize fixes.
What it looks like in practice
These best practices are not checkboxes — they form a coherent system. JSON-LD makes pages understandable for Google and AIs. The robots.txt guides crawlers. The llms.txt files prepare the site for the age of AI agents. The Tag Manager decouples tracking from the code. The .md pages facilitate automated ingestion. And the triad GSC + Bing + PageSpeed + Screaming Frog ensures that we are not navigating blindly.
This is exactly what we implement for our clients — mermio.ch is the concrete demonstration of this.