TL;DR

Ahrefs MCP still returns Insufficient plan on all endpoints. Manual audit on live HTML and source code.

Key action today: fixed og:title / twitter:title mismatch and removed the redundant inline canonical script from frontend/public/index.html. Changes are on disk, ready to commit once the .git/index.lock files are cleared.

The deploy gap (May 3+4 SEO fixes not live) is now day 3. Live site still serves the old build.

Ahrefs API status

All endpoints: Insufficient plan (unchanged since Apr 28). Recommend upgrading the plan or switching to Claude in Chrome to screenshot Ahrefs dashboards.

Live site: slateup.ai

Check Status
Title Old build: Slate — AI-powered Interactive Classroom (em dash)
og:title Same old value
hreflang Missing in production (fix in source, not deployed)
Static canonical Missing in live head (fix not deployed)
meta keywords Still present (fix not deployed)
robots.txt Allow: / (correct)
Sitemap 110 URLs, all lastmod 2026-05-02 (per-post lastmod fix not deployed)

Live site: app.slateup.ai

Check Status
robots meta (homepage) No noindex (layout.tsx change uncommitted)
robots.txt 404 (file exists locally, not committed)
sitemap.xml 404 (fine for auth-only app)

Changes made today (disk, pending commit)

frontend/public/index.html

og:title + twitter:title: Changed from Slate - AI-powered Interactive Classroom to Slate, AI-powered Interactive Classroom to match inject-page-meta.mjs. Consistent title reduces mixed signals to crawlers.

Inline canonical script removed: The runtime JS that appended a second <link rel="canonical"> was creating two canonical tags on every page alongside the static tag already in the head. Removed it. The static tag + inject-page-meta.mjs build-time rewrite covers all routes.

Title tag: Updated to Slate, AI-powered Interactive Classroom (comma, no em dash).

Blocking issue: stale .git/index.lock in both repos

All git operations from the scheduled task environment are blocked. None of the accumulated fixes can be committed or pushed until these are manually removed:

rm slate-landing/.git/index.lock
rm Slate-app/Slate/.git/index.lock

Then in slate-landing, rebase and push:

git fetch origin
git pull --rebase origin main
yarn build
git push origin main