How to fix x frame options weak on Shopify
Replace the weak X-Frame-Options header value with DENY or SAMEORIGIN to prevent clickjacking attacks on your store.
Steps for Shopify
- Shopify's core storefront automatically sends X-Frame-Options: DENY — you cannot override server-level response headers directly from the Shopify admin for the storefront.
- If your finding comes from an embedded app, custom storefront (Hydrogen/Headless), or a third-party integration (e.g. Contentstack), the header must be set in that app's server configuration or middleware, not in Shopify admin.
- For Hydrogen (custom storefronts): open your server.ts (or entry.server.tsx) file and add the header in the handleRequest function using: response.headers.set('X-Frame-Options', 'DENY') and response.headers.set('Content-Security-Policy', "frame-ancestors 'none';").
- For third-party embedded apps served from external servers: set the header in that server's configuration (Node.js, Vercel, Netlify, etc.) — see the Headless/Custom entry below.
- Verify by loading your storefront URL in a browser, opening DevTools → Network → select the document request → Response Headers.
What is x frame options weak?
The `X-Frame-Options` HTTP response header tells browsers whether your website is allowed to be loaded inside an `<iframe>`, `<frame>`, or `<object>` on another site. There are two safe values: `DENY` (no framing allowed anywhere) and `SAMEORIGIN` (only your own site can frame your pages). A third value, `ALLOW-FROM`, was once supported to whitelist a specific external domain — but it is now obsolete, ignored by most modern browsers, and therefore provides no real protection. When this header is missing, set to an unsupported value like `ALLOW-FROM`, or combined with `SAMEORIGIN` in a way that browsers parse inconsistently, your pages are effectively unprotected against framing by attackers.
Without a properly enforced `X-Frame-Options` header, attackers can silently embed your store's checkout, login, or account pages inside invisible iframes on malicious websites — a technique called clickjacking. A shopper thinks they're clicking a button on the attacker's page, but they're actually clicking your hidden iframe: entering payment details, changing account settings, or completing unwanted purchases. This is a real theft and fraud vector that can lead to chargebacks, customer complaints, regulatory scrutiny under PCI-DSS, and loss of consumer trust. Search engines like Google also consider security posture signals when evaluating site quality; a site known to be compromised through clickjacking can suffer ranking and reputation damage. Fixing this header takes under 30 minutes and closes the vulnerability entirely for all modern browsers.
See the complete X frame options weak guide for every platform and the full background.
Not sure if your Shopify store has this?
Run a free SEOLZ scan — we’ll find x frame options weak and every other issue across your whole site.
Scan my site free