Home / kayjays.de
Case study 02 — kayjays.de Solo build · owned since 01/2025

Build, own and operate.

kayjays.de is a Munich dance school website I built and have run since January 2025: information architecture, content, technical setup, publishing and ongoing search work, then a 2026 relaunch and a custom plugin. Three chapters — built, measured, rebuilt on what the measurements said.

Timeline
Jan 2025
Site built
Feb 2025
Tracking begins
2025–26
Operating
Aug–Sep 2026
Relaunch on staging
Cutover
+6 / +12 wk
Readouts
01 — Results Measured 2025 build · like-for-like year over year
+169%
Organic sessions, YoY
47.6 → 56.6%
Organic share of sessions
70.5%
Organic engagement rate
2,833
GSC clicks
Relaunch readout Pending Data from +6 / +12 weeks after cutover
[ ]
Organic sessions, before / after
[ ]
Organic share
[ ]
GSC clicks
[ ]
Rich results vs schema baseline
02 Limitation, stated first

There is no pre-launch baseline.

The comparison here is like-for-like year over year on a site that did not exist in a measurable form before. It is not a rebuild-uplift claim.

kayjays.de was the first site I built. Tracking was set up as part of learning to build it, which is why there is no 2024 baseline — and it is the honest origin of the build, own and operate framing.

03 Chapter I — the 2025 build Measured

Eight course types, one system.

I.1 — Growth

Organic sessions rose 169% year over year on a like-for-like window, and organic moved from 47.6% to 56.6% of all sessions. Engagement on organic traffic held at 70.5%.

Search Console recorded 2,833 clicks over the same period. Growth came from the course architecture and from posts that ranked on style and audience terms — a split that turned out to matter.

GA4 · like-for-like YoY · GSC clicks

I.2 — Architecture

Eight course types were modelled as one system rather than eight page templates. Intent, audience, schedule, location and teacher are distinct elements, so a course page can be assembled from them instead of written from scratch.

That decision is what made the 2026 relaunch a re-composition rather than a rewrite.

Course page at launch Pending
Course page screenshot — at launch
I.3 — Local intent and language

German is the language of the demand. Style names stay in their original form where searchers use them, and audience and location terms are German throughout — the naming follows the query, not the brand's preference.

QueryAvg positionRead
shuffle6.65First page
kpop5.47First page
breakdance kinder8.39First page
dancehall7.08First page
bauchtanz16.82Opportunity
kindertanz20.71Opportunity
kinderballett29.06Opportunity

Google Search Console · average position

04 Chapter II — what 18 months of data changed

The traffic sat on posts, not the architecture.

The Search Console export showed the site's largest organic assets were a handful of URLs, and they were not the pages the system was built around.

Largest organic assetsClicksPosition
K-Pop post — the site's #2 page3637.98
Shuffle course page331
Shuffle post129

Google Search Console · pages export

The relaunch decisions that followed
01

Merge posts into course pages

Post content folds into the course page it supports, so the ranking asset and the conversion page are the same URL.

02

Style × audience as hub and children

Each style hub carries its audience pages beneath it rather than competing with them.

03

Conversion terms over national heads

Terms like kindergeburtstag münchen and the local pack, in place of national style heads that produce out-of-market clicks.

04

Price question first

All 15 course pages open their FAQ with the price question, because that is the question being asked.

Migration discipline

The redirect map was built from the Search Console Pages export covering 16 months and 166 URLs — not from the sitemap or a crawl, both of which were incomplete.

Published posts were drafted so the 301s can fire cleanly at cutover.

URLs in source export166
Redirect rules53
Single-URL rules40
Regex patterns · ~120 EventPrime URLs13
05 Chapter III — operating: one source of truth Built · on staging

A fact written twice goes stale once.

Class times, teachers and ages were hand-written in prose on teacher and course pages and also rendered by the schedule. One Tuesday class moved to 18:30 while the page still said 17:50. A fact sweep across 50 pages also found invented facts on pages written before fact-gathering, including phone hours nobody had confirmed.

The rule adopted

Teacher and schedule information lives only in the plugin backend.

No time, teacher or price is hand-written on any page.

Prices render via shortcode from one price record.

One record, four surfaces
Source record
Class · teacher · location · price

Entered once in the plugin backend. Nothing downstream is typed by hand.

01Schedule blockPer course, teacher and location
02Teacher gridAnd course–teacher cards
03Course panelDynamic prices and sign-ups
04JSON-LDCourse and Person, from the same records as the display

Structured data is generated from the display records, so the markup cannot drift from the page.

Scheduling calendar Pending
Scheduling calendar — mockup now, real screenshot at launch
Status

Built, on staging, launching with the relaunch. It is not described as live until it is.

Studio Classes & Schedule case study (in preparation)

Concurrency test, security audit, CI and the deliberately-not-built list are documented there.

06 Governance and legal hygiene

What operate means

01

52 pre-publish check boxes worked down to zero across 49 pages before cutover. Open questions were collected in one document for the owner rather than sent ad hoc.

02

Legal gaps found and closed in the audit: no Impressum on the live site, cookie tooling installed but never configured, and privacy text citing only BDSG.

03

Data-retention and consent rulings made before sign-ups go live: drop-in sign-ups deleted 30 days after class, photo consent moved to a separate opt-in.

07 What I would change now

Addressed in the relaunch, and still open.

Addressed in relaunch — readout pending
01Course-category strength
02Page-table impressions on the homepage
Open
03No English version yet
04Mobile week-grid layout still pending in the plugin
05Pre-launch numbers from the old builder site are unrecoverable
08 Sources and limits

Figures come from GA4 and Google Search Console for kayjays.de, on like-for-like windows, with each window stated beside the figure it supports.

The relaunch baseline was captured before cutover in the SEO baseline workbook: GSC site metrics, URL-level data, schema and rich results, an evidence log and an AI-search prompt baseline. Readouts follow at +6 and +12 weeks. Anything not yet measured is marked Pending on this page.

Verification step — confirm no duplicated GA4 tag on live before republishing any KPI: MonsterInsights and Site Kit are both active. Key-event figures are not quoted; the definition changed mid-period.

Visit kayjays.de ↗ Studio Classes & Schedule case study (in preparation) Approach — the governance model ↗