Audit-Fixes 2026-06-09: SEO, Agent-Readiness, Security & Dependencies #4

Merged
glow merged 5 commits from feature/audit-fixes-2026-06-09 into main 2026-06-09 21:31:33 +00:00
glow commented 2026-06-09 20:51:28 +00:00 (Migrated from gitlab.fluffyplace.de)

Setzt alle 16 Findings aus dem kombinierten Plan v2 (Issue #1, Audit vom 09.06.2026) um.

🔴 Critical

  • Statisches OG-Fallback in index.html: og:title/description/url/image + Twitter-Tags für nicht-JS-Crawler
  • vitest-CVE behoben: vitest 1→4, vite 5→8, @vitest/coverage-v8 aktualisiert

🟠 High

  • llms.txt nach llmstxt.org-Spec angelegt
  • AI-Crawler-Regeln (GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, Bytespider) in robots.txt
  • JSON-LD: FAQPage-Schema (HomePage, aus data/faq.ts), Service-ItemList (ServicesPage), Person-Schema (AboutPage)
  • twitter:card auf summary_large_image (PageMeta)
  • PrimeIcons selbst gehostet: npm-Paket statt unpkg-CDN (SRI-Finding), unpkg aus CSP entfernt
  • typescript-eslint 6→8 in frontend + backend (minimatch ReDoS)

🟡 Medium

  • CSP: form-action + base-uri auf 'self'
  • Permissions-Policy-Header (camera/microphone/geolocation deaktiviert) — als Middleware, da Helmet 7 den Header nicht nativ unterstützt
  • Deskriptive Alt-Texte (Hero-Bild, Logos)
  • /wissen auf noindex bis echte Artikel da sind (+ aus sitemap.xml entfernt)
  • <address>-Markup mit tel:/mailto:-Links in Footer und Impressum
  • apple-touch-icon + <lastmod> in sitemap.xml

🟢 Low

  • .gitignore: *.pem, *.key, *.crt, credentials*

Aus der Review-Loop (3 Finder-Agents + Verifikation)

  • JSON-LD-Pricing korrigiert: Offer.price mit "ab 60 €" wäre invalide gewesen → PriceSpecification.minPrice (numerisch), Leistungen "nach Aufwand" ohne Offer
  • Geschäftsdaten zentralisiert in data/business.ts (war 3× in JSON-LD-Blöcken dupliziert)
  • Docker/CI auf node:22-alpine: Vite 8 verlangt ^20.19 || >=22.12, Node 20 ist seit April 2026 EOL

Verifikation

  • npm audit: 0 Schwachstellen in frontend + backend (vorher 14 + 8)
  • Tests: 14/14 frontend (vitest 4), 8/8 backend
  • Lint: sauber in beiden Packages
  • Production-Builds: frontend (vite 8) + backend (tsc) erfolgreich, PrimeIcons-Fonts werden gebundelt

Closes #1

🤖 Generated with Claude Code

Setzt alle 16 Findings aus dem kombinierten Plan v2 (Issue #1, Audit vom 09.06.2026) um. ## 🔴 Critical - **Statisches OG-Fallback** in `index.html`: `og:title/description/url/image` + Twitter-Tags für nicht-JS-Crawler - **vitest-CVE behoben**: vitest 1→4, vite 5→8, `@vitest/coverage-v8` aktualisiert ## 🟠 High - **`llms.txt`** nach llmstxt.org-Spec angelegt - **AI-Crawler-Regeln** (GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, Bytespider) in `robots.txt` - **JSON-LD**: `FAQPage`-Schema (HomePage, aus `data/faq.ts`), `Service`-ItemList (ServicesPage), `Person`-Schema (AboutPage) - **`twitter:card`** auf `summary_large_image` (PageMeta) - **PrimeIcons selbst gehostet**: npm-Paket statt unpkg-CDN (SRI-Finding), unpkg aus CSP entfernt - **typescript-eslint 6→8** in frontend + backend (minimatch ReDoS) ## 🟡 Medium - CSP: `form-action` + `base-uri` auf `'self'` - `Permissions-Policy`-Header (camera/microphone/geolocation deaktiviert) — als Middleware, da Helmet 7 den Header nicht nativ unterstützt - Deskriptive Alt-Texte (Hero-Bild, Logos) - `/wissen` auf `noindex` bis echte Artikel da sind (+ aus sitemap.xml entfernt) - `<address>`-Markup mit `tel:`/`mailto:`-Links in Footer und Impressum - `apple-touch-icon` + `<lastmod>` in sitemap.xml ## 🟢 Low - `.gitignore`: `*.pem`, `*.key`, `*.crt`, `credentials*` ## Aus der Review-Loop (3 Finder-Agents + Verifikation) - **JSON-LD-Pricing korrigiert**: `Offer.price` mit "ab 60 €" wäre invalide gewesen → `PriceSpecification.minPrice` (numerisch), Leistungen "nach Aufwand" ohne Offer - **Geschäftsdaten zentralisiert** in `data/business.ts` (war 3× in JSON-LD-Blöcken dupliziert) - **Docker/CI auf `node:22-alpine`**: Vite 8 verlangt `^20.19 || >=22.12`, Node 20 ist seit April 2026 EOL ## Verifikation - ✅ `npm audit`: **0 Schwachstellen** in frontend + backend (vorher 14 + 8) - ✅ Tests: 14/14 frontend (vitest 4), 8/8 backend - ✅ Lint: sauber in beiden Packages - ✅ Production-Builds: frontend (vite 8) + backend (tsc) erfolgreich, PrimeIcons-Fonts werden gebundelt Closes #1 🤖 Generated with [Claude Code](https://claude.com/claude-code)
glow commented 2026-06-09 21:29:27 +00:00 (Migrated from gitlab.fluffyplace.de)

added 1 commit

  • fc37179a - chore(release): Version 1.1.0

Compare with previous version

added 1 commit <ul><li>fc37179a - chore(release): Version 1.1.0</li></ul> [Compare with previous version](/techsolutions/landingpage/-/merge_requests/2/diffs?diff_id=38&start_sha=1b80bff5dcc632d37bc006472f002f3d47ca5324)
glow commented 2026-06-09 21:31:23 +00:00 (Migrated from gitlab.fluffyplace.de)

approved this merge request

approved this merge request
glow commented 2026-06-09 21:31:33 +00:00 (Migrated from gitlab.fluffyplace.de)

mentioned in commit 9a3f3a7e06

mentioned in commit 9a3f3a7e063827e0a733df3ed16f9a9b2d01e814
glow (Migrated from gitlab.fluffyplace.de) merged commit 9a3f3a7e06 into main 2026-06-09 21:31:33 +00:00
glow (Migrated from gitlab.fluffyplace.de) approved these changes 2026-07-26 18:06:02 +00:00
Sign in to join this conversation.
No reviewers
No labels
design
frontend
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
budmin/landingpage!4
No description provided.