When Chrome flags problems in its Issues panel, something's wrong with your site's security, privacy, or standards compliance. Lighthouse surfaces these issues because they indicate real problems that affect users.
Chrome's browser engine detects problems during page load: insecure resource loading, cookie configuration errors, cross-origin policy violations, and more. These aren't just warnings - they often mean features are broken or security is compromised.
Lighthouse collects these issues and fails the audit if any exist. The specific issues vary:
Each issue includes:
// Issues don't appear in console by default
// Open the Issues panel or check Network tab for blocked requests
Look in the Network tab for:
(blocked:mixed-content)(blocked:csp)HTTPS pages loading HTTP resources. Browsers block these or warn users.
Symptoms: Images not loading, scripts failing, "Not Secure" warnings.
<!-- Bad: HTTP on HTTPS page -->
<img src="http://example.com/image.jpg">
<script src="http://cdn.example.com/lib.js"></script>
<!-- Good: HTTPS everywhere -->
<img src="https://example.com/image.jpg">
<script src="https://cdn.example.com/lib.js"></script>
<!-- Better: Protocol-relative (inherits page protocol) -->
<img src="//example.com/image.jpg">
Fix checklist:
Content-Security-Policy: upgrade-insecure-requests
This tells browsers to automatically upgrade HTTP to HTTPS.
Modern browsers require explicit cookie configuration.
Common problems:
Set-Cookie: session=abc123
Fixed:
Set-Cookie: session=abc123; Secure; HttpOnly; SameSite=Lax; Path=/
Required attributes:
Secure - Only send over HTTPS (required for SameSite=None)SameSite=Lax - Prevents CSRF, allows top-level navigationSameSite=Strict - Tighter, blocks all cross-siteSameSite=None; Secure - Cross-site allowed (requires Secure)HttpOnly - JavaScript can't read (for session cookies)Third-party cookies: If you embed widgets that set cookies, they need SameSite=None; Secure. Without it, cookies are blocked in cross-site contexts.
Resources blocked due to CORS or CORP headers.
CORS issues:
Access to fetch at 'https://api.example.com/data' from origin 'https://mysite.com'
has been blocked by CORS policy
Fix on the server returning the resource:
Access-Control-Allow-Origin: https://mysite.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
Or for public APIs:
Access-Control-Allow-Origin: *
CORP issues:
Cross-Origin-Resource-Policy blocks embedding.
Cross-Origin-Resource-Policy: same-origin
Cross-Origin-Resource-Policy: same-site
Cross-Origin-Resource-Policy: cross-origin
For images/resources you want embeddable, use cross-origin.
Chrome intervenes when ad iframes use excessive CPU or network.
Thresholds:
Fix:
You can't directly fix third-party ad code, but you can choose better providers.
Resources blocked by your own CSP.
Refused to load the script 'https://analytics.example.com/track.js'
because it violates the Content-Security-Policy directive: "script-src 'self'"
Fix options:
A. Add source to CSP:
Content-Security-Policy: script-src 'self' https://analytics.example.com
B. Use nonce for inline scripts:
Content-Security-Policy: script-src 'nonce-abc123'
<script nonce="abc123">
// Allowed
</script>
C. Review if the blocked resource is necessary:
Sometimes CSP correctly blocks unwanted scripts (injected by browser extensions, etc.).
nuxt.config.ts:export default defineNuxtConfig({
routeRules: {
'/**': {
headers: {
'Content-Security-Policy': 'default-src \'self\'; script-src \'self\' \'unsafe-inline\'',
'X-Content-Type-Options': 'nosniff'
}
}
}
})
useCookie with options:const session = useCookie('session', {
secure: true,
sameSite: 'lax',
httpOnly: true
})
next.config.js:module.exports = {
async headers() {
return [{
source: '/:path*',
headers: [
{
key: 'Content-Security-Policy',
value: 'default-src \'self\'; script-src \'self\' \'unsafe-inline\''
}
]
}]
}
}
res.setHeader('Set-Cookie', 'session=value; Secure; HttpOnly; SameSite=Lax; Path=/')
Test mixed content specifically:
// In console on your HTTPS page
performance.getEntriesByType('resource').forEach((r) => {
if (r.name.startsWith('http://')) {
console.warn('Mixed content:', r.name)
}
})
//localhost:3000/api doesn't work, use full URLs.default-src 'self' and wondering why everything breaks. Build CSP incrementally.SameSite=None absolutely require Secure flag.Issues often appear only on specific pages - a blog post with an old HTTP image, a landing page with a misconfigured embed. Unlighthouse audits every page and surfaces browser issues across your entire site.