SEO & Page Architecture — Session Notes
February 24, 2026
Change Log
Section titled “Change Log”| Date | Section | Change |
|---|---|---|
| 2026-02-27 | Schema Strategy | Clarification added: JSON-LD schema breadcrumbs and visual HTML breadcrumbs are two independent systems; notes on SEOPress “Custom breadcrumbs” field. Added by Asia’s Claude Code session. |
Current State (as of this session)
Section titled “Current State (as of this session)”The ranking asset
Section titled “The ranking asset”/montreal-study-program/ (Page ID 33521) ranks from last year. This is the primary SEO asset for the Study Group program. All decisions should protect this equity.
Problems identified
Section titled “Problems identified”- All pages are completely flat —
post_parent = 0across the board. No hierarchy exists. - Multiple duplicate Montreal program pages exist at different URLs, splitting link equity.
- Event posts and Pages both exist for the same programs — duplication confuses Google about which is canonical.
/programs/(ID 28338) exists but is underdeveloped — it does no useful SEO work.- “Study Lab Landing” (ID 36638) exists as a draft but was never finished.
- Existing Study Lab event pages (Berlin, London, New York) have no parent hub and are islands.
Target Architecture
Section titled “Target Architecture”Hub page hierarchy (Pages CPT)
Section titled “Hub page hierarchy (Pages CPT)”/programs/ ← Top-level programs hub Update existing page (ID 28338) Links to all format hubs
/programs/montreal-study-group/ ← Montreal Study Group hub Rename + reparent existing ranking page (ID 33521) Evergreen — always shows current/next cohort Links to all past and upcoming cohort events
/programs/study-lab/ ← Study Lab hub Finish draft page (ID 36638) Links to all city lab pages
/lab-berlin/ ← (city-level, flat or nested) /lab-london/ /lab-new-york/Cohort/event pages (Event CPT)
Section titled “Cohort/event pages (Event CPT)”/event/montreal-study-group-spring-2026/ ← Indexed, upcoming template (with booking)/event/montreal-study-group-winter-2026/ ← Indexed, archive template (no booking)/event/study-lab-berlin-2026/ ← IndexedCampaign landing pages (Pages CPT)
Section titled “Campaign landing pages (Pages CPT)”/[campaign-slug]/ ← NOINDEXED Canonical tag → corresponding event post Meta ads point here EN and FR versions as neededKey Decisions
Section titled “Key Decisions”| Decision | Rationale |
|---|---|
| Programs hub pages = Pages CPT | Evergreen, long-term SEO targets, program descriptions |
| Cohort/event pages = Event CPT | Event schema, date-specific search traffic, events archive |
| Campaign pages = Pages CPT, noindexed | Ad-specific, not canonical, French compliance copies live here |
| URL hierarchy via Schema + internal links | URL nesting alone is not sufficient or required |
| Events archive stays live | Google event discovery aggregates from here; do not redirect it |
Why Two Separate Content Types (Event Posts vs. Program Hub Pages)
Section titled “Why Two Separate Content Types (Event Posts vs. Program Hub Pages)”They serve different search intents:
- Programs hub ranks for: “Baseworks Study Group Montreal”, “movement study program Montreal” — generic, evergreen queries
- Event posts rank for: “movement study group Montreal spring 2026”, “upcoming movement events Montreal” — date-specific and event-discovery queries
Do not try to make one serve both purposes.
Campaign Pages & French Compliance
Section titled “Campaign Pages & French Compliance”Quebec law requires French versions of promotional materials for adult continuing education programs. The solution:
- Create EN + FR campaign landing pages per cohort
- Both noindexed (they are ad destinations, not SEO targets)
- Both carry a canonical tag pointing to the corresponding event post
- No need to add French as a full WPML language layer — these are standalone pages
This is why separate landing pages exist alongside event posts — they are not duplicates; they serve different purposes (conversion vs. discoverability).
Schema Strategy
Section titled “Schema Strategy”| Page type | Schema | Notes |
|---|---|---|
Programs hub (/programs/montreal-study-group/) | Course or EducationEvent | Signals educational program |
| Event post (upcoming) | Event | Dates, location, price, registration URL |
| Event post (archive) | Event | Past dates still provide topical authority signals |
| Event post (all) | Custom breadcrumb | Home → Programs → [Hub] → [Cohort name] |
| Campaign landing page | None needed | Noindexed |
Breadcrumb Schema on event posts is how Google understands the hierarchy between /event/... (Event CPT) and /programs/montreal-study-group/ (Page CPT). SEOPress PRO supports custom breadcrumb paths per post — set this on all Montreal Study Group event posts.
Breadcrumb Schema vs. Visual Breadcrumbs — Two Independent Systems
Section titled “Breadcrumb Schema vs. Visual Breadcrumbs — Two Independent Systems”These are completely separate and do not need to match:
- JSON-LD breadcrumb schema (in
<head>, invisible to visitors) — read by Google. Defines the logical hierarchy for search results and structured data. This is the SEO-relevant layer. - Visual HTML breadcrumbs (on-page, visible to visitors) — a UX element only. Appears only if something outputs it: theme natively, SEOPress shortcode
[seopress_breadcrumbs], an Elementor widget, or a Gutenberg block. Google does not read or validate this.
You can have the schema show Home → Programs → Montreal Study Group → Spring 2026 while the visible breadcrumb shows only Montreal Study Group → Spring 2026, omits Home, or doesn’t exist on the page at all. All of these are fine.
About the SEOPress “Custom breadcrumbs” field (visible in the per-post SEO meta box via the front-end admin overlay): this field overrides only the label of the current page — the last item’s display text in the breadcrumb trail. It does not let you define the full path. To set a custom full hierarchy (so the breadcrumb correctly traverses Programs → Hub → Event even though the event post isn’t nested there in WordPress), use the SEOPress PRO breadcrumb parent/path settings in the post’s SEO meta box.
Asia’s note: we need to think about different breadcrumb hierarchies for different types of events that don’t all have hub pages.
Redirect Strategy
Section titled “Redirect Strategy”Core rule: slug change + parent assignment in ONE save
Section titled “Core rule: slug change + parent assignment in ONE save”If done in two separate saves, WordPress creates a redirect chain:
/montreal-study-program/ →301→ /montreal-study-group/ →301→ /programs/montreal-study-group/A chain loses equity at each hop. Do both changes simultaneously in a single save.
Target redirect (single hop)
Section titled “Target redirect (single hop)”/montreal-study-program/ →301→ /programs/montreal-study-group/Verify immediately in SEOPress → Redirections that it is a single direct 301, not a chain.
Duplicate pages to clean up (all redirect directly to new canonical)
Section titled “Duplicate pages to clean up (all redirect directly to new canonical)”| Old URL | Redirect to |
|---|---|
/smart-movement-mtl-2025/ | /programs/montreal-study-group/ |
/smart-movement-study-program-mtl-2025/ | /programs/montreal-study-group/ |
/smart-movement-study-program-2026/ | /programs/montreal-study-group/ |
/smsg-2026/ | /programs/montreal-study-group/ |
Each redirect must go directly to the final destination — not to /montreal-study-program/ (which is itself being redirected).
Elementor Templates
Section titled “Elementor Templates”Two templates in use for event posts:
- Upcoming template — includes booking interface
- Archive template — no booking interface
When a cohort ends: switch event post to archive template. Keep the event post indexed — past dated events with schema contribute to topical authority for the program hub.
Existing Duplicate Event Posts (Event CPT + Page CPT for same program)
Section titled “Existing Duplicate Event Posts (Event CPT + Page CPT for same program)”Some programs currently have both a Page and an Event post. Fix:
- Set a canonical tag on the event post pointing to the corresponding Page
- OR 301 the event post to the Page (if the event post has no independent ranking)
Do not leave both live without a canonical — Google sees duplicate content.
To-Do List
Section titled “To-Do List”Immediate — before Spring 2026 campaign launches
Section titled “Immediate — before Spring 2026 campaign launches”See also: Content Architecture — Spring 2026 Launch for Practice Sessions architecture decisions and the full launch sequence.
- Rename
/practice-sessions/→/montreal-practice-sessions/, then verify 301 in SEOPress is a single-hop (not a chain). Publish the page. - Update content of
/montreal-study-program/to function as a hub page:- Prominent section for current/upcoming cohort (Spring 2026, April 4–May 16)
- Brief program overview (evergreen)
- Links to past cohort event posts
- Finalize Spring 2026 pricing and enrollment cap (currently TBD in Obsidian) — required before any public pages go live
- Create Spring 2026 event post at
/event/montreal-study-group-spring-2026/:- Event schema: dates April 4–May 16, 2026; location Proto Studio Montreal; price (once set)
- Upcoming Elementor template (with booking)
- Internal link back to programs hub
- Create Spring 2026 campaign landing page(s):
- EN version — noindexed, canonical → event post
- FR version — noindexed, canonical → event post (Quebec compliance)
- Meta ads point to these pages
Short-term — after campaign launches, before URL restructuring
Section titled “Short-term — after campaign launches, before URL restructuring”- Finish and publish “Study Lab Landing” draft page (ID 36636):
- Link all existing Study Lab event posts to it (Berlin, London, New York)
- Add internal link from
/programs/page
- Update
/programs/page to properly link down to:- Montreal Study Group hub
- Study Lab hub
- (Other program types as they develop)
Medium-term — URL restructuring (allow 5–6 weeks before major campaign for reindexing)
Section titled “Medium-term — URL restructuring (allow 5–6 weeks before major campaign for reindexing)”- Change slug + parent in ONE save:
- Slug:
montreal-study-program→montreal-study-group - Parent: set to “Educational Programs” (ID 28338, slug
programs) - Result:
/programs/montreal-study-group/
- Slug:
- Immediately verify in SEOPress → Redirections:
- Confirm:
/montreal-study-program/→301→/programs/montreal-study-group/(single hop) - If not auto-generated, create manually
- Confirm:
- Clean up duplicate Montreal pages (create 301s, all going directly to
/programs/montreal-study-group/):/smart-movement-mtl-2025//smart-movement-study-program-mtl-2025//smart-movement-study-program-2026//smsg-2026/
- Submit updated sitemap in Google Search Console
- Monitor Search Console for crawl errors over the following 1–2 weeks
- Add breadcrumb Schema to all Montreal Study Group event posts via SEOPress:
- Path: Home → Programs → Montreal Study Group → [cohort name]
- Fix event post/page duplication — set canonical tags or 301s where both exist for same program
- Update all internal links on site pointing to old Montreal program URL to point to new URL
Ongoing — for each new cohort going forward
Section titled “Ongoing — for each new cohort going forward”- Create event post (indexed) — Event schema, upcoming Elementor template
- Create campaign landing page(s) (noindexed, canonical → event post, EN + FR if Quebec)
- Link from programs hub → new event post
- When cohort ends: switch event post to archive Elementor template
- When campaign is over: 301 campaign landing page → event post
Deferred — when Study Lab city pages are ready
Section titled “Deferred — when Study Lab city pages are ready”- Create city-level hub pages for Berlin, London, New York
- Add breadcrumb Schema to all Study Lab event posts pointing through the Study Lab hub
- Evaluate whether to nest city pages under
/programs/study-lab/or keep flat with schema hierarchy