Web development
Web image optimisation: verifiable protocol, formats, LCP and perceptual quality
Image optimisation is not a race for the smallest file. The method connects the selected resource to its role, CSS box, display density, perceptual quality, network evidence and accessibility.
- 12 domains From source asset to field monitoring.
- 36 controls Stable IMGxx identifiers and expected evidence.
- 4 statuses Not tested never means compliant.
- 1 public case Edikka defect recorded, measured and corrected.
View “Web image audit grid” in the Edikka Instrument Libraryv1.1 · CC BY 4.0
Web image audit grid
Document which images need correction and the supporting evidence.
Observe image loading
Images and visual stability: observe before correcting
What happens when an image arrives after the text? Compare the same image with and without reserved space, then inspect twelve archived laboratory trials. Linked to controls IMG22 and IMG23 of the existing grid.
These links open in a new tab.
Demo 1.0.0 · grid 1.1. The visual replay and archived laboratory CLS are distinct. No field data is collected.
Preview, files and citation
Inside the instrument
| ID | Check | Expected evidence |
|---|---|---|
| IMG01 | Is every visible image inventoried with its final URL, template and role? | Dated inventory with page URL, currentSrc, role and owner. |
| IMG02 | Is each image classified as LCP, content, decoration, interface, social or data? | Reviewed role and short rationale for each priority image. |
| IMG03 | Do critical images have an owner and a review date? | Owner, last review and next review date. |
Read the original file — Web image audit grid · v1.1
Cite this version
Edikka (2026). Web image audit grid (v1.1). https://www.edikka.com/en/insights/web-development/web-image-optimisation#library-source-web-image-audit-grid. Accessed 2026-10-11. CC BY 4.0.
Version history: this catalogue documents the version shown above. No earlier change log is provided here.
Report an issue with this version by email — Web image audit grid- grille-audit-images-web-edikka-v1-1.json · JSON · fr
- web-image-audit-grid-edikka-v1-1.json · JSON · en
- grille-audit-images-web-edikka-v1-1.xlsx · XLSX · fr + en
- collect-image-evidence-edikka-v1-1.mjs · MJS · zxx
- web-image-evidence-report-v1-1.schema.json · JSON Schema · zxx
- CITATION-images-web-edikka-v1-1.cff · CFF · fr + en
Interpretation limit. The grid separates browser facts from decisions; the historical v1.0 replay does not validate the corrected IMG07 check in v1.1.
Find “Web image audit grid” in the Edikka Instrument LibraryShort answer
A web image is optimised when the browser receives the smallest sufficient file without losing meaning, sharpness or stability.
Weight alone is not a verdict. A 5 KB thumbnail may be excellent and a 5 KB hero may be visibly damaged. Conversely, a larger file may be the correct choice when it is the Largest Contentful Paint element, appears in a large box and carries important detail. The decision connects six variables: role, rendered dimensions, pixel density, format, perceptual quality and loading time.
The 2025 Web Almanac reports that images are the LCP element on 85.3% of desktop pages and 76% of mobile pages in its dataset. It also reports roughly 1,059 KB of images on the median desktop page and 911 KB on mobile. These are context figures, not budgets to copy.
Real case · Edikka
This page failed its own recommendation. We recorded the defect before correcting it.
On 22 August 2026, the public hero selected a 600×400 AVIF weighing 4,794 bytes. Its HTML offered neither srcset nor sizes, while the image occupied up to roughly 445 CSS pixels on desktop. On a 2× screen, the useful intrinsic width approached 890 pixels. Discovery and priority were correct — loading="eager", fetchpriority="high" — but the selected resource could lack definition.
We compared that file with its own 1000×667 JPEG master, resized to 600×400 with Lanczos to isolate encoding. It scored 62.4404 with SSIMULACRA2. The new edition uses a new 1536×1024 PNG master, so every derivative is measured only against a reference produced from that same master. The figures establish encoding fidelity; they are not an artistic A/B test.
| State | AVIF candidate | Bytes | SSIMULACRA2 | Decision |
|---|---|---|---|---|
| Before | 600×400 | 4,794 | 62.4404 | Non-compliant with the published premium policy. |
| After · compact | 600×400 | 22,502 | 83.4109 | Faithful derivative for small boxes. |
| After · DPR 2 | 900×600 | 41,533 | 81.4102 | Candidate for a 445-pixel box at 2× density. |
| After · ceiling | 1000×667 | 48,660 | 80.6031 | Largest public derivative without exposing the PNG master. |
Before and after scores are not subtracted because the masters and artwork differ. The production replay below establishes responsive selection, zero horizontal overflow and dated laboratory metrics; it does not replace 75th-percentile field data or human review across every display. Edikka authored the method and audited its own site: this is not an independent benchmark.
Inspect the self-audit JSON, hashes and measurement protocol.
Production evidence · 23 August 2026
Eight viewport × DPR combinations confirm responsive selection with no horizontal overflow.
The public French page was replayed with Playwright from 390 to 1440 pixels and DPR 1 to DPR 2. Each scenario records final URL, HTTP status, CSS box, currentSrc, natural dimensions, encoded bytes, visible control count and browser-console issues. The observed candidates are the 600×400 and 900×600 AVIFs: the browser does not automatically download the largest available resource.
Lighthouse measured the same public state. The mobile lab profile scores 99/100 performance, 100/100 accessibility and 1.9 s LCP; desktop scores 100/100 performance and 0.4 s LCP. These values describe a dated cold-lab run, not an entire user population.
| Context | Viewport | DPR | CSS box | Selected candidate | Bytes |
|---|---|---|---|---|---|
| Mobile | 390×844 | 1 | 354×236 | 600×400 AVIF | 22,502 |
| High-density mobile | 390×844 | 2 | 354×236 | 900×600 AVIF | 41,533 |
| Tablet | 800×900 | 1 | 764×509 | 900×600 AVIF | 41,533 |
| High-density desktop | 1440×1000 | 2 | 445×297 | 900×600 AVIF | 41,533 |
The replay also exposed an experimental tools=(self) token in Permissions-Policy. It did not affect image selection; its removal is included in the 23 August release. The evidence retains the finding instead of silently deleting it.
Download the replay JSON, assertions, metrics and reproduction commands.
Evidence levels
HTML, a network trace, field data and human review answer different questions.
| Level | Establishes | Does not establish alone | Examples |
|---|---|---|---|
| Public HTML | Candidates, attributes, dimensions, alt text and initial discoverability. | The selected file in every context. | srcset, sizes, alt, width, height. |
| Browser | Selected resource, bytes, priority, rendering, DPR and request timeline. | The experience of the whole audience. | currentSrc, Resource Timing, waterfall. |
| Field | 75th-percentile LCP and CLS when sufficient data exist. | The exact cause of a regression. | CrUX, Search Console, RUM. |
| Pipeline | Dimensions, format, metadata, bytes, provenance and non-regression. | Editorial meaning and artistic quality. | CI, hashes, encoder, SSIMULACRA2. |
| Human review | Legibility, crop, visible artefacts and brand fit. | Field performance without instrumentation. | 1:1 comparison, mobile and high-density displays. |
Edikka method · version 1.1
The grid covers 12 domains and 36 controls without producing a misleading aggregate score.
Every control has a stable IMGxx identifier, method, expected evidence, required access, severity and automation level. Status is restricted to Not tested, Compliant, Non-compliant and Not applicable. A decorative image with an empty alt is not worse than an informative image: it answers a different decision.
The protocol never adds rows into a grade. Missing text on a functional image, a lazy-loaded LCP image or a third-party tracker fired before consent can block release even when every other check succeeds.
| ID | Domain | Question | Method | Expected evidence | Severity | Automation |
|---|---|---|---|---|---|---|
IMG01 | Inventory and role | Is every visible image inventoried with its final URL, template and role? | Extract img, picture, SVG and CSS images from priority templates; deduplicate by final URL. | Dated inventory with page URL, currentSrc, role and owner. | Major | Partial |
IMG02 | Inventory and role | Is each image classified as LCP, content, decoration, interface, social or data? | Compare position, context and function; never infer the role from the filename alone. | Reviewed role and short rationale for each priority image. | Major | No |
IMG03 | Inventory and role | Do critical images have an owner and a review date? | Assign each family to an editorial, design or technical owner. | Owner, last review and next review date. | Minor | Partial |
IMG04 | Master, crop and art direction | Is a sufficiently detailed master kept outside production without generation-loss re-encoding? | Compare master dimensions and hash with derivatives; identify successive generations. | Identified, hashed and versioned master. | Major | Partial |
IMG05 | Master, crop and art direction | Do the focal point and crop remain legible in every template? | Replay desktop, tablet and mobile; inspect the subject, embedded text and negative space. | Screenshots at reference widths and human approval. | Major | No |
IMG06 | Master, crop and art direction | Is an art-direction variant supplied when scaling alone destroys the composition? | Compare the reduced common crop with a dedicated picture/media variant. | Documented choice: shared crop or dedicated variant. | Minor | No |
IMG07 | Responsive dimensions | Do srcset candidates cover rendered widths and high-density screens without major oversizing? | With a cold cache, record the rendered CSS width and DPR, identify currentSrc, then measure the selected file pixel width directly without treating naturalWidth as the encoded width. Calculate coverage = file width / (CSS width × DPR) and compare it with the versioned threshold for the image role. | currentSrc, CSS width, DPR, selected-file pixel dimensions, measurement method, coverage ratio and applicable threshold. | Major | Partial |
IMG08 | Responsive dimensions | Does sizes describe the actual layout? | Compare sizes with computed container widths at documented breakpoints. | sizes values, rendered box and selected resource. | Major | Partial |
IMG09 | Responsive dimensions | Does the browser choose the smallest sufficient candidate in the tested scenarios? | Replay viewport, DPR and cold cache; record currentSrc and transferred bytes. | Viewport × DPR × currentSrc × bytes matrix. | Major | Yes |
IMG10 | Formats and fallbacks | Does the format fit the content: photo, transparency, screenshot, illustration, vector or animation? | Classify the visual, then compare the delivered format with fidelity constraints. | Visual type, primary format and rationale. | Minor | Partial |
IMG11 | Formats and fallbacks | Does each modern source have a coherent fallback when the support policy requires one? | Inspect picture/source/img and test source-selection order. | picture tree and versioned compatibility policy. | Major | Yes |
IMG12 | Formats and fallbacks | Are MIME type, extension and served bytes consistent? | Compare Content-Type, URL and file signature. | HTTP header and binary identification. | Major | Yes |
IMG13 | Compression and perceptual quality | Is weight measured per candidate instead of inferred from a filename or estimate? | Record encodedBodySize and transferSize with a cold cache. | Encoded and transferred bytes per resource. | Major | Yes |
IMG14 | Compression and perceptual quality | Is perceptual quality checked against an explicit master? | Compare at identical dimensions with SSIMULACRA2 or a documented metric, then review sensitive areas. | Master, encoder, version, settings, score and 1:1 captures. | Major | Partial |
IMG15 | Compression and perceptual quality | Does policy prohibit repeated re-encoding from a derivative? | Trace file provenance and require generation from the master. | Provenance graph or pipeline rule. | Major | Partial |
IMG16 | LCP discovery and priority | Is the LCP image discoverable in the initial HTML without a late script? | Inspect the pre-execution HTML response and the request initiator. | Initial HTML and request initiator. | Blocking | Yes |
IMG17 | LCP discovery and priority | Does the LCP image avoid loading=lazy and receive an appropriate priority? | Inspect loading, fetchpriority, preload and network order. | Attributes and dated waterfall. | Blocking | Yes |
IMG18 | LCP discovery and priority | When present, does the responsive preload match the rendered srcset and sizes? | Compare preload imagesrcset/imagesizes with the image candidates. | Coherent preload and image element, without duplicate download. | Major | Yes |
IMG19 | Loading and decoding | Do offscreen images use lazy loading without creating a visual gap? | Check loading, viewport distance and request timing during scroll. | Attribute, position and network timeline. | Minor | Partial |
IMG20 | Loading and decoding | Is decoding mode appropriate to criticality and tested on the rendered page? | Record decoding and inspect rendering; do not treat async or sync as universal. | Attribute and rendering observation. | Information | Partial |
IMG21 | Loading and decoding | Do carousels, galleries and injected images reserve space before loading? | Replay cold cache and interactions; observe layout shifts. | CLS trace and component capture. | Major | Partial |
IMG22 | Dimensions and stability | Do width and height describe the intrinsic ratio of the candidate or reference fallback? | Compare attributes, decoded dimensions and rendered ratio. | HTML dimensions, natural dimensions and calculated ratio. | Major | Yes |
IMG23 | Dimensions and stability | Is space reserved before download at every breakpoint? | Disable cache, throttle the network and inspect the box before decoding. | Pre-load capture and laboratory CLS. | Major | Partial |
IMG24 | Dimensions and stability | Does CSS cropping preserve an explicit ratio and focal point? | Inspect aspect-ratio, object-fit, object-position and container dimensions. | Computed styles and breakpoint captures. | Minor | Partial |
IMG25 | Accessibility and meaning | Does every informative image have text that conveys its function in context? | Apply the W3C decision tree; compare alt, adjacent text and function. | Informative, functional, complex or decorative decision. | Blocking | No |
IMG26 | Accessibility and meaning | Are decorative images ignored by assistive technologies? | Check an empty alt or equivalent technique without duplicating context. | Accessible DOM and screen-reader output. | Major | Partial |
IMG27 | Accessibility and meaning | Do complex charts, diagrams and screenshots have an equivalent description or data? | Check figcaption, long description, data table or adjacent text. | Complete alternative reachable from the same context. | Major | No |
IMG28 | Image SEO and discoverability | Are important images exposed through an img src, optionally inside picture? | Compare visible images, HTML and CSS resources. | Discoverable URL in HTML and editorial context. | Major | Yes |
IMG29 | Image SEO and discoverability | Do filename, alt, caption and adjacent text describe one subject without keyword stuffing? | Cross-review the file, alternative and surrounding paragraph. | Documented consistency without artificial repetition. | Minor | No |
IMG30 | Image SEO and discoverability | Do CDN, image sitemap and structured data use accessible, consistent URLs? | Check status, image canonical, Search Console ownership for separate domains, sitemap and primaryImageOfPage. | Final URL, status, verified property and coherent ImageObject. | Major | Partial |
IMG31 | HTTP, cache and privacy | Do public images use a cache policy compatible with their versioning? | Inspect Cache-Control, ETag, Age and immutable naming. | HTTP headers and invalidation rule. | Major | Yes |
IMG32 | HTTP, cache and privacy | Are sensitive or unnecessary metadata removed from derivatives? | Inspect EXIF, XMP, profiles and coordinates; retain only what is required. | Before/after metadata report. | Major | Yes |
IMG33 | HTTP, cache and privacy | Do third-party images respect consent, CSP, CORS and the expected referrer policy? | Replay before and after consent; inspect origin, cookies, CSP and referrer. | Waterfall, headers and legal/technical decision. | Blocking | Partial |
IMG34 | Measurement, CI and governance | Are dimension, weight and quality budgets versioned per image type? | Define template-specific caps and perceptual-quality floors as guardrails, not universal truth. | Versioned configuration file and justified exception. | Major | Yes |
IMG35 | Measurement, CI and governance | Does CI fail on blocking regressions and publish the evidence? | Replay dimensions, formats, metadata, weight, candidates and links; archive the report. | Command, exit code, dated report and owner. | Major | Yes |
IMG36 | Measurement, CI and governance | Are field, laboratory and perceptual data kept separate in the decision? | Report field LCP/CLS, lab diagnosis and visual review in three distinct columns. | Decision table without a misleading aggregate score. | Major | Partial |
IMG07–IMG09
Required file width follows the CSS box and DPR, not the phone model.
A useful first estimate is required file width ≈ rendered width × DPR. A 445-pixel image on a 2× display calls for roughly 890 pixels. Texture, zoom, format and quality still affect perception, but the calculation prevents two opposite errors: sending 2000 pixels to a 240-pixel thumbnail or 600 pixels to a 445-pixel Retina hero.
In a width-descriptor srcset, every descriptor must match the file’s real width. sizes then describes the image’s layout slot. The browser combines viewport, DPR and candidates, and may reuse a cached candidate.
<picture>
<source type="image/avif"
srcset="hero-600.avif 600w, hero-900.avif 900w, hero-1000.avif 1000w"
sizes="(max-width: 767px) calc(100vw - 48px), 445px">
<source type="image/webp"
srcset="hero-600.webp 600w, hero-900.webp 900w, hero-1000.webp 1000w"
sizes="(max-width: 767px) calc(100vw - 48px), 445px">
<img src="hero-1000.jpg"
srcset="hero-600.jpg 600w, hero-1000.jpg 1000w"
sizes="(max-width: 767px) calc(100vw - 48px), 445px"
width="1000" height="667" alt="Useful description in context"
loading="eager" fetchpriority="high" decoding="sync">
</picture>Version 1.0 compared naturalWidth with the CSS box multiplied by DPR. HTML defines naturalWidth as a density-corrected dimension, so it does not necessarily reveal the encoded pixels of the selected file. IMG07 now decodes the resource at currentSrc independently, calculates file_width / (CSS_width × DPR), and keeps the threshold in a versioned role policy. Automation changes from “Yes” to “Partial”: collection is automated; the decision depends on the declared threshold.
At every critical breakpoint, record innerWidth, DPR, CSS width, currentSrc, selected-file pixel dimensions, measurement method, coverage ratio and encoded bytes. A screenshot alone does not prove which resource was selected.
IMG10–IMG12
AVIF, WebP, JPEG, PNG and SVG solve different content and production constraints.
| Format | Good candidate | Watch for | Fallback |
|---|---|---|---|
| AVIF | Photos and rich compositions where reduced bytes matter. | Encoding effort and artefacts on fine detail or embedded text. | WebP or JPEG according to support policy. |
| WebP | Photos, screenshots and transparency in mature pipelines. | A suffix does not prove quality. | JPEG or PNG when required. |
| JPEG | Photo fallback and broad compatibility. | No transparency; cumulative generation loss. | Often the fallback itself. |
| PNG | Transparency and pixels where loss is unacceptable. | High weight for photography. | Lossless WebP or validated AVIF. |
| SVG | Logos, icons and simple diagrams. | Scripts, external references and complex DOM. | Raster only when the context requires it. |
A defensible protocol states its compatibility policy. Bare AVIF may be acceptable in a controlled environment; heterogeneous support may require picture and a fallback. The failure is changing policy from one image to another without a documented reason.
IMG13–IMG15
A byte cap without a perceptual reference mechanically rewards over-compression.
PSNR, SSIM, SSIMULACRA2 and Butteraugli can compare variants, but none judges crop, meaning or accessibility. A publishable protocol records the master, scaling method, encoder and version, settings, score, bytes and interpretation limits.
This page compares files at identical dimensions. Comparing a derivative directly with a differently sized master would mix resizing and encoding effects. Every variant is measured against a PNG reference generated from its own master with Lanczos.
ffmpeg -i master.jpg -vf scale=600:400:flags=lanczos reference.png
ffmpeg -i candidate.avif candidate.png
ssimulacra2 reference.png candidate.png
wc -c candidate.avif
shasum -a 256 master.jpg candidate.avifDo not approve one encoder quality setting for an entire site. Approve a recipe per family — photo, screenshot, texture, illustration — and require human review for high-brand-value exceptions.
IMG16–IMG18
The LCP image should be discovered early, prioritised clearly and preloaded only when evidence justifies it.
Google and web.dev converge on three levers: expose the resource in initial HTML, avoid lazy loading for the LCP element and increase priority with care. Preload may help when discovery is late, but a mismatched responsive preload can consume bandwidth or download twice.
A first-screen image is not necessarily the LCP for every user. Viewport, consent, content and cache can change the candidate. Field data observes the distribution; the laboratory diagnoses discovery and selection.
<link rel="preload" as="image" href="hero-1000.jpg"
imagesrcset="hero-600.avif 600w, hero-900.avif 900w, hero-1000.avif 1000w"
imagesizes="(max-width: 767px) calc(100vw - 48px), 445px"
type="image/avif" fetchpriority="high">IMG19–IMG24
Lazy loading, decoding and explicit dimensions solve three different problems.
| Mechanism | Purpose | Evidence | Common failure |
|---|---|---|---|
loading="lazy" | Delay an offscreen image. | Request time and viewport distance. | Applying it to the LCP image. |
decoding | Express a decoding preference. | Observed rendering without side effect. | Treating async as universal. |
width + height | Supply intrinsic ratio and reserve space. | Stable box before download. | Declaring dimensions that do not match the file ratio. |
aspect-ratio | Control responsive component geometry. | Computed style at each breakpoint. | Hiding an incorrect intrinsic ratio. |
CLS is a page-level outcome. Correct image dimensions cannot compensate for banners, fonts or injected components. The audit records the image box and the complete layout-shift trace separately.
IMG25–IMG27
Alt text is a contextual decision, not a filename generator or keyword field.
| Function | Expected treatment | Failure |
|---|---|---|
| Informative | Convey the useful information in context. | Generic description that omits the point. |
| Functional | Name the action or destination. | Describe appearance instead of purpose. |
| Decorative | Use an empty alt when appropriate. | Create noise for assistive technology. |
| Complex | Provide a nearby long description, table or equivalent data. | Compress a chart into one vague sentence. |
Automated tests can detect missing attributes, not whether the text conveys the right meaning. IMG25 and IMG27 deliberately require human review.
IMG28–IMG30
Discoverability starts with img and src; structured data cannot rescue an image hidden from extraction.
Important images should be available through an img element with a usable src, optionally inside picture. Stable URLs, accessible pages, coherent adjacent text and image sitemaps help discovery. CSS backgrounds remain appropriate for decoration, not for essential indexed content.
When a CDN uses a separate domain, verify ownership in Search Console. Ensure sitemap, primaryImageOfPage, Open Graph and the public page refer to accessible assets that do not disappear behind transient signatures.
An ImageObject describes an image already present on a coherent page. It does not replace HTML discovery, context, access or quality.
IMG31–IMG36
The optimisation pipeline should be reproducible, versioned and able to fail a release.
Hashed immutable derivatives can receive long cache lifetimes; stable names require an explicit invalidation strategy. Inspect Cache-Control, ETag, Age and CDN behaviour. Remove sensitive EXIF, XMP and coordinates from public derivatives while preserving colour information that the rendering policy needs.
CI can check dimensions, formats, MIME types, metadata, bytes, candidate coverage and broken URLs. It cannot approve crop, visual meaning or brand quality. A blocking regression should fail with a timestamped report and a named owner, not a private warning.
node audit-images.mjs https://example.com/page --output report.json
test "$(jq '.blocking_failures' report.json)" -eq 0
test "$(jq '.untested_blocking_controls' report.json)" -eq 0The Edikka v1.1 collector distributed with this edition scrolls through the document to trigger native lazy loading, then records public browser evidence: currentSrc, decoded selected-file pixels, CSS box, DPR, coverage, transfer timings, headers and console issues. It deliberately signs neither human framing, Search Console, server logs nor perceptual quality. The grid remains the decision source; the collector does not manufacture a score from incomplete evidence.
State of the art · August 2026
Compatibility, cache and fidelity require dated decisions, not a permanent ranking of formats.
| Topic | Verifiable state | Production decision | Expected evidence |
|---|---|---|---|
sizes="auto" | HTML allows it for lazy-loaded images and permits fallback source sizes. | Use it only when the lazy-loading intrinsic size is controlled; keep explicit sizes for an eagerly loaded LCP image. | currentSrc and rendered width across target viewports. |
| JPEG XL | Chrome 145 documents a Blink decoder in an experimental setting behind an origin trial or flags. | Do not make it the universal baseline of this edition. Test within a bounded scope with a fallback that is actually served. | Dated compatibility matrix, negotiation and waterfall. |
| Client Hints | Sec-CH-Width and Sec-CH-DPR remain an incubated mechanism involving HTTPS, opt-in, cache and privacy constraints. | Treat them as progressive optimisation: no essential image may depend on their presence. | Accept-CH, received request headers, cache key and no-hints fallback. |
Vary: Accept | When one URL negotiates several formats, caches must not deliver the wrong variant to another client. | Verify the CDN cache key. Prefer explicit variant URLs when end-to-end negotiation cannot be audited. | Origin/edge headers, HIT/MISS and responses for multiple Accept values. |
| Encoder settings | A “quality” number is not comparable across codecs, encoders or versions. | Version codec, encoder, version, effort, subsampling and parameters; compare produced files, not slider values. | Command or configuration, hash, bytes, chosen metric and 1:1 review. |
| Colour management | CSS Color 4 defines extended spaces, while rendering also depends on the file profile, browser and display. | Keep profiles required for fidelity, document sRGB or P3 and test derivatives; do not strip profiles by reflex. | Master and derivative profiles, controlled-display captures and observed delta. |
| RGESN | French RGESN criteria 5.1, 5.2 and 6.4 address suitable formats, compression and adaptation to display sizes. | Map them to IMGxx controls without presenting one article or page as global RGESN compliance. | Criterion → control → result → evidence mapping. |
Every browser-, CDN- or encoder-dependent decision carries a review date. A novelty enters the baseline only after availability, fallback and production behaviour have been evidenced.
Open instrument · citation · changelog
A method becomes reusable when a third party can collect the same facts, validate their structure and cite a stable edition.
npm install playwright
npx playwright install chromium
node collect-image-evidence-edikka-v1-1.mjs \
https://example.com/page web-image-report.jsonThe report follows a public JSON Schema. Its initial status remains Not tested: collecting a value is not a decision. The auditor maps observations to IMGxx identities, supplies required non-public access and signs the outcome.
Recommended citation: Morel, Bertrand (2026). “Web image optimisation: verifiable protocol, 36-control grid and evidence collector.” Edikka, version 1.1, 23 August 2026, CC BY 4.0. The CITATION.cff file provides structured fields. This edition has no assigned DOI; the canonical URL, version and date are its published citation keys.
| Edition | Additions | Compatibility |
|---|---|---|
| v1.0 · 22 August 2026 | 12 domains, 36 controls, XLSX/JSON grid and before/after self-audit. | Founding edition. |
| v1.1 · 23 August 2026 | IMG07 correction, independent selected-file pixel measurement, v1.1 collector and schema, English parity and historical eight-context production evidence. | IMG01–IMG36 identities and decision vocabulary remain stable; the 23 August replay is historical v1.0 evidence and is not presented as IMG07 v1.1 validation. |
Operational workflow
Move from editorial role to production evidence in eight explicit decisions.
- 01Classify the role
LCP, content, decoration, interface, social or data.
- 02Preserve the master
Source, rights, focal point, provenance and hash.
- 03Measure real boxes
CSS widths, breakpoints and useful display densities.
- 04Choose art direction
Shared crop or a dedicated mobile variant.
- 05Encode candidates
Documented formats, widths, fallbacks and settings.
- 06Measure quality
Bytes, perceptual metric and human 1:1 review.
- 07Integrate
picture, srcset, sizes, dimensions, priority, alt and caption.
- 08Replay in production
currentSrc, waterfall, LCP, CLS, accessibility, cache and discovery.
Failure patterns
Six popular rules fail because they collapse separate decisions into one number.
| Myth | Why it fails | Testable replacement |
|---|---|---|
| “Every image under 100 KB” | Ignores role, dimensions, content and quality. | Budgets by family and template, with documented exceptions. |
| “AVIF is always better” | Outcome depends on encoder, settings and visual. | Compare real variants at validated size and quality. |
| “Lazy load everything” | Delays LCP and some first-screen images. | Lazy offscreen only; discover and prioritise LCP. |
| “Alt text contains the keyword” | Confuses accessibility, context and optimisation theatre. | Describe function or information in context. |
| “Lighthouse 100 proves performance” | One lab run does not describe the field distribution. | Lab for diagnosis, field for observation, pipeline for prevention. |
| “A perceptual score proves quality” | It judges neither composition, meaning, brand nor accessibility. | Documented metric plus targeted human review. |
Open resources
Download the grid, inspect the evidence and reuse the method.
The grid, datasets, Markdown, collector, schema and citation metadata are published under CC BY 4.0. Reuse is allowed with attribution to Edikka and a link to this article.
Primary sources and standards
Sources rechecked on 23 August 2026.
- Google Search Central — Google Images best practices.
- web.dev — Optimize Largest Contentful Paint.
- web.dev — Preload responsive images.
- WHATWG HTML — Responsive images.
- W3C WAI — Alt decision tree.
- HTTP Archive Web Almanac 2025 — Performance.
- HTTP Archive Web Almanac 2025 — Page Weight.
- web.dev — Web Vitals.
- Cloudinary — SSIMULACRA2.
- RFC 9111 — HTTP Caching.
- French General Framework for Digital Service Ecodesign.
- Chrome Developers — Chrome 145 release notes.
- WICG — Responsive Image Client Hints.
- W3C — CSS Color Module Level 4.
Prompt, full source and citation
Explore this analysis.
Choose a task, review the prompt and take it to your AI.
Web image optimisation: verifiable protocol, formats, LCP and perceptual qualityUpdated August 23, 2026
Read the full prompt
Your inputs stay in this browser until you paste them into your AI. No analysis runs here.
Your AI cannot read the link?
Copy the full source or download the document, then attach it to your conversation.
Full message to copy
No message is sent from this page.
Review and publish the post yourself on LinkedIn.
A premium image is neither the lightest nor the largest. It is the right image for its role and context.
Performance should remove unnecessary bytes without degrading meaning, crop, sharpness, accessibility or stability. Every compromise should remain visible and replayable.
Observe the actual candidate
Filename is not evidence. currentSrc, the selected file’s decoded pixels, CSS box, DPR, bytes and timing describe what the browser actually used.
Compare with the master
A perceptual metric documents encoding. Human review protects faces, textures, embedded text, crops and brand details.
Reject the single score
Weight, LCP, CLS, accessibility and perceptual quality remain separate. One good number cannot offset a blocking failure.
Frequently asked questions
Additional answers to clarify the key points covered in this article.
What is a genuinely optimised web image?
A web image is optimised when the browser receives the smallest sufficient file for its CSS box and display density without losing meaning, crop, sharpness, accessibility or stability. File size alone is not enough.
Is AVIF always better than WebP or JPEG?
No. A suffix guarantees neither weight nor quality. Compare derivatives from the same master at the same dimensions with documented encoder settings, then keep a fallback that matches the browsers you actually support.
How should srcset widths be chosen?
Measure the real CSS boxes at critical breakpoints, multiply them by the target display densities, then retain a small set of widths that covers those needs without wasteful gaps. Verify currentSrc in the browser afterwards.
What should the sizes attribute contain?
With width descriptors, sizes describes the width the image occupies in the layout for each viewport condition. It must reflect the actual CSS; a generic value can make the browser download a candidate that is too large or too small.
Should the LCP image be lazy-loaded?
Usually not. The LCP image should be discoverable early in the initial HTML and should not depend on late lazy loading. fetchpriority and preload are justified only after checking discovery, network order and duplicate requests.
What does SSIMULACRA2 measure?
SSIMULACRA2 measures perceptual similarity between a reference and a derivative compared at identical dimensions. It does not judge artistic value, crop or accessibility and guarantees no ranking gain. Human review remains necessary.
What alternative text should an image use?
The decision depends on the image function in context. An informative image conveys useful information; a functional image names the action or destination; a decorative image generally uses an empty alt. Do not copy a filename automatically.
How can an image be made discoverable in Google Images?
Use an img element with a usable src, accessible pages, coherent surrounding text, stable URLs and, when needed, an image sitemap. Structured data describes the page and image but does not replace discoverability.
What maximum file size should an image have?
There is no universal ceiling. The budget depends on role, rendered box, DPR, texture, format and required quality. Define a policy per image family and control bytes, rendering and field experience separately.
How should website images be audited?
Inventory images and their roles, retain masters, measure boxes and currentSrc, verify formats and fallbacks, compare perceptual quality, control LCP and CLS, test text alternatives, then replay those invariants in CI and production.