Skip to content

Improve SEO, GEO, and AEO for education.ditectrev.com - #98

Merged
danieldanielecki merged 1 commit into
mainfrom
cursor/seo-llm-geo-54e0
Sep 19, 2026
Merged

danieldanielecki merged 1 commit into
mainfrom
cursor/seo-llm-geo-54e0

Conversation

@danieldanielecki

Copy link
Copy Markdown
Member

Matches the discoverability work on ditectrev.com#19 and Shop#9. Copy and schema come from existing platform, pricing, and company facts only—no invented ratings, reviews, or keyword stuffing.

Applied

  • /llms.txt and /llms-full.txt. Spec-style overview plus a citation fact sheet and Q&A from this platform’s README, exam catalog, pricing FAQ, and the same Ditectrev identity used on ditectrev.com.
  • AI crawler policy. robots.ts keeps Allow: /, names GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot/User/SearchBot, PerplexityBot/User, Google-Extended, Google-CloudVertexBot, CCBot, Applebot/Applebot-Extended, Bingbot, and DuckAssistBot, and disallows parameterized /practice?*, /exam?*, and /modes?* the same way the shop disallows /search?*.
  • Sitemap. Replaced the stale 2023 static XML with sitemap.ts: /, /pricing, llms.txt, and llms-full.txt. No lastmod dates.
  • JSON-LD. Organization (legal name, tax ID, founder, address, sameAs) and WebSite on every page; homepage ItemList of visible exams; pricing FAQPage and OfferCatalog from the visible plans and FAQs; BreadcrumbList on those pages.
  • Metadata / social. Unique titles and descriptions, canonicals, Open Graph (en_US, 512×512 PNG), Twitter summary, snippet-friendly robots (max-snippet:-1,max-image-preview:large,max-video-preview:-1), rel=describedby and rel=alternate type=text/markdown for llms.txt. Emojis removed from titles, matching ditectrev.com.
  • noindex on /practice, /exam, /modes, /profile, /auth/callback, and 404.
  • Crawlable header links. Logo and Pricing are <Link>s instead of router.push buttons.
  • Heading hierarchy. Homepage and modes exam titles are real <h1>s. ThemeProvider now SSR-renders children so those headings and JSON-LD are in the HTML.

Skipped (does not apply here)

  • Shop Product / merchant / shipping / return schema — this site is not a storefront.
  • WebSite SearchAction — homepage search is client-side only (same skip as ditectrev.com).
  • Consulting Service, HowTo methodology, glossary DefinedTermSet, and a dedicated /faq route — those pages do not exist here. FAQ JSON-LD is only on /pricing, where the questions are visible.
  • HTML sitemap page, /health disallow, 1200×630 OG banner, hreflang, Review/AggregateRating, SpeakableSpecification, .well-known/llms.txt, WebMCP, and per-route .md mirrors.

Test plan

  • npx jest lib/__tests__/seo.test.ts (13 passed)
  • npx playwright test playwright/seo.spec.ts --project=chromium (6 passed)
  • npm run build succeeds
  • Live local checks: /robots.txt, /sitemap.xml, /llms.txt, /llms-full.txt, home/pricing JSON-LD and canonicals, 404 noindex
Open in Web Open in Cursor 

Align education.ditectrev.com with ditectrev.com and shop.ditectrev.com:
structured data, llms.txt, AI-crawler robots, sitemaps, and per-page metadata.
@github-actions

Copy link
Copy Markdown

🚀 Vercel Preview Deployment Ready!

Your stage site is ready! Visit it here: https://practice-exams-platform-jqa1al1ts-ditectrevs-projects.vercel.app


This comment was automatically generated by GitHub Actions

@danieldanielecki
danieldanielecki marked this pull request as ready for review September 19, 2026 06:56

@danieldanielecki danieldanielecki left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks ok, just worried if the replaced buttons won't affect too much ui, but Cursor is saying those buttons became links with the same classes, text, and padding, so let's try!

@danieldanielecki
danieldanielecki merged commit 7737b28 into main Sep 19, 2026
4 checks passed

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: AI crawler rules skip path disallows
    • Added the disallow array ['/practice?', '/exam?', '/modes?*'] to AI crawler rules so they match the catchall user-agent restrictions.

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit 5bbd3bc. Configure here.

Comment thread app/robots.ts
...AI_CRAWLERS.map((userAgent) => ({
userAgent,
allow: "/",
})),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI crawler rules skip path disallows

Medium Severity

Named AI_CRAWLERS blocks emit only allow: "/". In robots.txt, a matching user-agent group replaces the * group, so GPTBot, Bingbot, Applebot, and the other listed agents never receive the Disallow entries for parameterized /practice, /exam, and /modes URLs.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 5bbd3bc. Configure here.

@danieldanielecki danieldanielecki mentioned this pull request Sep 19, 2026
2 tasks done

This branch had an error being deployed

1 failed and 1 active deployments
Production — 5bbd3bc8 Deployed Sep 19, 2026 by danieldanielecki via Deploy to Vercel #146
Staging — 5bbd3bc8 Deployed Sep 18, 2026 by danieldanielecki via Deploy to Vercel #145
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants