Rapport des bonnes pratiques
Les rapports des bonnes pratiques sont générés aux formats JSON (summary/best-practices.report.json) et Markdown (summary/best-practices.report.md) lors d'une mesure de parcours.
Ces rapports sont générés uniquement pour les mesures de parcours avec un rapport source JSON, y compris avec le mode de sortie statement. Ils ne sont pas générés pour une URL directe ni avec une sortie HTML seule.
Exemple de fichier JSON généré lors d'une mesure de parcours.
{
"courses": [
{
"report": "simple-test-page.report.json",
"pages": [
{
"url": "http://localhost:3000/simple",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "1 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Minify inline CSS and JS",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 1,
"displayValue": "All inline assets appear minified",
"status": "OK"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
}
]
},
{
"report": "shadow-dom-test.report.json",
"pages": [
{
"url": "http://localhost:3000/shadow-dom",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "2 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "2 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
}
]
},
{
"report": "complex-test.report.json",
"pages": [
{
"url": "http://localhost:3000/svg-shadow-dom",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "2 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "2 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
}
]
},
{
"report": "heavy-impact-test.report.json",
"pages": [
{
"url": "http://localhost:3000/heavy",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "1 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "1 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
}
]
},
{
"report": "complete-test-suite.report.json",
"pages": [
{
"url": "http://localhost:3000/simple",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "1 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Minify inline CSS and JS",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 1,
"displayValue": "All inline assets appear minified",
"status": "OK"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
},
{
"url": "http://localhost:3000/svg",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "1 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "1 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
},
{
"url": "http://localhost:3000/shadow-dom",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "2 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "2 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
},
{
"url": "http://localhost:3000/svg-shadow-dom",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "2 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "2 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
},
{
"url": "http://localhost:3000/complex",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "1 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Images without lazy loading detected",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 0,
"displayValue": "2 image(s) without lazy loading",
"status": "KO"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "1 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
},
{
"url": "http://localhost:3000/heavy",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - No animated elements",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 1,
"displayValue": "No animated elements",
"status": "OK"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - No embedded documents",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 1,
"displayValue": "No embedded documents detected",
"status": "OK"
},
{
"id": "rweb-limit-css-files",
"title": "RWEB_0035 - Limit CSS stylesheets (≤ 7)",
"description": "Keep the number of CSS files to 7 or fewer to reduce HTTP requests. [See RWEB_0035](https://rweb.greenit.fr/en/fiches/RWEB_0035-limit-the-number-of-css)",
"score": 1,
"displayValue": "0 CSS stylesheet(s)",
"status": "OK"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Split CSS by media context",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 1,
"displayValue": "All large CSS files are scoped by media type",
"status": "OK"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Prefer CSS over images for UI elements",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 1,
"displayValue": "No icon images in buttons/links detected",
"status": "OK"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Avoid bitmap images for UI elements",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 1,
"displayValue": "No bitmap images in UI containers",
"status": "OK"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Minimize inline assets",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 1,
"displayValue": "1 inline asset(s) found",
"status": "OK"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Use lazy loading for images",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 1,
"displayValue": "All images use lazy loading",
"status": "OK"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Avoid canvas elements",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 1,
"displayValue": "No canvas elements",
"status": "OK"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Use Cache-Control headers",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 1,
"displayValue": "All resources have Cache-Control",
"status": "OK"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/1 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "1 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Combine CSS and JS files (≤2 each)",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 1,
"displayValue": "0 CSS + 0 JS files",
"status": "OK"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "1 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - Avoid using GIFs",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 1,
"displayValue": "No GIFs detected",
"status": "OK"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - No video/audio autoplay",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 1,
"displayValue": "0 autoplay element(s)",
"status": "OK"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "Avoid HTTP request errors (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 1,
"displayValue": "No HTTP errors",
"status": "OK"
},
{
"id": "bp-no-document-write",
"title": "Avoid blocking DOM write API in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 1,
"displayValue": "No blocking DOM write API detected",
"status": "OK"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "No JavaScript runtime errors in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 1,
"displayValue": "No JavaScript runtime errors",
"status": "OK"
},
{
"id": "bp-no-plugins",
"title": "Do not use browser plugins (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 1,
"displayValue": "No browser plugins detected",
"status": "OK"
},
{
"id": "bp-no-unused-code",
"title": "Avoid render-blocking external scripts",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 1,
"displayValue": "No render-blocking external scripts",
"status": "OK"
}
]
}
},
{
"url": "http://localhost:3000/bp-violations",
"rweb": {
"title": "Bonnes pratiques RWEB",
"bestPractices": [
{
"id": "rweb-no-animations",
"title": "RWEB_0009 - Animated elements detected",
"description": "Avoid animations and transitions to reduce CPU and battery usage. [See RWEB_0009](https://rweb.greenit.fr/en/fiches/RWEB_0009-avoid-javascriptcss-animations)",
"score": 0,
"displayValue": "1 animated element(s) found",
"status": "KO"
},
{
"id": "rweb-no-carousel",
"title": "RWEB_0010 - Avoid carousels",
"description": "Avoid using carousel/slider libraries when possible. [See RWEB_0010](https://rweb.greenit.fr/en/fiches/RWEB_0010-limiting-the-use-of-carousels)",
"score": 1,
"displayValue": "No carousel libraries detected",
"status": "OK"
},
{
"id": "rweb-title-meta",
"title": "RWEB_0011 - Missing title or meta description",
"description": "Ensure the page has a non-empty title and meta description. [See RWEB_0011](https://rweb.greenit.fr/en/fiches/RWEB_0011-relevant-page-titles-and-metadescriptions)",
"score": 0,
"displayValue": "Missing title or meta description",
"status": "KO"
},
{
"id": "rweb-print-css",
"title": "RWEB_0031 - No print css implemented.",
"description": "A print css must be implemented to hide useless elements when printing. [See RWEB_0031](https://rweb.greenit.fr/en/fiches/RWEB_0031-provide-a-css-print)",
"score": 0,
"displayValue": "Print CSS count: 0",
"status": "KO"
},
{
"id": "rweb-limit-fonts",
"title": "RWEB_0032 - Limit font families (≤ 2)",
"description": "Reduce the number of external font families loaded. [See RWEB_0032](https://rweb.greenit.fr/en/fiches/RWEB_0032-prefer-standard-fonts)",
"score": 1,
"displayValue": "0 external font families",
"status": "OK"
},
{
"id": "rweb-no-embedded-docs",
"title": "RWEB_0033 - Embedded documents detected",
"description": "Avoid embedding documents (PDF, Word, etc.) directly in HTML. Use links instead. [See RWEB_0033](https://rweb.greenit.fr/en/fiches/RWEB_0033-do-not-display-documents-within-pages)",
"score": 0,
"displayValue": "2 embedded document(s) found",
"status": "KO"
},
{
"id": "rweb-css-splitting",
"title": "RWEB_0036 - Large CSS files without media targeting detected",
"description": "Split large CSS files by media type (print, mobile…) so only relevant styles are parsed. [See RWEB_0036](https://rweb.greenit.fr/en/fiches/RWEB_0036-divide-css)",
"score": 0,
"displayValue": "2 large CSS file(s) without media targeting",
"status": "KO"
},
{
"id": "rweb-prefer-css",
"title": "RWEB_0037 - Images used for UI icons (prefer CSS)",
"description": "Replace bitmap or SVG icons inside buttons and links with CSS shapes or icon fonts to reduce HTTP requests. [See RWEB_0037](https://rweb.greenit.fr/en/fiches/RWEB_0037-use-css-instead-of-images)",
"score": 0,
"displayValue": "1 image(s) used as UI icons",
"status": "KO"
},
{
"id": "rweb-no-bitmap-ui",
"title": "RWEB_0038 - Bitmap images in UI containers detected",
"description": "Replace bitmap images (PNG/JPG/WebP) in headers, navs, footers and buttons with SVG or CSS. [See RWEB_0038](https://rweb.greenit.fr/en/fiches/RWEB_0038-avoid-using-raster-images-for-the-interface)",
"score": 0,
"displayValue": "2 bitmap image(s) in UI containers",
"status": "KO"
},
{
"id": "rweb-no-inline-assets",
"title": "RWEB_0042 - Inline assets detected",
"description": "Minimize the use of inline scripts and styles. [See RWEB_0042](https://rweb.greenit.fr/en/fiches/RWEB_0042-externalize-css-and-javascript)",
"score": 0,
"displayValue": "7 inline asset(s) found",
"status": "KO"
},
{
"id": "rweb-lazy-loading",
"title": "RWEB_0051 - Images without lazy loading detected",
"description": "Add loading=\"lazy\" to below-the-fold images to defer their download. [See RWEB_0051](https://rweb.greenit.fr/en/fiches/RWEB_0051-use-lazy-loading)",
"score": 0,
"displayValue": "6 image(s) without lazy loading",
"status": "KO"
},
{
"id": "rweb-no-canvas",
"title": "RWEB_0055 - Canvas elements detected",
"description": "Minimize the use of canvas elements. [See RWEB_0055](https://rweb.greenit.fr/en/fiches/RWEB_0055-limit-canvas-use)",
"score": 0,
"displayValue": "1 canvas element(s) found",
"status": "KO"
},
{
"id": "rweb-no-social-sdk",
"title": "RWEB_0059 - No official social network buttons",
"description": "Replace official social network buttons with static links to reduce third-party requests. [See RWEB_0059](https://rweb.greenit.fr/en/fiches/RWEB_0059-replace-the-official-social-network-sharing-buttons)",
"score": 1,
"displayValue": "0 social SDK request(s) detected",
"status": "OK"
},
{
"id": "rweb-service-worker",
"title": "RWEB_0060 - No active Service Worker detected",
"description": "A Service Worker improves caching and reduces network requests. [See RWEB_0060](https://rweb.greenit.fr/en/fiches/RWEB_0060-save-bandwidth-with-service-workers)",
"score": 0,
"displayValue": "No Service Worker",
"status": "KO"
},
{
"id": "rweb-cache-control",
"title": "RWEB_0075 - Resources missing Cache-Control header",
"description": "Set Cache-Control headers on HTML, CSS, JS and font resources to reduce repeated downloads. [See RWEB_0075](https://rweb.greenit.fr/en/fiches/RWEB_0075-add-expires-or-cache-control-headers)",
"score": 0,
"displayValue": "1 resource(s) missing Cache-Control",
"status": "KO"
},
{
"id": "rweb-http-compression",
"title": "RWEB_0076 - Text resources not compressed",
"description": "Enable gzip/brotli compression for HTML, CSS and JS resources. [See RWEB_0076](https://rweb.greenit.fr/en/fiches/RWEB_0076-compressing-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "0/13 text resources compressed (0%)",
"status": "KO"
},
{
"id": "rweb-minification",
"title": "RWEB_0077 - Unminified inline CSS/JS detected",
"description": "Minify inline style and script blocks to reduce page weight. [See RWEB_0077](https://rweb.greenit.fr/en/fiches/RWEB_0077-minifying-text-files-css-js-html-and-svg)",
"score": 0,
"displayValue": "4 unminified inline asset(s)",
"status": "KO"
},
{
"id": "rweb-combine-assets",
"title": "RWEB_0078 - Too many separate CSS/JS files",
"description": "Concatenate CSS and JS files to reduce HTTP requests. [See RWEB_0078](https://rweb.greenit.fr/en/fiches/RWEB_0078-combining-css-and-javascript-files)",
"score": 0,
"displayValue": "9 CSS + 3 JS files",
"status": "KO"
},
{
"id": "rweb-no-cookie-on-static",
"title": "RWEB_0081 - No cookies on static resources",
"description": "Avoid sending cookies with static resources (images, CSS, JS, fonts). [See RWEB_0081](https://rweb.greenit.fr/en/fiches/RWEB_0081-host-static-resources-on-a-cookie-free-domain)",
"score": 1,
"displayValue": "No static resources with Cookie header",
"status": "OK"
},
{
"id": "rweb-limit-domains",
"title": "RWEB_0082 - Limit resource domains (≤ 5)",
"description": "Reduce the number of unique domains serving page resources. [See RWEB_0082](https://rweb.greenit.fr/en/fiches/RWEB_0082-limit-the-number-of-domains-serving-resources)",
"score": 1,
"displayValue": "1 unique domain(s)",
"status": "OK"
},
{
"id": "rweb-uses-http2",
"title": "RWEB_0083 - Resources served over HTTP/1",
"description": "Use HTTP/2 to benefit from multiplexing and header compression. [See RWEB_0083](https://rweb.greenit.fr/en/fiches/RWEB_0083-http2-over-http1)",
"score": 0,
"displayValue": "18 resource(s) on HTTP/1",
"status": "KO"
},
{
"id": "rweb-hsts",
"title": "RWEB_0084 - HSTS header missing",
"description": "Enable HSTS (HTTP Strict-Transport-Security) header to enforce HTTPS. [See RWEB_0084](https://rweb.greenit.fr/en/fiches/RWEB_0084-favor-hsts-preload-list-over-301-redirects)",
"score": 0,
"displayValue": "HSTS header is missing",
"status": "KO"
},
{
"id": "rweb-no-gif",
"title": "RWEB_0099 - GIFs detected",
"description": "Avoid using GIFs for animations or images; use modern formats instead. [See RWEB_0099](https://rweb.greenit.fr/en/fiches/RWEB_0099-limit-the-use-of-animated-gif)",
"score": 0,
"displayValue": "3 GIF(s) detected",
"status": "KO"
},
{
"id": "rweb-optimize-svg",
"title": "RWEB_0100 - Optimize SVG files",
"description": "SVG files over 2048 bytes likely contain metadata or comments that can be removed. [See RWEB_0100](https://rweb.greenit.fr/en/fiches/RWEB_0100-optimize-vector-images)",
"score": 1,
"displayValue": "All SVG files appear optimized",
"status": "OK"
},
{
"id": "rweb-no-autoplay",
"title": "RWEB_0106 - Autoplay video/audio detected",
"description": "Avoid autoplay on video and audio elements. [See RWEB_0106](https://rweb.greenit.fr/es/fiches/RWEB_0106-evitar-la-reproduccion-y-carga-automatica-de-videos-y-sonidos)",
"score": 0,
"displayValue": "1 autoplay element(s)",
"status": "KO"
},
{
"id": "rweb-limit-analytics",
"title": "RWEB_0111 - Limit analytics tools (≤ 1)",
"description": "Limit analytics tools to one per page. [See RWEB_0111](https://rweb.greenit.fr/es/fiches/RWEB_0111-limitar-las-herramientas-de-analisis-y-los-datos-recopilados)",
"score": 1,
"displayValue": "0 analytics tool(s) detected",
"status": "OK"
},
{
"id": "rweb-no-redirects",
"title": "RWEB_0112 - Avoid HTTP redirects (≤ 1)",
"description": "Reduce HTTP redirects to avoid unnecessary round trips. [See RWEB_0112](https://rweb.greenit.fr/en/fiches/RWEB_0112-avoir-redirections)",
"score": 1,
"displayValue": "0 redirect(s)",
"status": "OK"
}
]
},
"bp": {
"title": "Bonnes pratiques generiques d'ecoconception",
"bestPractices": [
{
"id": "bp-badly-sized-images",
"title": "Do not resize images in the browser",
"description": "Do not resize images using the HTML attributes height and width. This sends images in their original size, wasting bandwidth and processor power. A PNG-24 image measuring 350 x 300 px is 41 KB. If you were to resize the same image file in HTML and display it as a 70 x 60 px thumbnail, it would still be 41 KB, when in fact it should be no more than 3 KB! This means 38 KB downloaded for nothing. The best solution is to resize images using software such as Photoshop, without using HTML. When the content added by website users has no specific added value, it",
"score": 1,
"displayValue": "Found 0 resized image(s)",
"status": "OK"
},
{
"id": "bp-cookie-size",
"title": "Cookie size ≤ 512 bytes",
"description": "Keep Cookie request headers under 512 bytes to reduce HTTP overhead.",
"score": 1,
"displayValue": "No Cookie header exceeds 512 bytes",
"status": "OK"
},
{
"id": "bp-no-http-errors",
"title": "HTTP request errors detected (4xx/5xx)",
"description": "Fix broken resources (404, 500…) to avoid unnecessary network load and improve user experience.",
"score": 0,
"displayValue": "5 HTTP error(s) detected",
"status": "KO"
},
{
"id": "bp-no-document-write",
"title": "Blocking DOM write API detected in inline scripts",
"description": "Using the deprecated DOM write API blocks HTML parsing and forces a full browser re-parse. Replace it with modern DOM manipulation methods (e.g. element.insertAdjacentHTML or appendChild).",
"score": 0,
"displayValue": "1 blocking DOM write API call(s) in inline scripts",
"status": "KO"
},
{
"id": "bp-no-hidden-images",
"title": "Avoid downloading images that are not displayed",
"description": "Images that are downloaded but hidden waste bandwidth. Use lazy loading or remove them.",
"score": 1,
"displayValue": "No hidden downloaded images",
"status": "OK"
},
{
"id": "bp-no-js-errors",
"title": "JavaScript runtime errors detected in console",
"description": "Fix JavaScript errors detected at runtime. These are console.error() calls recorded during page load and indicate broken features. Unlike static linting (RWEB_0043), this check does not cover code style or syntax issues.",
"score": 0,
"displayValue": "6 JavaScript runtime error(s)",
"status": "KO"
},
{
"id": "bp-no-plugins",
"title": "Browser plugin detected (Flash, Silverlight, Java)",
"description": "Remove Flash, Silverlight and Java applet elements — these plugins are obsolete, insecure and unsupported.",
"score": 0,
"displayValue": "1 browser plugin(s) detected",
"status": "KO"
},
{
"id": "bp-no-unused-code",
"title": "Render-blocking external scripts detected",
"description": "Add async or defer to external scripts to prevent blocking the critical rendering path. Render-blocking scripts delay page display and increase CPU usage unnecessarily.",
"score": 0,
"displayValue": "3 render-blocking external script(s)",
"status": "KO"
}
]
}
}
]
}
]
}