Images stored in CDN-backed object store, not base64 or direct server uploads
Why it matters
Base64-encoded images in JSON-LD or direct-to-server uploads bloat HTML payloads by 30-40%, blow up your origin bandwidth bill, and destroy Core Web Vitals. LCP spikes past 4 seconds on mobile, browsers cannot cache per-image, and you lose responsive format negotiation (WebP, AVIF) that CDNs handle automatically. Google downranks slow pages, paid traffic converts worse, and every listing view costs you compute you should not be paying for.
Severity rationale
Critical because origin bandwidth costs and LCP regression directly threaten directory economics and search rankings.
Remediation
Move all listing images to a CDN-backed object store and persist only the resulting URL in your database. Use S3 + CloudFront, Cloudinary, or Vercel Image Optimization so browsers get cached, format-negotiated responses instead of inline base64. Migrate existing rows with a backfill job that uploads each embedded payload to the bucket and rewrites the field.
const { Location } = await s3.upload({
Bucket: 'directory-listing-images',
Key: `listings/${listing.id}/${filename}`,
Body: imageBuffer,
ContentType: mimeType,
CacheControl: 'public, max-age=31536000, immutable'
}).promise()
await db.listing.update({ where: { id: listing.id }, data: { imageUrl: Location } })
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Listing Data & Schema Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from directory-listing-schema·automated