SEO & AEO: everything from the PDF review (robots, sitemap, 404, meta/OG, JSON-LD, Swedish text, /tjanster, EXIF clean, alt texts, Admin@, Örebro) #1

Merged
imagesbyolofsson merged 9 commits from seo-aeo-2026-10-27 into main 2026-10-27 23:45:32 +00:00
Owner

All items from "SEO & AEO-genomgång imagesbyolofsson.se.pdf" that live in the site repo.

  • robots.txt (all bots welcome), sitemap-index.xml, llms.txt, real 404 page
  • Unique Swedish title, description, canonical, OG and Twitter on every page; JSON-LD (WebSite, Person, ProfessionalService, FAQ)
  • Swedish text, new /tjanster with steps and FAQ
  • No GPS or serial numbers in published images; responsive images; crawlable gallery
  • 147 real alt texts (Cleura gemma-4 vision, checked by eye)
  • Contact e-mail Admin@imagesbyolofsson.se; Örebro / Örebro län and the Facebook page in structured data
  • deploy/caddy-site.snippet + nginx.conf: www -> apex 301, old URLs 301, trailing slash 301, cache and security headers

Verified on staging and on the prepared live copy on Cleura (build 7207e35, exif gps=0 serial=0). Going live = Cloudflare A record imagesbyolofsson.se -> 185.62.207.98.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7

All items from "SEO & AEO-genomgång imagesbyolofsson.se.pdf" that live in the site repo. - robots.txt (all bots welcome), sitemap-index.xml, llms.txt, real 404 page - Unique Swedish title, description, canonical, OG and Twitter on every page; JSON-LD (WebSite, Person, ProfessionalService, FAQ) - Swedish text, new /tjanster with steps and FAQ - No GPS or serial numbers in published images; responsive images; crawlable gallery - 147 real alt texts (Cleura gemma-4 vision, checked by eye) - Contact e-mail Admin@imagesbyolofsson.se; Örebro / Örebro län and the Facebook page in structured data - deploy/caddy-site.snippet + nginx.conf: www -> apex 301, old URLs 301, trailing slash 301, cache and security headers Verified on staging and on the prepared live copy on Cleura (build 7207e35, exif gps=0 serial=0). Going live = Cloudflare A record imagesbyolofsson.se -> 185.62.207.98. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
imagesbyolofsson added 9 commits 2026-10-27 22:37:56 +00:00
Counts go to customer.imagesbyolofsson.se/api/stats/hit via sendBeacon. No cookie, IP or id stored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- business.ts: single source of truth; unknown facts (city, area, prices,
  packages, phone, delivery time, experience, testimonials) are null and are
  skipped everywhere. faq.ts builds answers only from known facts.
- portfolio-meta.ts: data hook for real per-image alt texts.
- SEO.astro: title, description, canonical, Open Graph, Twitter, og:image
  (EXIF-free JPG via getImage, absolute URL).
- SchemaOrg.astro: @graph with WebSite, Person, ProfessionalService
  (sameAs, ReserveAction to the customer portal, offer catalog without
  prices), WebPage, optional FAQPage and BreadcrumbList.
- MainLayout: lang=sv, Swedish nav (adds Tjänster), consent banner and
  footer in Swedish, lyxlimo/karleksguiden line removed, info@ address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
- astro.config: site, trailingSlash "never", build.format "file".
- /sitemap-index.xml + /sitemap-0.xml as prerendered endpoints (no new
  dependency); pages are derived from src/pages/*.astro, 404 excluded.
- robots.txt: all bots allowed, AI crawlers/training bots explicitly
  allowed (Linus's decision), /download/ disallowed, sitemap line.
- /llms.txt generated from business.ts, incl. usage-with-attribution note.
- 404.astro in Swedish with links back, noindex.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
- New /tjanster: genres from existing copy, where/price (contact for offer
  while unknown), booking flow via customer portal, delivery in a private
  gallery, originals after payment, FAQ (also emitted as FAQPage).
- Homepage: tagline + text section on who/what/where/how to book.
- About: Swedish, photographer framing instead of "by day/by night",
  Adobe line. Contact: Swedish, plain mailto info@, booking CTA, fixed
  unclosed div. Privacy: Swedish (Google Limited Use line kept in English).
- Unique Swedish title and description per page; scripts moved inside the
  layout (no <script> after </html>).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
- www -> apex 301, old URLs (/my-people, /animales-and-nature,
  /celebrations-with-family, /northen-lights) -> /portfolio 301,
  trailing slash and .html -> clean URL 301.
- try_files $uri $uri.html, otherwise 404.html with status 404.
- /_astro/*: public, max-age=31536000, immutable (path-based map, no
  duplicate Cache-Control headers); HTML must-revalidate.
- HSTS, Referrer-Policy, Permissions-Policy, X-Frame-Options, CSP that
  allows the Meta Pixel and the stats beacon to customer.imagesbyolofsson.se.
- deploy/caddy-site.snippet: the same rules as importable Caddy snippets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
- Homepage images: <Picture> from src/assets (AVIF/WebP/JPG srcset, width/
  height, first image eager + fetchpriority high, rest lazy), Swedish alt
  texts. (The duplicate EXIF-laden copies in public/3d-scroll were deleted
  in 30e385e; README links now point at src/assets.)
- Portfolio: originals are no longer referenced (no .src access), so Astro
  does not copy them to dist/. Small/Medium/Large downloads and the lightbox
  srcset are EXIF-free JPGs from getImage. Old -s/-m files are no longer
  imported.
- Alt texts: Swedish fallback from date (EXIF or filename), never camera
  model or "undefined"; portfolio-meta.ts overrides per image.
- Gallery items are <a href> to the large image (lightbox on click);
  download options are buttons; no empty H3, no H4 for the password box.
- Stats beacon unchanged; item keys computed at build time (same format).
- Script moved inside the layout so it is no longer rendered after </html>.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
Phone, prices, packages, delivery time and years stay null until Linus confirms them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WvE3C43Uwtv2vtnoFBLDw7
imagesbyolofsson merged commit 85bd49b0c3 into main 2026-10-27 23:45:32 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Imagesbyolofsson.se/imagesbyolofsson-se#1