Commerce SEO for a course catalogue · Copenhagen, Denmark
Treating 180 short courses like products put a folk high school in front of every searcher
Result card · 9 months
Courses with rich results: 0 → 180
Organic sessions: +139%
Pull a drawer. Each category is now a page, and each course a typed card — stamped with the day it reached its ranking.
Drawer Ce · Ceramics
22 course pages · 152 long-tail terms
- Query cardNo. 01
“ceramics week course denmark”
was not indexed
Ranked
now #2
12 JUN - Query cardNo. 02
“raku firing workshop zealand”
was not indexed
Ranked
now #1
03 JUL - Query cardNo. 03
“wheel throwing summer course”
was #64
Ranked
now #4
21 AUG
01The challenge
A catalogue nobody could open.
Courses lived in a booking system with no indexable pages, so specific searches like 'ceramics week course Denmark' found nothing.
The school runs 180 short courses a year — five-day ceramics, weekend choirs, kayak weeks on the Sound. Searchers were asking for exactly those things, in exactly those words. But the courses only existed once someone was already inside the booking flow, so every specific search landed on an aggregator, a rival school, or nothing at all.
ceramics week course denmark
coursehub-aggregator.example
Pottery holidays in Denmark – 14 options
Compare dates and prices…
another-school.example › kurser
Keramik sommerkursus | Another Højskole
Uge 28 · 5 dage
lindegaard.example › courses
Courses – Lindegaard Folkehøjskole
Page 4 · no description available
ceramics week course denmark
coursehub-aggregator.example
Pottery holidays in Denmark – 14 options
Compare dates and prices…
lindegaard.example › courses › ceramics
Ceramics Week: wheel & glaze, 5 days
Course · 14–19 Jun · DKK 4,900 · 6 places left
another-school.example › kurser
Keramik sommerkursus | Another Højskole
Uge 28 · 5 dage
02Diagnosis
Six findings, filed by drawer.
- Indexing
Finding 01
180 courses, 0 URLs
Every course lived inside a booking widget rendered client-side from a third-party API. Google saw one page — “Courses” — with an empty container where the catalogue should be.
- Indexing
Finding 02
Session IDs in every link
The few crawlable booking links carried ?sid= parameters, producing 3,900 duplicate URLs in the crawl and no canonical to collapse them.
- Schema
Finding 03
No Course or Event markup
Dates, duration, price and language existed only in the booking system, so no course was eligible for course or event rich results.
- Architecture
Finding 04
No category layer
Ceramics, choir and kayak weeks sat in one undifferentiated list. Nothing could rank for “ceramics course denmark”, because no page was about ceramics.
- Content
Finding 05
Season text, not course text
The site described the school’s long winter terms. Short summer courses — 70% of bookings — had a 40-word blurb each inside the widget.
- Linking
Finding 06
Orphaned archive
Past course pages from an old CMS were 404s with backlinks from Danish craft guilds, wasting 212 referring domains.
03 · The strategy
Treat every course like a product with its own shelf mark.
Built on our Commerce SEO plan (ecommerce seo): the same playbook we use for product catalogues — feeds, structured data, category hubs and link architecture — applied to a school whose products are weeks of learning.
Tactic 01
Course feeds
The booking system becomes the source, not the shop window.
A nightly feed exports all 180 courses — title, tutor, dates, places left, price, language — into static, server-rendered pages at /courses/<category>/<course>. Sold-out dates stay live with a waitlist, so a page never disappears mid-season.
Tactic 02
Course schema
Every card gets the same typed fields, like a catalogue standard.
Course and CourseInstance markup for each date (startDate, courseMode, duration, offers with DKK price and availability), plus EducationalOrganization for the school. Validated in bulk against the feed so a new course is marked up the day it is published.
Tactic 03
Category pages
Ten drawers, each a page with something to say.
Ten category hubs written by the tutors: what a week of weaving actually involves, what to bring, who it suits. Each lists live dates and filters by month and language without spawning crawlable parameter URLs.
Tactic 04
Internal linking
See-also cards, the way a librarian cross-references.
Each course links to its drawer, to two related courses in other drawers (wheel throwing → natural dye) and to its tutor. The 212 lost guild backlinks were 301-redirected to the matching new course pages.
04Timeline
9 months on one date-due slip.
Each month gets a line and a stamp. The order matters: the feed had to exist before schema could describe it, and categories before links could point at them.
- M1FEBCrawl, log-file review and booking-API audit; URL scheme agreedAudit
- M2MARFeed built; 180 static course pages rendered from the booking systemFeed live
- M3APRCourse + CourseInstance schema shipped; first 24 rich resultsSchema
- M4MAYTen category hubs written with tutors and publishedDrawers
- M5JUNParameter URLs canonicalised; 3,900 duplicates removed from indexClean index
- M6JULAll 180 courses carry rich results; see-also links across drawers180 / 180
- M7AUGLegacy 404s redirected; guild backlinks reclaimedLinks back
- M8SEPSummer-season pages refreshed with live places-left countsSeason
- M9OCTReview, next-season feed tests and handover to the school’s teamFiled
05Results
+174% organic course bookings, card by card.
Modelled scenario for a fictional business — not a client result. Rankings and traffic are never guaranteed; see our Terms.
Metric 01
0 → 180
Courses with rich results
Metric 02
+139%
Organic sessions
Metric 03
1,240
Long-tail keywords ranking
Top-100 positions, end of month
Ceramics · 22
Choir & music · 24
Drawing & painting · 21
Food & foraging · 15
History & philosophy · 16
Outdoor & hiking · 19
Textiles & weaving · 18
Woodwork · 14
Writing · 20
Yoga & wellbeing · 11
Shelf list: twelve query cards
| Query | Drawer | Before | Month 9 | Stamped |
|---|---|---|---|---|
| choir summer school copenhagen | Choir & music | not indexed | #1 | 18 MAY |
| spoon carving course copenhagen | Woodwork | not indexed | #1 | 29 MAY |
| weaving course denmark one week | Textiles & weaving | not indexed | #1 | 16 JUN |
| raku firing workshop zealand | Ceramics | not indexed | #1 | 03 JUL |
| nordic foraging course | Food & foraging | not indexed | #1 | 06 JUL |
| hiking holiday folk high school | Outdoor & hiking | not indexed | #1 | 24 JUL |
| ceramics week course denmark | Ceramics | not indexed | #2 | 12 JUN |
| watercolour course for adults denmark | Drawing & painting | not indexed | #2 | 27 JUN |
| kayak course week denmark | Outdoor & hiking | not indexed | #2 | 08 JUN |
| philosophy short course denmark | History & philosophy | not indexed | #2 | 11 JUL |
| creative writing week course denmark | Writing | not indexed | #2 | 15 JUL |
| yoga week course folk high school | Yoga & wellbeing | not indexed | #2 | 20 JUL |
New card · your catalogue
Get a plan like this
If your products are courses, rooms, tours or classes trapped inside a booking tool, the Commerce SEO plan gives each one a page, a schema card and a shelf to sit on.