Web development with SEO & GEO
Reference client: Logistics and trading group in Tyrol, Austria · ~100 employees · 4 sites
Customer data in copy and images has been neutralised.
Starting point
A website nobody finds is a business card in a desk drawer. The group's web presences were technically outdated, slow, and practically invisible to search engines — and increasingly to AI search.
On top of that, nothing was measurable: nobody knew which terms the sites ranked for, what visitors did, or how much of it ever turned into an inquiry.
The hard part
Ranking is not the goal. The click is. On one of the domains the positions were good and visitor numbers still flat — the cause was not the placement but what could be read in the results list. Optimise for position alone and you improve a number nobody pays for.
On top of that comes a shift that is happening right now: AI answer engines cite content but frequently do not link it. Visibility arises there without a visit appearing in any statistic. Measure clicks only and you do not see that part at all.
And the third difficulty is measurement itself. Rely on third-party tools and you get samples and estimates. A defensible statement about your own development needs your own data, collected daily — otherwise you are debating feelings.
Solution
The sites were rebuilt: modern stacks like Next.js and headless CMS, multilingual, on a clean technical SEO foundation — structured data, sitemaps, IndexNow, consistently optimized for performance.
Plus GEO — generative engine optimization: content structured so AI search engines like ChatGPT or Perplexity can cite it as a source, including machine-readable summaries.
Measurement is self-hosted: Matomo instead of US cloud analytics, plus a purpose-built rank tracker watching around 2,400 active search terms across four domains daily — more than 140,000 ranking data points since launch.
How it is built
The sites are statically pre-built. Every page exists as a finished document before the first visitor arrives, and that is both the reason for the load times and the precondition for simple crawlers seeing the full content — some AI crawlers execute no JavaScript at all.
Content lives in an editorial system or as text files in the project, bilingual under the same identifier. Structured data is generated from the same content the visible page is built from. That is why markup and text cannot drift apart.
Search engines and answer engines get separate routes: a classic sitemap and immediate notification on change, alongside machine-readable summaries and AI crawlers admitted by name.
Measurement is self-hosted. Visitor statistics on our own infrastructure instead of a US cloud, plus a purpose-built rank tracker collecting around 2,400 search terms across four domains daily.
Day-to-day operation
More than 140,000 ranking data points have accumulated since launch. The value is not in the volume but in the fact that every change to a page becomes visible over time — effect can be evidenced rather than asserted.
After every release the embedded files are checked. Not the status code alone but the content type: in many setups a missing file answers with an error page that looks like a valid response.
New content is announced actively rather than waited on. For timely subjects, the difference between “indexed in a few days” and “in minutes” is the entire benefit.
Outcome
SEO decisions rest on first-party data instead of gut feeling: every change is traceable in the ranking history.
The pages load fast, rank up front for their brand terms, and are ready for the next generation of search — AI answer engines.
What we learned
Our own measuring tool once handed us a false statement. It counted an empty alt attribute on images as a missing one — when that is precisely the correct markup for a purely decorative image, and the claim we derived from it about a competitor was therefore simply wrong. Re-measured and counted separately, not a single provider in the comparison field had an image without an alt attribute. The rule that follows: before a measurement supports a claim, the measurement gets checked.
The service that notifies search engines about new pages worked through a hardcoded list. Filled once at build time, never again. Every article since was never announced, and nothing was broken about it, there was no error message, the list was merely old. Today it derives itself from the articles. A configuration that has to be maintained will eventually stop being maintained.
Check what the visitor actually receives, not what the draft shows. The delivery path is part of the test. A check that measures the draft only proves the draft.

Our own tool over 30 days: visits, impressions, rankings and the company visits derived from them. Customer name and domain are replaced in the image.
Similar problem?
Tell us what you're planning — a short call clarifies whether it pays off.
senn-tech