Serve security.txt as text/plain with utf-8 on Vercel
Why it matters
RFC 9116 requires the file to be sent as text/plain in utf-8. Tools may reject it if the server labels it as html, binary or another charset.
The fix
- Serve the file as a static file at public/.well-known/security.txt so Vercel sets the type from the extension. A route, rewrite or middleware that answers that path with html is the usual cause.
- If you need to force the type, add a header rule to vercel.json, redeploy and check the response again.
vercel.json
{ "headers": [ { "source": "/.well-known/security.txt", "headers": [ { "key": "Content-Type", "value": "text/plain; charset=utf-8" } ] } ] }
Related
- Reported by the security.txt check
- Publish a security.txt file
- Serve security.txt from /.well-known/
- Serve security.txt over https
- Add a Contact line to security.txt
- Fix the Contact value in security.txt
- Add an Expires line to security.txt
- Use an RFC 3339 date in the Expires line
- Renew the expired security.txt
- Renew security.txt before it expires
- Shorten the security.txt Expires date
- Fix repeated or insecure fields in security.txt
- Make the Canonical line match where the file is served
Scan your domain to see whether this applies to you.