VIVAAgent-readiness spec sheet · PS Auction
PS Auction · agent readiness · v6.psauction.se

What blocks an AI agent on the site today

A spec sheet for the development team. Every finding leads with the agent impact and ends with a clear definition of done. Verified live on the Swedish staging site, 2026-06-15.

Readiness gateNOT READY

Where the site stands

The site cannot migrate in its current state. The canonical product page (/item/view/*) returns HTTP 500 for everyone, category pages (/search/typ=) return HTTP 500, and the crawler-facing surfaces are either dead or firewall-blocked. An agent or search engine cannot reliably reach a single live item.

Minimum pass conditions to reach "conditionally ready"

  1. Item detail pages return HTTP 200 with rendered content and Product / Offer schema.
  2. Category pages return HTTP 200 with a populated listing, on one consistent URL form.
  3. Unknown and ended URLs return a real 404 or 410, never 500, never a 200 soft-404.
  4. Retrieval, search and agent crawlers receive 200 on category and item URLs, while training crawlers are disallowed in robots.txt (see the crawler policy below).
  5. Canonicals are absolute and self-referential on the host served; no cross-domain canonical from staging.
  6. <html lang="sv"> on Swedish pages; sitemap lists real item and auction URLs on the correct host.

On performance: page speed and Core Web Vitals are deliberately left out. This is a staging environment, so speed numbers measure the temporary hosting, not the real site. Everything in this sheet is intrinsic to the code and will follow to production. We interrogate it as if it were already live.

Launch blockers

Fix before migrate

These stop an agent or search engine from reaching the catalog at all. They gate the migration.

PSA-01currentCritical

Item detail pages return HTTP 500

Impact on agents and search

The product page is the most important page for both agents and search. A 500 makes crawlers drop it and stops an agent reading or acting on any item, even though the content renders. No Product / Offer schema reaches the client.

Problem
The canonical product page returns a 500 server error to every client, browsers included. Full HTML renders but the status is 500. Ended lots also 500 (they used to return a 200 soft-404).
Evidence
GET /item/view/959980/minikyl-redbull, browser UA, 2026-06-15: expected 200, actual 500 on 6 of 6 requests. The body also ships a contradictory robots pair (noindex then index,follow).
Definition of done
A valid item URL returns 200 with rendered content and a parseable Product + Offer JSON-LD block. An ended lot returns 200 with a clear "auction ended" state or 410 / 404, never 500. One robots directive per page.
Owner: Frontend / Next.js routing + Catalog APIVerifiable now on v6.se
PSA-02currentCritical

Category pages return HTTP 500

Impact on agents and search

The category and taxonomy layer is unreachable, so agents and crawlers cannot browse the catalog by category.

Problem
Category URLs in the typ= form return a server error on direct load, even though the homepage links to them.
Evidence
GET /search/typ=bygg and /search/typ=elektronik, 2026-06-15: expected 200, actual 500 (3 of 3 each). Sibling /search returns 200, so the fault is specific to the typ= segment. The 500 page ships a noindex + index robots pair.
Definition of done
The typ= category URLs return 200 with a populated result set (or a correct 404 if a category truly does not exist), with one consistent robots meta.
Owner: Frontend / Next.js routing + Catalog APIVerifiable now on v6.se
PSA-03currentCritical

Search and AI crawlers are blocked on key surfaces

Impact on agents and search

The catalog and item surfaces, where the organic equity sits, are invisible to search engines and AI agents. Against the agreed policy (allow retrieval and agent crawlers, block only training), today's state is wrong both ways: it blocks crawlers PS Auction wants in, Googlebot included, and leaves the training opt-out incomplete.

Problem
Two layers block machine clients. The edge firewall returns 403 to every non-browser user-agent on /search and /item/view/*, and robots.txt disallows AI crawlers site-wide.
Evidence
UA matrix, 2026-06-15: browser 200 on /, /auktioner, /search; Googlebot, GPTBot, ClaudeBot, PerplexityBot, curl and empty UA all 403 on /search and /item/view/* (served by the edge, awselb/2.0).
Definition of done
Retrieval, search and agent crawlers receive 200 on category and item URLs in both the firewall and robots.txt; training crawlers are disallowed in robots.txt. See the crawler policy below for the exact token list. Verify with a curl per user-agent.
Owner: Platform / Edge firewall + SEOVerifiable now; final firewall config at flip-mode
PSA-04currentHigh

Category URL forms are fragmented and the crawler-facing ones are dead

Impact on agents and search

Whichever path an agent or crawler follows from the homepage or the sitemap, it lands on an error. Category discovery is effectively zero.

Problem
Three competing category URL forms coexist, and the two a crawler actually sees are broken.
Evidence
2026-06-15: homepage links use /search/typ= (browser 500, bot 403); the sitemap lists /sok?kategori= (browser and bot 404); only /search/itemtype= renders for a browser (200) but 403s bots.
Definition of done
One canonical category URL form, used by the homepage links, the sitemap and the working route, returning 200 to both browser and bot.
Owner: Frontend / Next.js routing + SEOVerifiable now on v6.se
PSA-05currentHigh

Canonicals are relative or point cross-domain to production

Impact on agents and search

An agent or crawler attributes staging content to production, and relative canonicals are fragile. Canonical signals across the site are unreliable.

Problem
Pages emit relative-root canonicals, and some emit canonical or og:url pointing at the production domain psauction.se.
Evidence
2026-06-15: / canonical href="/" with og:url=https://psauction.se; /auktioner canonical /auctions; only /search emitted a correct absolute self-canonical.
Definition of done
Every page emits an absolute, self-referential canonical on the host served; no staging page canonicalizes or sets og:url to psauction.se; 404 pages emit no canonical or a self-canonical.
Owner: SEO + FrontendCross-domain intent rechecked at flip-mode
PSA-06currentHigh

Sitemap is a static stub on the wrong host with no detail URLs

Impact on agents and search

An agent or crawler cannot discover a single live auction or item through the sitemap, and the host is wrong when served from staging.

Problem
sitemap.xml is a hand-written stub: 20 static URLs, all on the production host, no detail pages, frozen lastmod.
Evidence
GET /sitemap.xml (200): 20 <loc>, all https://psauction.se, zero item or auction URLs, every lastmod 2025-12-23. The robots Sitemap line also points at production.
Definition of done
Sitemap generated dynamically with real item and auction URLs, per-item lastmod, and loc hosts matching the host served. Count well above 20, at least one detail URL present.
Owner: SEO + Catalog APIDepends on PSA-01, PSA-02, PSA-04

High

Not migration-stoppers on their own, but each materially degrades how agents and search read the site.

PSA-07currentHigh

Invalid html lang "se" (should be "sv")

Impact on agents and search

Screen readers, translation layers and AI agents mis-identify the page language.

Problem
Swedish pages declare lang="se". "se" is the country code (and the Northern Sami language code), not the Swedish language code "sv".
Evidence
2026-06-15: / and the auction page serve <html lang="se"> with NEXT_LOCALE=se; zero lang="sv" anywhere.
Definition of done
Swedish pages serve <html lang="sv"> and NEXT_LOCALE=sv; English stays "en". No "se" lang remains.
Owner: Frontend + SEOVerifiable now on v6.se
PSA-08currentHigh

Homepage content regression and no item links without JavaScript

Impact on agents and search

A crawler or agent that does not run JavaScript sees a near-empty homepage and cannot reach any item.

Problem
The v6 homepage cold HTML is a thin shell versus live, and no item-detail links appear without JavaScript.
Evidence
2026-06-15, no JS: live psauction.se = 311 links, 27 item links, ~16,082 chars text; v6 = 65 links, 0 item links, ~3,091 chars text. /auktioner is content-rich (165 links), so the regression is concentrated on the homepage.
Definition of done
v6 homepage cold HTML carries a comparable order of magnitude of internal links and text to live, including some crawlable item links.
Owner: Frontend / Next.js SSRItem links depend on PSA-01
PSA-09currentHigh

Accessibility tree is malformed (Agentic Browsing 67)

Impact on agents and search

An agent reads and acts through the accessibility tree. A malformed tree means it cannot reliably parse roles, landmarks and controls.

Problem
Google Lighthouse Agentic Browsing flags the accessibility tree as not well-formed; the homepage scores 67 of 100 (lowest of 7 pages; site average 81). Failing audits include heading order, contrast, ARIA roles and named controls.
Evidence
Lighthouse Agentic Browsing, 2026-06-15, v6.psauction.se. Structure direction (agent-accessibility-tree) fails.
Definition of done
The agent-accessibility-tree audit passes; sequential headings, contrast at least 4.5 to 1, every interactive control named; homepage agentic score rises out of the 67 band.
Owner: Accessibility + FrontendVerifiable now (re-run Lighthouse)
PSA-10currentHigh

Item metadata is inconsistent

Impact on agents and search

An agent surfaces inconsistent or placeholder metadata for the item.

Problem
Item title and og:title are now item-specific (good), but twitter:title still uses the generic site headline and the meta description is an unrendered template key.
Evidence
2026-06-15: title Minikyl RedBull, but twitter:title still "PS Auction - Den cirkulära handelsplatsen", and meta description = "item.metadata.description" (raw key). Homepage title is still the bare generic headline. Double escaping present.
Definition of done
title, og:title and twitter:title align (item name plus brand); description renders the real item text, never "item.metadata.description". Fix double escaping.
Owner: Frontend + SEOGated behind PSA-01
PSA-11currentHigh

Search page exposes no ItemList schema

Impact on agents and search

Agents and crawlers get no structured listing of results, only breadcrumbs.

Problem
The search results page emits only a BreadcrumbList, no ItemList.
Evidence
2026-06-15: /search (200) JSON-LD contains only BreadcrumbList; ItemList and numberOfItems absent.
Definition of done
/search emits an ItemList with itemListElement entries for visible results and a correct numberOfItems matching the rendered hit count.
Owner: SEO + FrontendVerifiable now on v6.se

Medium

Worth fixing before launch, lower blast radius.

PSA-12currentMedium

No hreflang annotations

Impact on agents and search

Search engines and agents cannot map equivalent pages across the Swedish and English variants.

Problem & evidence
Zero rel="alternate" hreflang tags. 2026-06-15: hreflang count 0 on the home, auction and final .com pages.
Definition of done
Each localized page emits reciprocal hreflang="sv" | "en" | "x-default" tags pointing at the matching URLs.
Owner: SEOPartly deferred to flip-mode (domain strategy)
PSA-13currentMedium

Structured founding year conflicts with brand copy

Impact on agents and search

An agent surfaces the wrong founding year from the machine-readable data.

Problem & evidence
Organization JSON-LD foundingDate="1987" while the visible copy says "sedan 1958" (2026-06-15 homepage).
Definition of done
A single correct year in both the JSON-LD and the copy.
Owner: SEO / contentVerifiable now on v6.se
PSA-14currentMedium

Staging robots.txt is fully indexable

Impact on agents and search

Risk of the staging host being indexed before launch, creating duplicate-content and wrong-host indexing.

Problem & evidence
Staging serves User-agent: * / Allow: / with no global noindex (2026-06-15).
Definition of done
Decide whether staging should be crawlable; if not, staging returns Disallow: / or X-Robots-Tag: noindex while production keeps Allow.
Owner: SEO + PlatformPolicy decision

Crawler policy

decided

PS Auction's decision: allow AI agents and answer engines to crawl, read and act on the content; do not allow the content to be used for model training. The split is implemented per crawler token, because the major providers run a separate training crawler and retrieval crawler.

PSA-15currentHigh

Allow crawling and retrieval, block training

Allow (200 in firewall + robots)
GooglebotBingbotOAI-SearchBotChatGPT-UserPerplexityBotClaude-UserClaude-SearchBotApplebot
Block (Disallow in robots.txt)
GPTBotCCBotGoogle-ExtendedClaudeBotanthropic-aiApplebot-Extended
Current state versus policy (wrong both ways)
The firewall 403s every non-browser UA (including the allow list) on /search and /item/view. robots.txt currently blocks ChatGPT-User (a retrieval UA that should be allowed), covers the training bots only partially, and omits ClaudeBot. So: move ChatGPT-User to allow, add the missing training tokens, and align the firewall to the allow list.
Definition of done
robots.txt encodes the allow / block split; the firewall serves 200 to each allowed UA on /search and /item/view; a curl per user-agent confirms allowed equals 200 and blocked has the robots Disallow.

robots.txt is advisory, and the train-versus-retrieve split relies on each provider honouring its own user-agent tokens; user-agents can be spoofed. This is a standards-based, best-effort opt-out, not a hard technical guarantee. Confirm the exact token list against each provider's current documentation at implementation time, since these tokens change.

Owner: SEO + PlatformImplement before launch, re-confirm tokens at flip-mode
PSA-16currentLow

llms.txt is well-formed but links point to production

Impact on agents and search

This is the one agentic direction that already passes: an AI agent gets a clean entry-point map. Keep it.

Problem & evidence
/llms.txt passes the Findability audit (one H1, 20 links, UTF-8, well-formed), but every link targets psauction.se, so an agent reading the staging file is routed off staging (2026-06-15, 2,980 bytes).
Definition of done
Keep llms.txt well-formed; confirm the link host (production vs staging) is intentional for the target environment.
Owner: SEOConfirm at flip-mode

Upcoming

flip-mode

Cannot be assessed on staging today. Verify when the summer "try our new site" flip-mode environment is live on the production domain.

PSA-17upcomingInformational

No WebMCP tool surface or agents.json

Impact on agents

Forward-looking. WebMCP lets an agent call site-provided tools rather than scrape the UI. Google does not require it yet, so it is not gradeable today.

Problem & evidence
2026-06-15: /.well-known/agents.json and /agents.json both 404; the Lighthouse Tools direction was not measured.
Definition of done (upcoming)
At flip-mode, decide whether to expose WebMCP-registered tools / agents.json; if exposed, the Lighthouse Tools audit registers them and agents.json returns valid JSON.
Owner: Platform (future)Deferred to flip-mode

Agent-readiness at a glance

Google Lighthouse Agentic Browsing, v6.psauction.se, 2026-06-15, 7 pages sampled. Average 81 of 100, homepage 67. Agent readiness is ordinary web correctness seen through one lens.

DirectionGoogle auditStatusIn this sheet
Structureagent-accessibility-treeFailPSA-09
Stabilitycumulative-layout-shiftPassNo action
Findabilityllms-txtPassPSA-16 (keep)
Toolswebmcp-registered-toolsNot applicablePSA-17 (upcoming)

Historical findings

full record

The complete record of every finding raised across this engagement, condensed to one line each so it stands on its own. Most are resolved on the previous stage or superseded by the current findings above. Kept so nothing is lost and the dev team can trace the history. Status: fixed resolved, open open or superseded, context parked, out of scope or by design.

v6 browser audit, carried over (2026-06-03, not re-verified this pass)

V6-11robots.txt disallows the wrong path family; the real crawl-trap params (?sort=, ?sida=, ?page=) on /sok and /auctions are left unblocked.open
V6-18On live, /search/typ= already 302-redirects to the homepage today, so some category equity may already be slipping on production.open
V6-19Images lack width and height attributes, causing layout shift while the page loads.open
V6-22Auction thumbnails are ORB-blocked (ERR_BLOCKED_BY_ORB) and do not load in the browser; the auction CDN is missing content-type / CORS headers.open
V6-23Cookiebot is not authorized for the v6 domain, so the consent banner fails to show until the domain is added in Cookiebot Manager.open

Resolved on v6 since earlier checks

V6-01Unknown URLs used to return 200 index,follow; they now return a real 404 with noindex. (Ended item URLs regressed the other way to 500, tracked in PSA-01.)fixed
V6-14The seller landing page /salja used to return 500; it now returns 200.fixed
V6-13bAuction pages now expose a valid SaleEvent plus BreadcrumbList schema (url and location point to production, worth a flip-mode check).fixed
i18nThe raw "auction.metadata.title" placeholder no longer appears on the sampled auction; residual metadata issues are in PSA-10.fixed

Lovable-era stage audit (2026-03), fixed before the platform change

F15Title duplication "PS Auction | PS Auction" replaced with a unique title per page.fixed
F16Canonical tags added to object and auction pages.fixed
F20Auction URL format moved to /auction/ID/slug.fixed
F21Auction pages render individual data (fixed via the URL-format change).fixed
F25Pagination via &sida=N works.fixed
F28Generic og:title made unique per page.fixed
F30Old /search?auktion= URL paradigm replaced by /auction/ID/slug.fixed
F32FAQ schema parse error fixed (now 4 valid Q&A pairs).fixed
F33Duplicate meta descriptions reduced to one per page.fixed
F34Duplicate meta keywords removed.fixed
F35Conflicting / multiple meta robots tags reduced to a single correct tag.fixed
F36Duplicate canonical elements reduced to one per page (the root bug behind F16).fixed
F38Stage served index,follow despite password protection; fixed to noindex,nofollow.fixed
F39Pagination not rendering on click fixed.fixed
F41Broken auction pages that soft-404'd now render a proper noindex not-found page.fixed
F42Double H1 on item pages reduced to one.fixed
F43Missing H1 on the /auctions listing page added.fixed
F44Stage password protection removed.fixed
F49Subcategories rendered as <button> not <a>, so ~141 subcategory pages were uncrawlable; fixed to real anchor links.fixed
F50SPA navigation did not update meta tags on category toggle; fixed to update on route change.fixed
NLF04Empty FAQPage schema now carries 4 Q&A pairs.fixed

Lovable-era, open or partial then, now superseded by the v6 findings above

F40Sitemap URL mismatch and incomplete (superseded by PSA-06).open
F45Content gap: ~20+ information pages on live were missing or placeholder on stage (re-assess at flip-mode).open
F46Duplicate /salj and /salja routes for the seller page; pick one canonical and redirect the other.open
F47Info-page paths differ between live and stage (~6 pages), needing 301 redirects or path matching.open
F48Outlet category present on live, missing on stage.open
F29Filter pages had conflicting robots tags; partially fixed (superseded by the current robots work).open
F04Inconsistent trailing slash; verify canonicalization before go-live.open
F07Large JS bundle (~2.5 MB) may affect Core Web Vitals (performance, out of this sheet's scope).open
F09Soft-404 on empty filter pages; handle empty result sets with a correct status (related to PSA-01).open
F10Inconsistent title format across page types.open
F17Object og:title shows the auction name instead of the item (related to PSA-10).open
F18Filter pages show the parent category in H1 and title.open
NLF01llms.txt had encoding mojibake; now valid UTF-8 and well-formed (see PSA-16).open
NLF02Organization schema was missing; now present on the homepage (see PSA-13).open
NLF03WebSite + SearchAction schema was missing; now present.open
NLF05Product + Offer schema missing on item pages (superseded by PSA-01 and PSA-10).open
NLF06Event schema missing on auction pages (SaleEvent now present, see V6-13b).open
NLF07ItemList schema missing on category pages (superseded by PSA-11).open
NLF08BreadcrumbList JSON-LD missing while a DOM breadcrumb existed; schema now present.open
NLF09No citable fact blocks in body copy for snippets and AI answers.open
NLF10Geographic market only partly covered (in meta, missing in H1, FAQ, body).open
NLF11Meta descriptions lack auction-volume figures that would lift SERP CTR.open
NLF12HowTo schema isolated on the homepage; extend schema coverage.open

Parked, out of scope, or closed by design

F01CSR on the old stage, SSR promised for production (v6 is now SSR).context
F23URL strategy: build right long-term rather than replicate live (client decision).context
F24Filter-URL scale; redirect plan parked pending real data and SSR.context
F37robots.txt parked, to be rebuilt before go-live (see PSA-14).context
F31International button not functional; hreflang out of scope then (see PSA-12).context
F05/F06Live og:url without path and JS-rendered meta; out of scope, solved by SSR on live.context
F13/F26Live auction og:url issues pre-JS; out of scope, solved by SSR on live.context
F14Live returns noindex,nofollow; intentional, out of scope.context
F22Auction pages noindex on live, confirmed intentional by the client.context
F08Potential robots.txt URL blocking, folded into the robots rebuild.context
F02Sitemap content unknown, superseded by F40 and PSA-06.context
F03robots.txt config, superseded by F37.context
F11Canonical hash bug, a false positive (a Firecrawl pre-JS artifact).context
F12Multi-filter canonical points to the parent category, by design.context
F19/F27Object URL structure identical on live and stage, verified correct.context

Recommendations

REC01Keep the comma-separated filter URL format (typ=) rather than separate ?filter= params. Implemented (client decision).done
REC02Stage routing supports the comma-separated format. Verified.done
REC03Cookiebot GDPR hygiene: make "Reject all" as easy and equal as "Accept all". Not yet actioned.open