Skip to content
Blazej Mrozinski
v0.15.1 May 12, 2026

Ahrefs site audit cleanup

404 on /cdn-cgi/l/email-protection — Cloudflare's "Email Address Obfuscation" Scrape Shield feature is rewriting ssh user@host shell examples in code blocks on /glossary/cron/ and /blog/wp-infra-01-why-i-ditched-managed-hosting/ into broken [email protected] links.

4 added 4 fixed

Added

  • **404 on `/cdn-cgi/l/email-protection`** — Cloudflare's "Email Address Obfuscation" Scrape Shield feature is rewriting `ssh user@host` shell examples in code blocks on `/glossary/cron/` and `/blog/wp-infra-01-why-i-ditched-managed-hosting/` into broken `[email protected]` links. **Fix requires CF dashboard:** Cloudflare → `blazejmrozinski.com` zone → Scrape Shield → Email Address Obfuscation → Off. Also restores correct rendering of SSH examples currently displayed as `[email protected]` gibberish to bots.
  • **41 noindex/nofollow pages** = `/search/` + `/changelog/*`. Intentional since v0.11.4. Not a regression.
  • **3 HTTP→HTTPS redirects** = apex/non-www handled correctly by Cloudflare Pages. Not actionable.
  • **1 slow page** = `/changelog/v0.13.0/`, which is noindex anyway. Ignored.

Fixed

  • **Trailing-slash discipline in markdown bodies.** Added trailing slashes to 80 internal markdown links across 31 files (blog posts, glossary entries, company/project landing pages, static pages). These hand-typed inline links — to `/work/<slug>`, `/projects/<slug>`, `/blog/<slug>`, `/glossary/<slug>` — bypassed Astro's `trailingSlash: 'always'` policy and triggered Cloudflare Pages 308 redirects. Resolves the audit's "Page has links to redirect" (32 pages) and "3XX redirect" (24 pages) issues at once.
  • **Schema.org validation on `/publications/`.** `ScholarlyArticle` JSON-LD was emitting `volumeNumber` and `issueNumber` at the article root — invalid per schema.org. Refactored `buildScholarlyArticle()` in `publications.astro` to nest them inside `isPartOf` → `PublicationIssue` → `PublicationVolume` → `Periodical`. Fixes the audit's "Structured data has schema.org validation error" on all 14 affected URLs (`/publications/` + 13 `?year=` variants + 2 series pages share the same JSON-LD).
  • **Title length sitewide.** `SEO.astro` now drops the ` — Blazej Mrozinski` brand suffix when adding it would push the title past 60 chars; short page titles still get branded. On top of that, rewrote 53 over-long titles in blog/glossary frontmatter (`title:` and `seoTitle:`) to ≤60 chars while preserving keyword intent. Resolves all 87 "Title too long" Warning + Notice issues.
  • **Meta description length.** Trimmed 55 over-long descriptions to ≤160 chars (sentence-boundary script + 21 hand-tuned rewrites) and padded 6 short descriptions to ≥110 chars. Also rewrote 6 inline `<Base description=…>` strings in `index.astro`, `publications.astro`, `cv.astro`, `projects/index.astro`, `photography/index.astro`, `blog/index.astro`; padded 11 topic descriptions in `src/data/topics.yml`, 1 series description in `src/data/series.yml`, and the photography sample album. Resolves all 112 "Meta description too long/short" Warning + Notice issues.