1<!doctype html> 2<html lang="en" class="dark"> 3 <head> 4 <meta charset="UTF-8" /> 5 6 <!-- Affiliate Verification (can remove after verified) --> 7 <meta name="impact-site-verification" value="037b419e-24b1-4933-8e88-88f99135e8db" /> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 9 10 <!-- Preconnect for fonts --> 11 <link rel="preconnect" href="https://fonts.googleapis.com" /> 12 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 13 <link href="https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700;800;900&family=Inter:wght@400;500;600;700;800;900&family=Noto+Sans:wght@400;500;700;800;900&family=Noto+Sans+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" /> 14 15 <!-- CSP: 16 - App itself needs blob:/CDN scripts for the ffmpeg / codecs WASM workers. 17 - Boa.Host hosted static sites render inside a sandboxed srcdoc iframe. 18 Per WHATWG HTML, srcdoc documents inherit the enclosing CSP, so any 19 origin that hosted sites need to load JS/CSS/fonts from must be listed 20 here as well. Hosted assets are served from `*.supabase.co` (the 21 serve-site-file edge function), so that origin is allow-listed for 22 script/style/font/img/connect/frame. Google Fonts stays allowed so 23 uploaded Vite/React sites that link to it continue to work. --> 24 <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' blob: https://boa-compress.com https://cdn.jsdelivr.net https://unpkg.com https://www.googletagmanager.com https://*.clarity.ms https://www.google-analytics.com https://*.supabase.co; worker-src 'self' blob:; child-src 'self' blob:; connect-src 'self' blob: https: wss:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://*.supabase.co; font-src 'self' data: https://fonts.gstatic.com https://*.supabase.co; img-src 'self' data: blob: https:; media-src 'self' blob: https://*.supabase.co; frame-src 'self' https:" /> 25 26 <!-- Primary Meta Tags --> 27 <title>Boa Compress â Free Image Compressor, PDF Compressor & Image Tools</title> 28 <meta name="title" content="Boa Compress â Free Image Compressor, PDF Compressor & Image Tools" /> 29 <meta name="description" content="Free online image compressor for PNG, JPG, GIF, SVG and PDF. Compress instantly with privacy-first processing. No files stored." /> 30 <meta name="keywords" content="free image compressor, reduce PNG size, optimize JPEG, bulk image compression, compress images online, webp converter, avif converter, image optimizer, photo compressor, reduce image size, browser image compression, private image compression, png compressor, jpg compressor, pdf compressor" /> 31 <meta name="author" content="Boa-Compress" /> 32 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" /> 33 <meta name="googlebot" content="index, follow" /> 34 <!-- Canonical URLs are set per route via react-helmet-async. A static 35 sitewide canonical duplicated (and conflicted with) the per-route tag, 36 so it intentionally lives in each page component instead. --> 37 38 39 <!-- Favicon - Multiple formats for broad compatibility --> 40 <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 41 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> 42 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> 43 44 <!-- RSS Feed --> 45 <link rel="alternate" type="application/rss+xml" title="Boa-Compress Build Logs" href="/feed.xml" /> 46 <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> 47 48 <!-- Theme & App --> 49 <meta name="theme-color" content="#16a34a" /> 50 <meta name="application-name" content="Boa-Compress" /> 51 <meta name="apple-mobile-web-app-capable" content="yes" /> 52 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> 53 <meta name="apple-mobile-web-app-title" content="Boa-Compress" /> 54 <meta name="format-detection" content="telephone=no" /> 55 <meta name="mobile-web-app-capable" content="yes" /> 56 57 <!-- Open Graph / Facebook --> 58 <meta property="og:type" content="website" /> 59 <meta property="og:url" content="https://boa-compress.com/" /> 60 <meta property="og:title" content="Boa Compress â Free Image Compressor, PDF Compressor & Image Tools" /> 61 <meta property="og:description" content="Compress images instantly with privacy-first tools. PNG, JPG, GIF, SVG and PDF compression. No files stored." /> 62 <meta property="og:image" content="https://boa-compress.com/og-image.png" />
63 <meta property="og:image:width" content="1200" /> 64 <meta property="og:image:height" content="630" /> 65 <meta property="og:image:alt" content="Boa-Compress - Free Image Compression and Upscaling Tool" /> 66 <meta property="og:site_name" content="Boa-Compress" /> 67 <meta property="og:locale" content="en_US" /> 68 69 <!-- Twitter --> 70 <meta name="twitter:card" content="summary_large_image" /> 71 <meta name="twitter:url" content="https://boa-compress.com/" /> 72 <meta name="twitter:title" content="Boa Compress â Free Image Compressor, PDF Compressor & Image Tools" /> 73 <meta name="twitter:description" content="Free online image compressor for PNG, JPG, GIF, SVG and PDF. Privacy-first, no files stored." /> 74 <meta name="twitter:image" content="https://boa-compress.com/og-image.png" /> 75 <meta name="twitter:image:alt" content="Boa-Compress - Free Image Compression and Upscaling Tool" /> 76 77 <!-- Structured Data - WebApplication --> 78
78<script type="application/ld+json"> 79 { 80 "@context": "https://schema.org", 81 "@type": "WebApplication", 82 "name": "Boa-Compress", 83 "url": "https://boa-compress.com", 84 "description": "Free image compression and file optimization tools. Compress PNG, JPG, GIF, SVG and PDF instantly with privacy-first processing.", 85 "applicationCategory": "MultimediaApplication", 86 "operatingSystem": "Any", 87 "browserRequirements": "Requires JavaScript. Requires HTML5.", 88 "offers": { 89 "@type": "Offer", 90 "price": "0", 91 "priceCurrency": "USD" 92 }, 93 "featureList": [ 94 "Image compression up to 90%", 95 "AI-powered 2x image upscaling", 96 "Convert to AVIF, WebP, PNG, JPEG", 97 "Batch processing up to 20 images", 98 "100% browser-based - no server uploads", 99 "Private and secure", 100 "No registration required" 101 ], 102 "screenshot": "https://boa-compress.com/og-image.png" 103 } 104 </script>
104 105 106 <!-- Structured Data - SoftwareApplication (Enhanced) --> 107
107<script type="application/ld+json"> 108 { 109 "@context": "https://schema.org", 110 "@type": "SoftwareApplication", 111 "name": "Boa Compress", 112 "alternateName": "Boa-Compress", 113 "applicationCategory": "PhotographyApplication", 114 "applicationSubCategory": "Image Compressor", 115 "operatingSystem": "Any (Web Browser)", 116 "softwareVersion": "2.0", 117 "releaseNotes": "Added bulk image compression and AVIF/WebP conversion", 118 "downloadUrl": "https://boa-compress.com", 119 "installUrl": "https://boa-compress.com", 120 "screenshot": "https://boa-compress.com/og-image.png", 121 "offers": { 122 "@type": "Offer", 123 "price": "0", 124 "priceCurrency": "USD", 125 "availability": "https://schema.org/InStock" 126 }, 127 "author": { 128 "@type": "Organization", 129 "name": "Boa Compress" 130 }, 131 "keywords": "free image compressor, reduce PNG size, optimize JPEG, bulk image compression, WebP converter, AVIF converter" 132 } 133 </script>
133 134 135 <!-- Structured Data - Organization --> 136
136<script type="application/ld+json"> 137 { 138 "@context": "https://schema.org", 139 "@type": "Organization", 140 "name": "Boa-Compress", 141 "url": "https://boa-compress.com", 142 "logo": "https://boa-compress.com/favicon-32x32.png", 143 "sameAs": [] 144 } 145 </script>
145 146 147
147<script type="module" crossorigin src="/assets/index-B5rz2QU4.js"></script>
147 148 <link rel="modulepreload" crossorigin href="/assets/vendor-react-PF-pjwwH.js"> 149 <link rel="modulepreload" crossorigin href="/assets/vendor-ui-B9gh_fwh.js"> 150 <link rel="modulepreload" crossorigin href="/assets/vendor-supabase-DbZBJn6h.js"> 151 <link rel="modulepreload" crossorigin href="/assets/vendor-query-TanZypWR.js"> 152 <link rel="stylesheet" crossorigin href="/assets/index-BgPTIfPW.css"> 153
153<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
153</head> 154 155 <body> 156 <div id="root"></div> 157 158 <!-- Analytics are consent-gated: GTM, GA4 and Microsoft Clarity are NOT 159 loaded here. Only the Consent Mode default (everything denied) is set, 160 which makes no network request. The tags are injected by 161 src/lib/analytics-consent.ts after the visitor actively accepts. --> 162
162<script> 163 window.dataLayer = window.dataLayer || []; 164 function gtag(){dataLayer.push(arguments);} 165 gtag('consent', 'default', { 166 analytics_storage: 'denied', 167 ad_storage: 'denied', 168 ad_user_data: 'denied', 169 ad_personalization: 'denied' 170 }); 171 </script>
171 172 173 </body> 174</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.