Improving a website security score is rarely about adding more of everything. SecScan grades what an external visitor can observe about your site, and the model is weighted so that a single serious problem outranks a long list of minor ones.
That means the fastest way to a better grade is to work in order of severity: clear anything that caps the grade first, then raise the average. This guide walks through that order step by step, with a re-scan after each change so you can confirm the gain rather than guess at it.
For the site owner (plain English)
If the letter grade looks discouraging, don’t panic — it is a to-do list, not a verdict. The key thing to understand is that one serious problem can hold the whole grade down no matter how good everything else is, so the goal is to fix your single worst issue first, not to do a little of everything. There is no rush, but a low grade usually points at something cheap to fix — a private file left in the open, or an expired certificate. The simplest path: run the free scan, look at the top finding it flags, hand that one item to whoever maintains your site, then re-scan to watch the grade move. Work down from there, one issue at a time.
How does the score work (quick recap)?
SecScan's score is a weighted blend of four observable categories. Headers contribute roughly 30%, TLS configuration roughly 30%, exposed files roughly 25%, and an information-only fingerprint of the server and technology stack the remaining ~15%. Each category starts at 100 points and loses points as issues are found, scaled by how serious each issue is. The weighted result is then mapped to a letter grade from A to F.
Two hard caps sit on top of that average and they are the most important thing to understand. Any single critical finding caps the whole grade at F. Any single high finding caps it at C.
A cap overrides the average entirely: it does not matter how clean the other categories are, the cap holds until the underlying finding is cleared. That is why order matters more than volume. For the full model, see the website security guide.
Step 1 — Which exposed files cause the F cap?
Exposed files are the category most likely to produce a critical finding, and a critical finding caps your grade at F. Before touching anything else, confirm that no sensitive paths are reachable over the public internet. The usual offenders are version-control directories, environment files, and stray backups.
- A publicly readable
.gitdirectory, which can let anyone reconstruct your source code and its history. - An
.envfile or similar dotfile exposing database credentials, API keys, or signing secrets. - Backup and archive files such as
backup.zip,site.sql, or editor leftovers likeconfig.php.bak.
Remove these from the document root or block them at the web server. With nginx you can deny access to dotfiles and common backup patterns:
location ~ /\.(?!well-known) {
deny all;
}
location ~* \.(bak|sql|zip|tar|gz|old|swp)$ {
deny all;
}Removing the file is necessary but not sufficient. If a secret was ever served publicly, assume it is compromised and rotate it — issue new API keys, change database passwords, and invalidate any leaked tokens.
A deleted .env does not un-leak the values that were inside it. Once no critical exposure remains, the F cap lifts and the rest of your work can actually move the grade.
Step 2 — How do you fix TLS (the C cap)?
With criticals cleared, the next ceiling is the high-severity cap at C, and the most common cause is a TLS problem. Transport security is worth roughly 30% of the score on its own, so it pulls double duty: it can cap the grade and it is heavily weighted in the average.
Use a valid, trusted certificate
The certificate must be issued by a trusted certificate authority, match the hostname, and be within its validity window. Expired, self-signed, or mismatched certificates typically register as high findings. A free automated certificate from Let's Encrypt with auto-renewal removes the most common cause — an expired certificate nobody remembered to renew.
Disable obsolete protocols
Serve TLS 1.2 and TLS 1.3 only. Disable TLS 1.0 and TLS 1.1, which are deprecated and weaken the configuration. On most modern servers this is a one-line change to the enabled protocol list. After updating, confirm the certificate chain and protocol support with the SSL checker before moving on.
Step 3 — Which security headers climb you to A?
With both caps cleared, the grade is now governed by the weighted average, and security headers are the most direct way to climb from C toward A. They are also low risk to add, since most are response headers rather than code changes. The OWASP Secure Headers Project is the reference for recommended values. Focus on the core set first:
Strict-Transport-Security(HSTS) — forces HTTPS for future visits and prevents protocol downgrade.Content-Security-Policy(CSP) — restricts which sources can load scripts and other resources, mitigating injection.X-Content-Type-Options: nosniff— stops the browser from second-guessing declared content types.X-Frame-Optionsor a CSPframe-ancestorsdirective — prevents clickjacking by controlling who can frame your pages.
A reasonable starting point for an nginx server:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;Roll CSP out carefully — start in report-only mode if your pages load third-party assets, so you do not break legitimate resources while tightening the policy. For directive-by-directive guidance see the security headers guide, and verify what is live with the security headers checker.
Step 4 — Re-scan after each change
Treat the scanner as your feedback loop, not a final exam. Re-run a scan after each change rather than batching everything and hoping.
Because the caps work the way they do, a single re-scan tells you whether a fix actually moved the grade or whether another cap is still holding it down. Re-scanning after the exposed-files step, then again after TLS, then after headers, makes the cause and effect obvious and stops you from optimising a category that a cap is currently overriding.
Made a change? Re-run the scan to confirm the grade moved.
Check your A–F score →.git directory — caps the grade at F no matter how clean everything else is. You could earn a perfect headers score and a flawless TLS configuration and still see an F on the report. Clear the cap first, then optimise the average. Working in any other order wastes effort on gains the cap is hiding.The pattern holds at every level: identify the highest-severity issue, fix it, re-scan, and repeat. Severity-first beats volume-first every time, because the grade is built to reward closing your worst problem before polishing your best category. For a printable working list, use the website security checklist, and for the underlying model in full, return to the website security guide.