Appearance
Spec: SEO Monitoring
Meta: this document is created by developers for developers and for LLMs, so anyone can feed this doc to LLM and have a perfect context to get answers to almost any questions related to SEO monitoring after the v5/Rebirth release.
- Date: March 2026
- Status: Draft
- Decision makers: Mads (CEO), Jens (Dev), Alies (Dev)
_
High-level overview
The v5/Rebirth release (2026-03-02) introduced several changes that can impact SEO performance:
- Domain change:
www.interaction-design.org→ixdf.org - URL changes: restructured URLs across the platform
- JSON-LD structured data: added/updated Schema.org markup
- Web Vitals changes: frontend changes affecting Core Web Vitals (LCP, CLS, INP)
This spec defines what to monitor, where to monitor it, and what action to take when metrics degrade.
Slack context: SEO structured data thread (Mads, Feb 2026)
App Architecture (SEO-related)
Seo Module (app/Modules/Seo/)
The Seo module handles SEO metadata, URL redirects, OG images, and sitemap generation.
Key models:
SeoMeta— polymorphic SEO title/description/image for Course, Masterclass, Tag, TemplateBundle, Article (table:seo__seo_meta)OpenGraphImage— polymorphic OG image storage for Article, Course, LocalGroup, Masterclass, Meetup, Member, Tag (table:seo__open_graph_images)UrlRewrite— legacy path → redirect path mappings (table:seo__url_rewrites), manageable via Nova
URL redirect pipeline (404 → app/Exceptions/Handler.php → findRedirection()):
On 404, the app runs a pipeline of handlers to find a redirect:
ConvertToLowerCase— normalize to lowercaseRemoveUnicodeCharacters— strip invalid Unicode (crawler artifacts)TrimRequestedUrl— remove legacy patterns (printerfriendly/,.ics,/trackback)DeprecatedCourseRedirectHandler— hardcoded old course slug mappingsHandleUsingEloquentRedirections— database lookup viaUrlRewritemodelPublicProfileRedirectHandler— slug → member profile routeConferencesRedirectHandler—references/conferences→literature.conferenceSeries.indexAuthorsRedirectHandler—references/authors→literature.authors.index
All redirects return 301 Permanent with query params forwarded.
Sitemap generation (config/ixdf_sitemap.php):
11 sitemap plugins at /sitemap/{key}.xml: pages, courses, masterclasses, articles, books, book-chapters, topic-definitions, local-groups, authors, members, job-postings.
Health check: CheckDomainRedirections artisan command validates that old domains (interactiondesign.org, www.interactiondesign.org, interaction-design.org, ixdf.io) all redirect to https://ixdf.org/.
JSON-LD Structured Data (Schema.org)
Implemented as Blade partials (resources/views/pages/*__schemaMarkup.blade.php):
| Schema Type | Page | Blade Partial |
|---|---|---|
Course + CourseInstance + Schedule | Course detail | course/show__schemaMarkup |
BlogPosting + WebPage + Person | Article detail | publication/articles/show__schemaMarkup |
BreadcrumbList | All pages with breadcrumbs | breadcrumbs__schemaMarkup |
Organization + WebSite | Homepage | home/__home/schemaMarkup |
FAQPage | FAQ page | faq/index__schemaMarkup |
JobPosting | Job board detail | jobPostings/show__schemaMarkup |
Event | Masterclass detail | masterclasses/show__/schemaMarkup |
Event | Meetup detail | meetups/show__/schemaMarkup |
Mads' directive (Feb 2026): Schema markup is "mission-critical" for the rebirth launch. Use the Schema Builder Chrome extension to validate and discover missing fields. Reference competitor implementations (e.g., Udemy course pages) for best practices. Key gaps identified by Mads:
- Course schema was missing
name,description,providerfields - Should include
EducationalAudienceandEducationalOrganizationtypes - IxDF has a Wikipedia page — structured data should reference it (like Udemy does via
sameAs)
Monitoring Areas
1. Domain Migration (interaction-design.org → ixdf.org)
What can go wrong:
- Google not indexing
ixdf.orgpages while de-indexinginteraction-design.org - Loss of backlink equity during the transition
- 301 redirects not being followed or misconfigured
- Old domain pages still ranking instead of new domain equivalents
- Canonical tag mismatches between old and new domains
What to monitor:
| Metric | Tool | Target | Action if Degraded |
|---|---|---|---|
Indexed pages on ixdf.org | Google Search Console (GSC) | Steady increase over 4-8 weeks | Investigate crawl errors |
Indexed pages on interaction-design.org | GSC | Steady decrease | Verify 301 redirects |
| Crawl errors (404, 5xx) | GSC | <1% of crawled URLs | Fix broken redirects |
| 301 redirect chain length | Semrush / manual spot checks | Max 1 hop | Consolidate redirect chains |
| Organic traffic (total) | Google Analytics 4 (GA4) | No drop >10% week-over-week | Investigate top losing pages |
| Organic clicks + impressions | GSC | Compare old+new domain combined | Check redirect coverage |
Key actions:
- Verify
ixdf.orgsitemap is submitted in GSC - Confirm
interaction-design.org→ixdf.org301 redirects are in place for all indexed URLs - Use GSC "Change of Address" tool if not already done
- Monitor both properties in GSC during transition (keep the old property active)
2. URL Changes
What can go wrong:
- Old URLs returning 404 instead of redirecting
- Internal links still point to old URLs (soft 404 / redirect chains)
- URL parameters or query strings aren’t forwarded correctly
- Sitemap containing old URLs
What to monitor:
| Metric | Tool | Target | Action if Degraded |
|---|---|---|---|
| 404 errors | GSC Coverage report | No new 404s for previously indexed URLs | Add missing redirects |
| Redirect coverage | nginx logs / app logs | All old URLs return 301 | Fix missing redirect rules |
| Internal links to old URLs | Semrush Site Audit | 0 internal links to old URLs | Update Blade templates / content |
| Sitemap validity | GSC Sitemaps report | All URLs return 200 | Regenerate sitemap |
3. JSON-LD Structured Data
What can go wrong:
- Invalid or incomplete Schema.org markup
- Rich results disappearing from SERPs
- Structured data warnings/errors in GSC
What to monitor:
| Metric | Tool | Target | Action if Degraded |
|---|---|---|---|
| Structured data errors | GSC Enhancements report | 0 errors | Fix invalid markup |
| Structured data warnings | GSC Enhancements report | Decreasing trend | Address warnings |
| Rich result impressions | GSC Performance (Search Appearance) | Stable or increasing | Verify markup on affected pages |
| Schema validation | Schema.org Validator / Rich Results Test | All pages pass | Fix markup |
Key structured data types to validate (all implemented as Blade __schemaMarkup partials):
Course+CourseInstance+Schedule— course detail pages (check:name,description,provider,EducationalAudience)BlogPosting+Person— article/literature pagesOrganization+WebSite— homepage (check:sameAsincludes Wikipedia page)BreadcrumbList— all pages with breadcrumbsFAQPage— FAQ pageJobPosting— job board detail pagesEvent— masterclass and meetup detail pages
Validation approach (per Mads): use Schema Builder Chrome extension on each page type and compare against competitors (e.g., Udemy course pages) to identify missing fields.
4. Core Web Vitals
What can go wrong:
- LCP regression from new layout/assets
- CLS shifts from dynamically loaded content or new components
- INP degradation from new JavaScript or heavier interactivity
What to monitor:
| Metric | Tool | Target | Action if Degraded |
|---|---|---|---|
| LCP (Largest Contentful Paint) | GSC CWV report, GTmetrix, Catchpoint | <2.5s (Good) | Optimize critical rendering path |
| CLS (Cumulative Layout Shift) | GSC CWV report, GTmetrix, Catchpoint | <0.1 (Good) | Add explicit dimensions, reduce layout shifts |
| INP (Interaction to Next Paint) | GSC CWV report, GTmetrix, Catchpoint | <200ms (Good) | Profile and optimize event handlers |
| Pages with "Poor" CWV | GSC Core Web Vitals report | 0 pages in "Poor" | Prioritize worst offenders |
Key pages to check (based on sitemap plugins and structured data):
- Homepage (
/) - Course pages (
/courses/*) - Article/literature pages (
/literature/*) - Topic definition pages (
/topics/*) - Masterclass pages (
/masterclasses/*) - Job board pages (
/career/*) - Local group pages (
/local-groups/*) - Member profiles
Domain Migration Monitoring Timeline
Pre-launch Baseline (Week -1 to Day 0)
| Action | Tool |
|---|---|
Snapshot indexed page count for interaction-design.org | GSC |
| Snapshot keyword rankings for top 50 pages | Semrush |
| Snapshot CWV scores for key page templates | GTmetrix |
Verify ixdf.org GSC property exists and sitemap is submitted | GSC |
Run CheckDomainRedirections artisan command | App CLI |
| Record rich results count by type (Course, Article, FAQ, etc.) | GSC Search Appearance |
Days 1-14 (Critical Period)
| What to monitor | Tool | Frequency | Red flag |
|---|---|---|---|
| Crawl stats (pages crawled/day) on both domains | GSC | Daily | Googlebot stops crawling ixdf.org |
Index coverage on ixdf.org | GSC | Daily | Not growing |
Index coverage on interaction-design.org | GSC | Daily | Not shrinking (redirects not working) |
| 404 errors | GSC | Daily | Spike >50 new 404s |
| Organic clicks + impressions (both domains combined) | GSC | Daily | Drop >15% vs pre-migration baseline |
| Keyword rankings for top 50 pages | Semrush | Daily | Position drops >5 for high-traffic terms |
| Server response codes for old URLs | nginx logs / New Relic | Daily | Any old URL returning 200 instead of 301 |
Googlebot crawl of ixdf.org URLs | nginx log analysis (filter Googlebot UA) | Daily | Googlebot not visiting new URLs |
Weeks 3-8 (Stabilization)
| What to monitor | Tool | Frequency | Red flag |
|---|---|---|---|
| Organic traffic trend | Semrush + GSC | Weekly | Not recovering to pre-migration levels |
Backlink profile shift to ixdf.org | Semrush | Weekly | Backlinks not transferring to new domain |
| Rich results count | GSC Search Appearance | Weekly | Fewer rich results than baseline |
| Structured data errors | GSC Enhancements | Weekly | New errors appearing |
| CWV assessment | GSC CWV report | Weekly | Pages moving from "Good" to "Needs Improvement" |
| Sitemap submitted vs indexed ratio | GSC Sitemaps | Weekly | Ratio declining |
Month 3+ (Long-term)
| What to monitor | Tool | Frequency |
|---|---|---|
interaction-design.org index count approaching zero | GSC | Monthly |
| Keyword ranking parity vs pre-migration baseline | Semrush | Monthly |
Backlink profile fully on ixdf.org | Semrush | Monthly |
| CWV stable across all page templates | GTmetrix + Catchpoint | Monthly |
Regular SEO Health Monitoring (Ongoing)
| Frequency | Action | Tool |
|---|---|---|
| Always-on | Server response times, error rate alerting | New Relic |
| Always-on | JS error alerting (affects INP, CLS) | BugSnag |
| Daily | Crawl errors, 404 spikes, indexing anomalies | GSC |
| Weekly | Keyword ranking changes, organic traffic trends | Semrush |
| Weekly | CWV lab scores for key page templates | GTmetrix |
| Weekly | Structured data errors/warnings | GSC Enhancements |
| Monthly | Full site audit (broken links, redirect chains, internal linking) | Semrush Site Audit |
| Monthly | CWV field data trends, page experience report | GSC CWV report |
| Monthly | Backlink profile health | Semrush |
| Quarterly | Competitor structured data comparison (Udemy, Coursera) | Schema Builder extension |
Tools
| Tool | Regular SEO | Domain Migration | What it covers |
|---|---|---|---|
| Google Search Console (GSC) | Yes | Yes | Indexing, crawl errors, CWV field data, structured data, search performance. Properties: ixdf.org + interaction-design.org |
| Semrush | Yes | Yes | Keyword rankings, organic traffic trends, backlink audit, site audit, competitor analysis. Set up alerts for ranking drops >5 positions on top 20 keywords |
| GTmetrix | Yes | — | Lab CWV scores, performance waterfall, historical page speed trends |
| Catchpoint WebPageTest | Yes | Yes | Synthetic CWV monitoring from multiple geos (use US-East to match infra), filmstrip for visual regressions, TTFB |
| New Relic | Yes | Yes | Server response times, error rates, throughput — ties to TTFB and crawl budget |
| BugSnag | Yes | — | JS errors that break interactivity (affects INP, CLS) |
| nginx log analysis | — | Yes | Filter for Googlebot UA to see what Google actually crawls. Critical during migration — GSC data has 2-3 day delay, logs are real-time |
Current Gaps
- Googlebot log analysis — parse nginx access logs filtering for Googlebot UA. Count requests to
ixdf.orgvs redirect responses. This is the only real-time view of how Google sees the migration (GSC data lags 2-3 days). Can be a simple daily cron job. - Semrush ranking alerts — set up automated alerts for ranking drops >5 positions on top 20 keywords. GSC doesn't alert, so this is the early warning system.
- Catchpoint synthetic availability checks — set up external synthetic checks for key landing pages from US-East (same region as infra). If Googlebot hits 5xx during a crawl, it can de-index pages.
Open Questions
- Has the GSC "Change of Address" tool been used for
interaction-design.org→ixdf.org? If not, do it ASAP. - Do we have a full redirect map? A mapping of all indexed
interaction-design.orgURLs to theirixdf.orgequivalents. - Which pages had rich results before v5? Baseline needed to detect rich result loss.
- CWV baseline before v5? Need pre-launch CWV data to detect regressions.
- Googlebot log analysis setup — do we have an easy way to filter nginx logs by Googlebot UA, or do we need to build this?
- Semrush plan — does our plan include Log File Analyzer and automated ranking alerts?