Digital exposure report
vercel.com
Good shape, with a few gaps worth closing this quarter.
Scanned: 2026-11-15 19:22 UTC
Full coverage: every applicable check was assessed.
What to do first
- 1.
Turn on DNS signing for your domain
Signing helps resolvers detect forged answers about your domain.
Who can fix it: Your domain registrar or DNS provider
How to verify after the fix
dig +short DS vercel.com
- 2.
Limit what scripts your pages are allowed to run
This adds one layer of protection against injected scripts.
Who can fix it: Your website developer or web host
How to verify after the fix
curl -sIL https://vercel.com/ | grep -i "Content-Security-Policy"
A starting point, not a security guarantee.
What this grade means
- Tested hostname
- vercel.com
- Website request
- GET https://vercel.com/
- Scan time
- 2026-11-15 19:22:35 UTC
- Grading method
- Version 2How grading works
- Unverified or excluded checks
- None. Every applicable check was assessed.
This is a snapshot of the public configuration checks listed in this report. It does not verify the site's owner, business legitimacy, application security, or absence of vulnerabilities. It is not a security certification.
Score by category
| Email security | 27/30 | Spoofing email from this domain is hard. |
| Encryption & certificate | 25/25 | Traffic to the site is encrypted and the certificate is valid. |
| Browser protections | 25/30 | The site instructs browsers to block common attacks. |
| DNS infrastructure | 8/15 | The domain's infrastructure works, but recommended hardening is missing. |
Fix priorities
- 1.MediumDNSSEC — signed DNS records · Hardening gap+7
- 2.LowPermissions-Policy · Hardening gap+2
- 3.LowCSP — protection from script injection · Hardening gap+3
Findings
SPF — who may send mail for the domain
Passed · Severity: OK · 9/10An authorized sender list is defined; mail from other servers is flagged as suspicious.
~all (softfail) — acceptable when combined with enforced DMARC. 8 of 10 DNS lookups.
v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com include:mktomail.com include:amazonses.com include:sendgrid.net include:_spf.salesforce.com include:spf.mtasv.net ~all
$ dig +short TXT vercel.com
DMARC — anti-spoofing policy
Passed · Severity: OK · 13/15Forged email in the company's name is sent to the spam folder.
Policy p=quarantine. p=quarantine — consider moving to p=reject.
v=DMARC1; p=quarantine; rua=mailto:df9481016e14030@rep.dmarcanalyzer.com; ruf=mailto:df9481016e14030@for.dmarcanalyzer.com; pct=100; fo=1;
$ dig +short TXT _dmarc.vercel.com
DKIM — digital signature on email
Passed · Severity: OK · 5/5A DKIM public key is published. On its own this doesn't prove outgoing mail is signed or aligned with your From domain.
DKIM public key found for selector: google, k1, s1, s2. Confirm signing with dkim=pass in a sent message's Authentication-Results.
google._domainkey: v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsou7TgAHoj7/WRCSj/RG7eZJ1C1q… k1._domainkey: k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbNrX2cY/GUKIFx2G/1I00ftdAj713WP9AQ1xir85i8… s1._domainkey: k=rsa; t=s; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq/CkVBYTyeVrraD/ctebkJcujuUsH3n/… s2._domainkey: k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZSr5e+71HBlEfSZcMJqrjf4bGHk57thJ6w0xI…
$ dig +short TXT google._domainkey.vercel.com
MX — inbound mail routing
Passed · Severity: OK · unscoredMail exchangers are published for the domain.
5 MX record(s). This shows where inbound mail is routed, not whether mail is sent from the domain.
1 aspmx.l.google.com 5 alt1.aspmx.l.google.com 5 alt2.aspmx.l.google.com 10 aspmx2.googlemail.com 10 aspmx3.googlemail.com
$ dig +short MX vercel.com
HTTPS available
Passed · Severity: OK · 10/10The site loads over an encrypted connection.
https://vercel.com/ returned HTTP 200 (final URL: https://vercel.com/). Client-side certificate validation passed.
HTTP 200 Final URL: https://vercel.com/
$ curl -sIL https://vercel.com/
HTTP → HTTPS redirect
Passed · Severity: OK · 7/7Visitors arriving at an unencrypted address are automatically sent to the secure version.
HTTP 308 → https://vercel.com/
HTTP 308 Location: https://vercel.com/
$ curl -sI http://vercel.com/ | grep -iE "^(HTTP|location)"
SSL/TLS certificate validity
Passed · Severity: OK · 8/8The certificate was accepted by a validating TLS client at scan time.
Live TLS handshake succeeded. Latest issuance in CT logs: Let's Encrypt, expiring 2026-12-24 (38 days). CT shows issued certificates, not necessarily the one served — confirm dates with the verify command.
Live TLS handshake: certificate accepted CT logs (context only, not scored): Issuer: Let's Encrypt Valid from: 2026-09-25 Valid until: 2026-12-24 Names: *.vercel.com, vercel.com Based on Certificate Transparency logs; may not reflect the certificate currently served.
$ echo | openssl s_client -connect vercel.com:443 -servername vercel.com 2>/dev/null | openssl x509 -noout -issuer -dates
HSTS — enforce encryption in the browser
Passed · Severity: OK · 8/8Browsers are told to always use an encrypted connection to the site.
max-age=31536000 (365 days), includeSubDomains, preload. ≥ 180 days recommended.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
$ curl -sIL https://vercel.com/ | grep -i "Strict-Transport-Security"
CSP — protection from script injection
Needs attention · Severity: Low · Hardening gap · 5/8A script policy exists, but it's permissive and offers only partial protection.
script-src includes: 'unsafe-inline', 'unsafe-eval' — weakens XSS protection.
Content-Security-Policy: default-src 'self' vercel.com *.vercel.com *.vercel.sh vercel.live assets.vercel.com wss://*.vercel.com *.codesandbox.io https://www.youtube-nocookie.com;script-src 'self' vercel.com *.vercel.com *.vercel.sh vercel.live va.vercel-scripts.com chrome-extension://* https://vercel.live assets.vercel.com wss://*.vercel.com *.codesandbox.io https://www.youtube-nocookie.com 'inline-speculation-rules' 'unsafe-eval' 'unsafe-inline' blob: https://www.youtube.com cdp.vercel.com https://*.fides-cdn.ethyca.com;style-src 'self' vercel.com *.vercel.com *.vercel.sh vercel.live https://vercel.live 'unsafe-inline' assets.vercel.com wss://*.vercel.com *.codesandbox.io https://www.youtube-nocookie.com;img-src 'self' blob: data: vercel.com *.vercel.sh vercel.live https://vercel.live https://vercel.com https://assets.vercel.com assets.vercel.com https://github.com/haydenbleasel.png https://github.com/openai.png https://avatars.githubusercontent.com/u/4142719 https://avatars.githubusercontent.com/u/14957082 https://cdn.raster.app https://images.ctfassets.net https://7nyt0uhk7sse4zvn.public.blob.vercel-storage.com https://lishhsx6kmthaacj.public.blob.vercel-storage.com https://mxpmvzzjgr9hogon.public.blob.vercel-storage.com https://image.mux.com https://fvqcrhkhgatlyl2m.public.blob.vercel-storage.com https://k2mkucxia43oc7fa.public.blob.vercel-storage.com https://py8fhxnkzwtsqdo9.public.blob.vercel-storage.com https://sefv1owa9ikadhua.public.blob.vercel-storage.com https://0plb106nqtqzwjym.public.blob.vercel-storage.com https://i.ytimg.com pbs.twimg.com https://*.litix.io;media-src 'self' vercel.com *.vercel.com *.vercel.sh vercel.live blob: data: assets.vercel.com wss://*.vercel.com *.codesandbox.io https://www.youtube-nocookie.com https://eleven-public-cdn.elevenlabs.io https://lishhsx6kmthaacj.public.blob.vercel-storage.com https://fvqcrhkhgatlyl2m.public.blob.vercel-storage.com https://sefv1owa9ikadhua.public.blob.vercel-storage.com https://0plb106nqtqzwjym.public.blob.vercel-storage.com https://video.twimg.com https://*.mux.com https://*.litix.io https://ejiidnob33g9ap1r.public.blob.vercel-storage.com;connect-src data: 'self' vercel.com *.vercel.com *.vercel.sh vercel.live https://vercel.live wss://ws-us3.pusher.com wss://*.vercel.com *.codesandbox.io assets.vercel.com https://www.youtube-nocookie.com https://*.contentful.com https://lishhsx6kmthaacj.public.blob.vercel-storage.com https://fvqcrhkhgatlyl2m.public.blob.vercel-storage.com https://sefv1owa9ikadhua.public.blob.vercel-storage.com https://0plb106nqtqzwjym.public.blob.vercel-storage.com www.vercel-status.com *.ingest.sentry.io *.ingest.us.sentry.io react-tweet.vercel.app https://*.mux.com https://*.litix.io https://sockjs-us3.pusher.com https://ejiidnob33g9ap1r.public.blob.vercel-storage.com https://unpkg.com/@rive-app/ https://cdn.jsdelivr.net/npm/@rive-app/ cdp.vercel.com https://*.fides-cdn.ethyca.com;font-src 'self' vercel.live https://vercel.live https://assets.vercel.com *.vercel.sh vercel.com https://lishhsx6kmthaacj.public.blob.vercel-storage.com https://k2mkucxia43oc7fa.public.blob.vercel-storage.com;frame-src 'self' vercel.com *.vercel.com *.vercel.sh vercel.live *.codesandbox.io https://www.youtube-nocookie.com assets.vercel.com wss://*.vercel.com;worker-src 'self' blob:;frame-ancestors 'self' https://vercel.com https://app.contentful.com https://*.contentful.com https://*.vercel.sh https://*.vercel.com https://claude.ai https://37a30e4bfcf9dbabb336cfdd75e343b1.claudemcpcontent.com https://ac6127567836815e3d8be55c5ee20681.claudemcpcontent.com;
$ curl -sIL https://vercel.com/ | grep -i "Content-Security-Policy"
- First publish Content-Security-Policy-Report-Only — it blocks nothing, it only reports.
- Collect violations for a week or two and tune the policy to your legitimate sources.
- Switch to the Content-Security-Policy header and replace 'unsafe-inline' with a nonce or hash.
/* Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
Safety: This change is made in your server/CDN settings. Test on staging before production. An overly strict CSP will break scripts — that's why you start in Report-Only mode.
Clickjacking protection
Passed · Severity: OK · 5/5The site can't be embedded by foreign sites.
X-Frame-Options: DENY frame-ancestors 'self' https://vercel.com https://app.contentful.com https://*.contentful.com https://*.vercel.sh https://*.vercel.com https://claude.ai https://37a30e4bfcf9dbabb336cfdd75e343b1.claudemcpcontent.com https://ac6127567836815e3d8be55c5ee20681.claudemcpcontent.com
X-Frame-Options: DENY CSP frame-ancestors: 'self' https://vercel.com https://app.contentful.com https://*.contentful.com https://*.vercel.sh https://*.vercel.com https://claude.ai https://37a30e4bfcf9dbabb336cfdd75e343b1.claudemcpcontent.com https://ac6127567836815e3d8be55c5ee20681.claudemcpcontent.com
$ curl -sIL https://vercel.com/ | grep -i "X-Frame-Options"
X-Content-Type-Options
Passed · Severity: OK · 4/4The browser won't guess file types in a way that could execute code.
nosniff is set.
X-Content-Type-Options: nosniff
$ curl -sIL https://vercel.com/ | grep -i "X-Content-Type-Options"
Referrer-Policy
Passed · Severity: OK · 3/3Internal URLs don't leak to external sites.
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: origin-when-cross-origin
$ curl -sIL https://vercel.com/ | grep -i "Referrer-Policy"
Permissions-Policy
Needs attention · Severity: Low · Hardening gap · 0/2Access to sensitive features like the camera and location isn't restricted.
Missing Permissions-Policy header.
Permissions-Policy: (missing)
$ curl -sIL https://vercel.com/ | grep -i "Permissions-Policy"
- Disable browser features the site doesn't need (camera, microphone, geolocation).
/* Permissions-Policy: camera=(), microphone=(), geolocation=()
Safety: This change is made in your server/CDN settings. Test on staging before production. Don't disable a feature the site actually uses.
Software version disclosure
Passed · Severity: OK · unscoredThe server doesn't disclose software versions.
No version numbers found in the Server / X-Powered-By headers.
server: cloudflare x-powered-by: Next.js, Payload
$ curl -sIL https://vercel.com/ | grep -iE "^(server|x-powered-by)"
DNSSEC — signed DNS records
Needs attention · Severity: Medium · Hardening gap · 0/7The domain's records aren't signed, so in some scenarios users could be redirected to a forged server.
No DS record is published at the parent zone, so there's no DNSSEC chain of trust for this zone.
AD = false DS vercel.com: NODATA
$ dig +short DS vercel.com
- Enable DNSSEC at your DNS provider (one click at most providers).
- Copy the DS record your provider generates to your domain registrar.
- Wait for propagation and verify with DNSViz.
dig +dnssec vercel.com SOA delv vercel.com
Safety: DNS changes are made only at your DNS provider. This tool only reads public data and changes nothing on the domain. A wrong DS record at the registrar will make the domain stop resolving — copy it exactly from the provider.
CAA — who may issue certificates
Passed · Severity: OK · 5/5Only authorized certificate authorities can issue certificates for the domain.
CAA records: 0 issue "letsencrypt.org" | 0 issue "globalsign.com" | 0 issue "sectigo.com" | 0 issue "pki.goog"
0 issue "letsencrypt.org" 0 issue "globalsign.com" 0 issue "sectigo.com" 0 issue "pki.goog"
$ dig +short CAA vercel.com
DNS server redundancy
Passed · Severity: OK · 3/3The domain is served by several DNS servers, so one server failing won't take it down.
2 NS servers.
ns1.vercel-dns.com ns2.vercel-dns.com
$ dig +short NS vercel.com
Indicative alignment
Best-practice mapping of public findings to common frameworks. Passive scanning tests public configuration only; it doesn't prove compliance or a violation.
- Google & Yahoo sender rulesNo gaps observed
- PCI DSS v4.01 observed gaps
- NIS2 / vendor due diligence1 observed gaps
- SOC 2 / ISO 27001 baseline1 observed gaps
Indicative alignment only, based on public configuration. It doesn't establish whether a framework applies to you, and it isn't legal advice, an audit or a certification.
Public DNS records
| A | vercel.com | 64.239.123.1 | 64.239.109.1 |
| AAAA | vercel.com | — |
| MX | vercel.com | 1 aspmx.l.google.com | 5 alt1.aspmx.l.google.com | 5 alt2.aspmx.l.google.com | 10 aspmx2.googlemail.com | 10 aspmx3.googlemail.com |
| NS | vercel.com | ns1.vercel-dns.com | ns2.vercel-dns.com |
| TXT | vercel.com | google-site-verification=J9NjkBE_oybWpa-OHAkV0VjSjIvIBMfp83tdsQCzxK8 | v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com include:mktomail.com include:amazonses.com include:sendgrid.net include:_spf.salesforce.com include:spf.mtasv.net ~all | doordash-verification=kA2ozHfLLU2lEpqQVmJO7DRKwZArKO | ahrefs-site-verification_774361e47cac589ba5ff743f90399b1e5792980bd22f0f4c56bfb1eaf571a7e0 | stripe-verification=8ff198a026ba2920fd8f4e45bcc499573d1a342596c6f0f18f3eae226bb8173a | apple-domain-verification=80dYVZTf3bf7C8H5 | ZOOM_verify_iAqiiWW1TdK-GwbJI7qn1g | stripe-verification=923c7c6074dc94f4b22136b4236a1dc5433a3276b5fc981799771f781d7a6058 | stripe-verification=69ef655819f74eb6f93f9f7388273112ee8c2439b35502785239d3bf076af574 | MS=ms81951275 | mixpanel-domain-verify=3069307c-7d73-4581-880a-1b61267d06cb | C575019D1B | SFMC-JchuOOQGseLonwnFdKq2xDV5UnqnvJRjMKyh7rwz | loom-verification=5698251381 | notion_verify_82^tYP%}6Q65dbszXu>V?@~stLe]Cm3Dmn8rqe7DZgT1m3o!+PyEbv+Jx04rb%v67BtbG> | docusign=589bb007-2665-4084-b839-9874df0da0cf | docusign=8a27eabb-2ba5-4820-a148-36b0ac9f592b | h1-domain-verification=DmNbUeH65JZUKDLixLxWCEfvFiJcCP6sSR3ymQ3MamqmMN2K | _saml-domain-challenge=1b4981f2-76a2-401f-8f09-a261a97099af | whimsical=34ebc92242a47d7e9a6ae5f42f60ad80fccbf094 | _visual-studio-marketplace-vercel.vercel.com:4fe5630e-b256-4d57-9e03-88abeab96b37 | openai-domain-verification=dv-RrobMXwsu06yBo22YAOsZdxP | stripe-verification=e6c56a2c1de7a8a001d69362c33e8ee39536606dae859f9e5fef982ecd102696 | stripe-verification=D353787AECFE3E8DF14A07DF171A7A0529DB83B8D7CD0C5FD89A9C42A255E38E | cursor-domain-verification-f3eygw=YMP9VK0KY2xhJrRKFMpkkyhv1 | _k57cawuboit4hp2k6rv5bjbxuvkznwp | anthropic-domain-verification-08hmep=rIoWryrKgeXgTzXsASQqNA99q | remote-domain-verification=8be9341d-2ab7-4de7-a26f-68c6af2b30ac | box-domain-verification=968b9e475ce3f9a3bf3a2436eed2cd67082d8312f5e6559eaa7e1d1514fe03aa | v=MCPv1; k=ed25519; p=53H31Wxaf08fBk8IOIjlWrxy4pK9KGrLRVSB8WSu8rY= | serval-domain-verification-40ct5x=VbdjZnWHkRJwpBE0IwXuriy03 | amp-by-sourcegraph-domain-verification-st5f9e=172nCAgVw3POSEMQGXOv24XWO | plain-domain-verification-vkhaan=eY1PYorYjiTuIxRpcsIDKi19X | carta-domain-verification-wnnawd=jFGjeToDS0JE6iRBOq79AjxaD | gather-domain-verification=911fa583-4323-4bc7-9a43-a29ae4a6003e | planet-scale-domain-verification-hx2k58=gjkMML1gwBAfWtiNyHI4qMBL1 |
| TXT | _dmarc.vercel.com | v=DMARC1; p=quarantine; rua=mailto:df9481016e14030@rep.dmarcanalyzer.com; ruf=mailto:df9481016e14030@for.dmarcanalyzer.com; pct=100; fo=1; |
| CAA | vercel.com | 0 issue "letsencrypt.org" | 0 issue "globalsign.com" | 0 issue "sectigo.com" | 0 issue "pki.goog" |
| DS | vercel.com | — |