<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Håkan Fägnell</title>
    <description>The latest articles on DEV Community by Håkan Fägnell (@hkan_fgnell_322b4aba3d6).</description>
    <link>https://dev.to/hkan_fgnell_322b4aba3d6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4006570%2F4c0347f7-187a-4a19-8b8f-b0ea6540060a.jpg</url>
      <title>DEV Community: Håkan Fägnell</title>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hkan_fgnell_322b4aba3d6"/>
    <language>en</language>
    <item>
      <title>SPF Record Checker: How to Test, Read, and Fix Your SPF Record</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Mon, 20 Jul 2026 07:17:43 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/spf-record-checker-how-to-test-read-and-fix-your-spf-record-4313</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/spf-record-checker-how-to-test-read-and-fix-your-spf-record-4313</guid>
      <description>&lt;p&gt;Email is still the number-one way attackers break into organisations — and the cheapest trick in the book is pretending to be you. The FBI's Internet Crime Complaint Center logged &lt;strong&gt;193,407 phishing and spoofing complaints in 2024, more than any other crime type, and $2.77 billion lost to business email compromise&lt;/strong&gt; (&lt;a href="https://www.ic3.gov/AnnualReport/Reports/2024_IC3Report.pdf" rel="noopener noreferrer"&gt;IC3 2024 Annual Report&lt;/a&gt;). The first line of defence against someone forging your domain is a correctly published &lt;strong&gt;SPF record&lt;/strong&gt; — and the fastest way to know yours is healthy is to run it through an &lt;strong&gt;SPF record checker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This guide explains what SPF is, how to read a record line by line, how to check it manually and with a free tool, and the exact errors a checker catches before they wreck your deliverability.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick check:&lt;/strong&gt; FortifyNet's free 60-second scan validates your SPF, DKIM and DMARC together. &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;Run a free scan&lt;/a&gt; and see your email-authentication score instantly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is an SPF record?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SPF (Sender Policy Framework)&lt;/strong&gt; is an email-authentication standard, defined in &lt;a href="https://datatracker.ietf.org/doc/html/rfc7208" rel="noopener noreferrer"&gt;RFC 7208&lt;/a&gt;, that lets a domain owner publish the list of mail servers allowed to send email &lt;strong&gt;on behalf of their domain&lt;/strong&gt;. It lives in DNS as a single &lt;strong&gt;TXT record&lt;/strong&gt; that begins with &lt;code&gt;v=spf1&lt;/code&gt;. When a receiving server accepts a message, it looks up that record and checks whether the sending server's IP address is authorised.&lt;/p&gt;

&lt;p&gt;A typical record looks like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;v=spf1 include:_spf.google.com include:sendgrid.net ip4:198.51.100.10 ~all&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;One crucial nuance: SPF authenticates the &lt;strong&gt;envelope sender&lt;/strong&gt; (the hidden &lt;code&gt;MAIL FROM&lt;/code&gt; / Return-Path address), &lt;strong&gt;not&lt;/strong&gt; the &lt;code&gt;From:&lt;/code&gt; address your recipients actually see. That gap is exactly why SPF needs DMARC alongside it — more on that below.&lt;/p&gt;

&lt;p&gt;Related guides: &lt;a href="https://fortifynet.com/ArticleDetail?slug=vad-ar-dmarc&amp;amp;lang=en" rel="noopener noreferrer"&gt;What is DMARC?&lt;/a&gt; · &lt;a href="https://fortifynet.com/ArticleDetail?slug=dns-security-configuration&amp;amp;lang=en" rel="noopener noreferrer"&gt;DNS security configuration&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you need an SPF record checker
&lt;/h2&gt;

&lt;p&gt;Since &lt;strong&gt;February 2024, Google and Yahoo have required SPF for every sender&lt;/strong&gt;, plus full SPF + DKIM + DMARC for anyone sending 5,000 or more messages a day to their users. &lt;strong&gt;Microsoft began enforcing the same rules in May 2025&lt;/strong&gt; (&lt;a href="https://redsift.com/guides/bulk-email-sender-requirements" rel="noopener noreferrer"&gt;Red Sift&lt;/a&gt;). As of November 2025, Gmail rejects non-compliant bulk mail outright with &lt;code&gt;550&lt;/code&gt; errors instead of deferring it. A single typo in your SPF record can now mean your invoices, password resets and newsletters &lt;strong&gt;bounce&lt;/strong&gt; — not land in spam, but bounce.&lt;/p&gt;

&lt;p&gt;A checker matters because SPF fails &lt;strong&gt;silently&lt;/strong&gt;. Your mail keeps flowing until the day a receiver decides your record is broken — and then it doesn't. Running a checker turns those invisible problems into a clear pass or fail you can act on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1555949963-aa79dcee981c%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1200%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1555949963-aa79dcee981c%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1200%26q%3D80" alt="Lines of DNS and SPF configuration code on a developer's screen" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read your SPF record
&lt;/h2&gt;

&lt;p&gt;An SPF record is a list of &lt;strong&gt;mechanisms&lt;/strong&gt; (which senders are allowed) and &lt;strong&gt;qualifiers&lt;/strong&gt; (what to do with everyone else).&lt;/p&gt;

&lt;p&gt;Common mechanisms are &lt;code&gt;ip4&lt;/code&gt; / &lt;code&gt;ip6&lt;/code&gt; (a specific address or range), &lt;code&gt;a&lt;/code&gt; (the domain's A record), &lt;code&gt;mx&lt;/code&gt; (its mail servers), &lt;code&gt;include&lt;/code&gt; (delegate to another domain's SPF, such as your email provider) and &lt;code&gt;all&lt;/code&gt; (matches everything, always placed last).&lt;/p&gt;

&lt;p&gt;The qualifier in front of &lt;code&gt;all&lt;/code&gt; is the most important character in the entire record:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Qualifier&lt;/th&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;SPF result&lt;/th&gt;
&lt;th&gt;What receivers typically do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pass&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Authorised&lt;/td&gt;
&lt;td&gt;Deliver normally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fail (hardfail)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-all&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Not authorised&lt;/td&gt;
&lt;td&gt;Reject the message&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Softfail&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~all&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Probably not authorised&lt;/td&gt;
&lt;td&gt;Accept, but mark as suspicious&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neutral&lt;/td&gt;
&lt;td&gt;&lt;code&gt;?all&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No assertion&lt;/td&gt;
&lt;td&gt;Deliver; no opinion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Best practice in 2026 is to pair &lt;strong&gt;&lt;code&gt;~all&lt;/code&gt; (softfail)&lt;/strong&gt; with a &lt;strong&gt;DMARC &lt;code&gt;p=reject&lt;/code&gt;&lt;/strong&gt; policy. M3AAWG and most deliverability teams now recommend this combination because DMARC becomes the real enforcement layer, while softfail avoids accidentally blocking a forgotten legitimate sender (&lt;a href="https://www.valimail.com/resources/guides/email-security-best-practices/spf-softfail-vs-hardfail/" rel="noopener noreferrer"&gt;Valimail&lt;/a&gt;). Never publish &lt;code&gt;+all&lt;/code&gt; — it authorises the entire internet to send as you.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check your SPF record (step by step)
&lt;/h2&gt;

&lt;p&gt;You can inspect any domain's SPF record yourself from a terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS / Linux:&lt;/strong&gt; &lt;code&gt;dig TXT example.com +short&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; &lt;code&gt;nslookup -type=TXT example.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Look for the line that starts with &lt;code&gt;v=spf1&lt;/code&gt;. If you see two of them, that is already a problem (see below). Reading the raw record tells you what is published, but it will not count DNS lookups or flag policy mistakes — that is where a dedicated checker earns its keep.&lt;/p&gt;

&lt;p&gt;To check SPF, DKIM and DMARC in a single pass, &lt;strong&gt;&lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;run FortifyNet's free scan&lt;/a&gt;&lt;/strong&gt;: enter your domain and you will get each record parsed, the DNS-lookup count, and a prioritised list of fixes in about a minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10-DNS-lookup limit (the error most checkers catch)
&lt;/h2&gt;

&lt;p&gt;This is the single most common SPF failure, and it stays invisible until it bites. RFC 7208 states that an SPF evaluation &lt;strong&gt;may trigger at most 10 DNS lookups&lt;/strong&gt;. The &lt;code&gt;include&lt;/code&gt;, &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;mx&lt;/code&gt;, &lt;code&gt;ptr&lt;/code&gt; and &lt;code&gt;exists&lt;/code&gt; mechanisms and the &lt;code&gt;redirect&lt;/code&gt; modifier each count; &lt;code&gt;ip4&lt;/code&gt;, &lt;code&gt;ip6&lt;/code&gt; and &lt;code&gt;all&lt;/code&gt; do not. Go over 10 and the receiver returns a &lt;strong&gt;PermError&lt;/strong&gt;, which fails SPF for &lt;em&gt;every&lt;/em&gt; message you send (&lt;a href="https://dmarcly.com/blog/spf-permerror-too-many-dns-lookups-when-spf-record-exceeds-10-dns-lookup-limit" rel="noopener noreferrer"&gt;DMARCLY&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;There is a quieter second cap too: a maximum of &lt;strong&gt;2 "void" lookups&lt;/strong&gt; (mechanisms that resolve to nothing). A dead &lt;code&gt;include&lt;/code&gt; pointing at a discontinued vendor can tip you over it.&lt;/p&gt;

&lt;p&gt;It is easy to breach 10 lookups without realising. Each &lt;code&gt;include:&lt;/code&gt; for a SaaS vendor (Google, Microsoft 365, a CRM, a help desk, a marketing platform) can itself contain nested includes, so three or four vendors is often enough. The fix is "SPF flattening": replace nested includes with the IP ranges they resolve to, or consolidate vendors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common SPF errors an SPF record checker flags
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the checker finds&lt;/th&gt;
&lt;th&gt;Result it triggers&lt;/th&gt;
&lt;th&gt;How to fix it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;More than 10 DNS lookups&lt;/td&gt;
&lt;td&gt;PermError&lt;/td&gt;
&lt;td&gt;Flatten or remove &lt;code&gt;include:&lt;/code&gt; entries; consolidate senders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;More than 2 void lookups&lt;/td&gt;
&lt;td&gt;PermError&lt;/td&gt;
&lt;td&gt;Delete includes, &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;mx&lt;/code&gt; that resolve to nothing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two or more SPF records&lt;/td&gt;
&lt;td&gt;PermError&lt;/td&gt;
&lt;td&gt;Merge everything into &lt;strong&gt;one&lt;/strong&gt; &lt;code&gt;v=spf1&lt;/code&gt; TXT record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A string over 255 characters&lt;/td&gt;
&lt;td&gt;Invalid / truncated record&lt;/td&gt;
&lt;td&gt;Split into multiple quoted strings inside the same TXT record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;+all&lt;/code&gt; present&lt;/td&gt;
&lt;td&gt;Passes every forgery&lt;/td&gt;
&lt;td&gt;Replace with &lt;code&gt;~all&lt;/code&gt; or &lt;code&gt;-all&lt;/code&gt; immediately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No &lt;code&gt;all&lt;/code&gt; mechanism&lt;/td&gt;
&lt;td&gt;Ambiguous policy&lt;/td&gt;
&lt;td&gt;End the record with &lt;code&gt;~all&lt;/code&gt; (or &lt;code&gt;-all&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The email-authentication gap, in one chart
&lt;/h3&gt;

&lt;p&gt;Most domains still get this wrong. Of 73.3 million domains analysed in December 2025, &lt;strong&gt;83.9% had no DMARC record at all&lt;/strong&gt; and only &lt;strong&gt;2.5% enforced &lt;code&gt;p=reject&lt;/code&gt;&lt;/strong&gt; — meaning the vast majority can be spoofed with little resistance (&lt;a href="https://easydmarc.com/blog/ebook/easydmarc-dmarc-adoption-report-2025/" rel="noopener noreferrer"&gt;DMARC adoption research, 2025&lt;/a&gt;). SPF is the foundation that makes the rest possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%3Fw%3D720%26h%3D400%26c%3D%257Btype%253A%2527bar%2527%252Cdata%253A%257Blabels%253A%255B%2527No%2520DMARC%2520record%2527%252C%2527Monitoring%2520only%2520%2528p%253Dnone%2520%252F%2520p%253Dquarantine%2529%2527%252C%2527Enforced%2520%2528p%253Dreject%2529%2527%255D%252Cdatasets%253A%255B%257Blabel%253A%2527Share%2520of%252073.3M%2520domains%2520%2528Dec%25202025%2529%2527%252Cdata%253A%255B83.9%252C12.4%252C2.5%255D%252CbackgroundColor%253A%255B%2527%2523e23d4b%2527%252C%2527%2523f0a020%2527%252C%2527%25231f9d63%2527%255D%257D%255D%257D%252Coptions%253A%257Bplugins%253A%257Blegend%253A%257Bdisplay%253Afalse%257D%252Ctitle%253A%257Bdisplay%253Atrue%252Ctext%253A%2527The%2520email-authentication%2520gap%253A%2520most%2520domains%2520are%2520unprotected%2527%257D%257D%252Cscales%253A%257By%253A%257Bticks%253A%257Bcallback%253Afunction%2528v%2529%257Breturn%2520v%252B%2527%2525%2527%257D%257D%252Ctitle%253A%257Bdisplay%253Atrue%252Ctext%253A%2527%2525%2520of%2520domains%2527%257D%257D%257D%257D%257D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%3Fw%3D720%26h%3D400%26c%3D%257Btype%253A%2527bar%2527%252Cdata%253A%257Blabels%253A%255B%2527No%2520DMARC%2520record%2527%252C%2527Monitoring%2520only%2520%2528p%253Dnone%2520%252F%2520p%253Dquarantine%2529%2527%252C%2527Enforced%2520%2528p%253Dreject%2529%2527%255D%252Cdatasets%253A%255B%257Blabel%253A%2527Share%2520of%252073.3M%2520domains%2520%2528Dec%25202025%2529%2527%252Cdata%253A%255B83.9%252C12.4%252C2.5%255D%252CbackgroundColor%253A%255B%2527%2523e23d4b%2527%252C%2527%2523f0a020%2527%252C%2527%25231f9d63%2527%255D%257D%255D%257D%252Coptions%253A%257Bplugins%253A%257Blegend%253A%257Bdisplay%253Afalse%257D%252Ctitle%253A%257Bdisplay%253Atrue%252Ctext%253A%2527The%2520email-authentication%2520gap%253A%2520most%2520domains%2520are%2520unprotected%2527%257D%257D%252Cscales%253A%257By%253A%257Bticks%253A%257Bcallback%253Afunction%2528v%2529%257Breturn%2520v%252B%2527%2525%2527%257D%257D%252Ctitle%253A%257Bdisplay%253Atrue%252Ctext%253A%2527%2525%2520of%2520domains%2527%257D%257D%257D%257D%257D" alt="Bar chart showing 83.9 percent of domains have no DMARC record, 12.4 percent monitor only, and 2.5 percent enforce p=reject as of December 2025" width="1440" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Source: DMARC adoption research, December 2025 (73.3M-domain sample). SPF feeds the DMARC checks shown here.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SPF best-practice checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Publish exactly &lt;strong&gt;one&lt;/strong&gt; &lt;code&gt;v=spf1&lt;/code&gt; TXT record per sending domain.&lt;/li&gt;
&lt;li&gt;Authorise every legitimate source: your mail host, marketing platform, CRM, ticketing system and any server that sends on your behalf.&lt;/li&gt;
&lt;li&gt;Keep total DNS lookups &lt;strong&gt;at or under 10&lt;/strong&gt;; flatten when you add vendors.&lt;/li&gt;
&lt;li&gt;End with &lt;strong&gt;&lt;code&gt;~all&lt;/code&gt;&lt;/strong&gt; and back it with DMARC &lt;code&gt;p=reject&lt;/code&gt; (or use &lt;code&gt;-all&lt;/code&gt; on parked, non-sending domains).&lt;/li&gt;
&lt;li&gt;Add SPF for &lt;strong&gt;subdomains and parked domains&lt;/strong&gt; too — attackers love unused ones. A domain that never sends mail should publish &lt;code&gt;v=spf1 -all&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check after every change&lt;/strong&gt; to your email vendors; SPF drifts as your stack changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SPF, DKIM and DMARC: the full picture
&lt;/h2&gt;

&lt;p&gt;SPF on its own is necessary but not sufficient. Three records work together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SPF&lt;/strong&gt; authorises sending servers (the envelope sender).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DKIM&lt;/strong&gt; cryptographically signs each message so it cannot be tampered with in transit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DMARC&lt;/strong&gt; ties SPF and DKIM back to the visible &lt;code&gt;From:&lt;/code&gt; domain (alignment), tells receivers what to do when authentication fails, and emails you reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need all three to satisfy Gmail, Yahoo and Microsoft — and to actually stop spoofing. Once your SPF passes, continue with &lt;a href="https://fortifynet.com/ArticleDetail?slug=vad-ar-dmarc&amp;amp;lang=en" rel="noopener noreferrer"&gt;our DMARC guide&lt;/a&gt;, and use the &lt;a href="https://fortifynet.com/ArticleDetail?slug=mxtoolbox-alternative&amp;amp;lang=en" rel="noopener noreferrer"&gt;MXToolbox alternative&lt;/a&gt; for ongoing DNS and mail-record checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How often should I check my SPF record?&lt;/strong&gt; After every change to your email providers, and at least once a quarter. SPF silently drifts as you add and drop SaaS tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I have two SPF records?&lt;/strong&gt; No. A domain must publish exactly one &lt;code&gt;v=spf1&lt;/code&gt; TXT record; two or more cause a PermError. Combine them into a single record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does SPF stop all spoofing?&lt;/strong&gt; No. SPF only checks the envelope sender, so attackers can still forge the visible &lt;code&gt;From:&lt;/code&gt; address. DMARC closes that gap by enforcing alignment — which is why you need both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between &lt;code&gt;~all&lt;/code&gt; and &lt;code&gt;-all&lt;/code&gt;?&lt;/strong&gt; &lt;code&gt;~all&lt;/code&gt; (softfail) tells receivers that unlisted senders are &lt;em&gt;probably&lt;/em&gt; unauthorised but to accept and flag them; &lt;code&gt;-all&lt;/code&gt; (hardfail) tells them to reject outright. Most senders use &lt;code&gt;~all&lt;/code&gt; plus DMARC enforcement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is a free SPF record checker accurate?&lt;/strong&gt; Yes. A good checker performs the same DNS resolution and lookup counting that a receiving mail server does. FortifyNet's scan also validates DKIM and DMARC in the same pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your SPF record now
&lt;/h2&gt;

&lt;p&gt;A broken SPF record is invisible until your email stops arriving — and with Gmail, Yahoo and Microsoft now rejecting unauthenticated mail outright, you cannot afford to guess. &lt;strong&gt;&lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;Run FortifyNet's free 60-second scan&lt;/a&gt;&lt;/strong&gt; to validate your SPF, DKIM and DMARC, count your DNS lookups and get a clear, prioritised fix list. No signup required.&lt;/p&gt;

</description>
      <category>security</category>
      <category>email</category>
      <category>spf</category>
      <category>dmarc</category>
    </item>
    <item>
      <title>Website Security Checklist: 12 Essential Steps for 2026</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Sat, 18 Jul 2026 08:23:00 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/website-security-checklist-12-essential-steps-for-2026-3f4e</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/website-security-checklist-12-essential-steps-for-2026-3f4e</guid>
      <description>&lt;h1&gt;
  
  
  Website Security Checklist: 12 Essential Steps for 2026
&lt;/h1&gt;

&lt;p&gt;Website breaches are no longer a big-company problem. According to &lt;a href="https://www.ibm.com/reports/data-breach" rel="noopener noreferrer"&gt;IBM's Cost of a Data Breach Report 2025&lt;/a&gt;, the global average breach now costs &lt;strong&gt;$4.44 million&lt;/strong&gt;, and in the United States the average hit a record &lt;strong&gt;$10.22 million&lt;/strong&gt;. Meanwhile, the &lt;a href="https://www.verizon.com/business/resources/reports/dbir/" rel="noopener noreferrer"&gt;Verizon 2025 Data Breach Investigations Report&lt;/a&gt; found that most intrusions still start with the basics: stolen credentials (22% of breaches), exploited vulnerabilities (20%, up 34% year over year) and phishing (16%).&lt;/p&gt;

&lt;p&gt;The good news: the majority of those entry points are closed by unglamorous, well-documented hygiene. This website security checklist walks you through 12 checks — from transport encryption and DNS to email authentication and dark-web exposure — roughly in priority order. Most sites can complete the quick wins in a single afternoon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1454165804606-c3d57bc86b40%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1600%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1454165804606-c3d57bc86b40%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1600%26q%3D80" alt="Laptop and notebook on a desk during a website security review" width="1600" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Protects against&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Enforce HTTPS everywhere&lt;/td&gt;
&lt;td&gt;Eavesdropping, session hijacking&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Monitor certificate expiry&lt;/td&gt;
&lt;td&gt;Outages, browser warnings&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Harden TLS configuration&lt;/td&gt;
&lt;td&gt;Protocol downgrade attacks&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Set security headers&lt;/td&gt;
&lt;td&gt;XSS, clickjacking&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Set up SPF, DKIM and DMARC&lt;/td&gt;
&lt;td&gt;Email spoofing, phishing&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Lock down DNS&lt;/td&gt;
&lt;td&gt;Hijacking, rogue certificates&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Patch CMS and plugins&lt;/td&gt;
&lt;td&gt;Known-vulnerability exploits&lt;/td&gt;
&lt;td&gt;Ongoing&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Enforce MFA and strong passwords&lt;/td&gt;
&lt;td&gt;Credential stuffing&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Automate and test backups&lt;/td&gt;
&lt;td&gt;Ransomware, data loss&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Add a WAF and rate limiting&lt;/td&gt;
&lt;td&gt;Bots, injection, brute force&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Monitor dark-web exposure&lt;/td&gt;
&lt;td&gt;Leaked credential reuse&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Monitor uptime and changes&lt;/td&gt;
&lt;td&gt;Silent failures, defacement&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  1. Enforce HTTPS on every page
&lt;/h2&gt;

&lt;p&gt;Every request — not just the login page — should be served over HTTPS. Redirect all HTTP traffic with a permanent 301 redirect, update internal links and canonicals to &lt;code&gt;https://&lt;/code&gt;, and eliminate mixed content (images, scripts or styles still loaded over HTTP), which browsers increasingly block outright. If visitors ever see the "Your connection is not private" interstitial, you lose them before your homepage even loads.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Watch certificate expiry — lifetimes are shrinking fast
&lt;/h2&gt;

&lt;p&gt;An expired certificate takes your site down as effectively as any attack. This item is getting harder: under the CA/Browser Forum's &lt;a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/" rel="noopener noreferrer"&gt;ballot SC-081v3&lt;/a&gt;, the maximum TLS certificate lifetime dropped to &lt;strong&gt;200 days in March 2026&lt;/strong&gt;, falls to &lt;strong&gt;100 days in 2027&lt;/strong&gt; and lands at just &lt;strong&gt;47 days by 2029&lt;/strong&gt;. Manual renewal is no longer a sustainable plan.&lt;/p&gt;

&lt;p&gt;Automate issuance with an ACME client (Let's Encrypt, or your CA's tooling) and add independent expiry monitoring. You can check your current certificate dates from a terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl s_client &lt;span class="nt"&gt;-connect&lt;/span&gt; example.com:443 &lt;span class="nt"&gt;-servername&lt;/span&gt; example.com &amp;lt;/dev/null | openssl x509 &lt;span class="nt"&gt;-noout&lt;/span&gt; &lt;span class="nt"&gt;-dates&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Harden your TLS configuration
&lt;/h2&gt;

&lt;p&gt;Having a certificate isn't the same as having good TLS. Disable TLS 1.0 and 1.1 entirely, support TLS 1.2 and 1.3 only, and drop legacy cipher suites. A weak configuration invites downgrade attacks and fails compliance scans. Our guide to &lt;a href="https://fortifynet.com/blog/ssl-tls-certificate-security" rel="noopener noreferrer"&gt;achieving an A+ SSL/TLS rating&lt;/a&gt; covers the exact server settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Set the core security headers
&lt;/h2&gt;

&lt;p&gt;Security headers are the cheapest hardening you will ever deploy — a few lines of server configuration that instruct browsers to block entire attack classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strict-Transport-Security (HSTS)&lt;/strong&gt; — forces HTTPS on repeat visits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content-Security-Policy&lt;/strong&gt; — your strongest defense against XSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X-Content-Type-Options: nosniff&lt;/strong&gt; — stops MIME-type confusion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X-Frame-Options / frame-ancestors&lt;/strong&gt; — prevents clickjacking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Referrer-Policy&lt;/strong&gt; and &lt;strong&gt;Permissions-Policy&lt;/strong&gt; — limit data leakage and powerful browser features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See our &lt;a href="https://fortifynet.com/blog/http-security-headers-guide" rel="noopener noreferrer"&gt;complete security headers guide&lt;/a&gt; for copy-paste nginx and Apache examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Authenticate your email: SPF, DKIM and DMARC
&lt;/h2&gt;

&lt;p&gt;Your domain sends email even if your website doesn't — and attackers will happily spoof it if you let them. Google and Yahoo have required SPF, DKIM and DMARC for bulk senders since February 2024, and &lt;a href="https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/strengthening-email-ecosystem-outlook%E2%80%99s-new-requirements-for-high%E2%80%90volume-senders/4399730" rel="noopener noreferrer"&gt;Microsoft applied the same requirements to Outlook&lt;/a&gt; in May 2025 for domains sending over 5,000 messages a day. Non-compliant mail is junked or rejected outright.&lt;/p&gt;

&lt;p&gt;Publish an SPF record, sign with DKIM, then deploy DMARC starting at &lt;code&gt;p=none&lt;/code&gt; to collect reports before tightening to &lt;code&gt;quarantine&lt;/code&gt; and &lt;code&gt;reject&lt;/code&gt;. Our step-by-step &lt;a href="https://fortifynet.com/blog/how-to-set-up-dmarc" rel="noopener noreferrer"&gt;DMARC setup guide&lt;/a&gt; walks through the full rollout.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Lock down your DNS
&lt;/h2&gt;

&lt;p&gt;DNS is the control plane for everything else on this list. Four checks: enable &lt;strong&gt;DNSSEC&lt;/strong&gt; so responses can't be silently forged; publish a &lt;strong&gt;CAA record&lt;/strong&gt; so only your chosen certificate authority can issue certificates for your domain; turn on &lt;strong&gt;registrar lock&lt;/strong&gt; and MFA at your DNS provider; and prune stale subdomains pointing at decommissioned services — dangling records are a classic subdomain-takeover vector.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Patch your CMS, plugins and dependencies
&lt;/h2&gt;

&lt;p&gt;Exploitation of known vulnerabilities was the initial entry point in 20% of breaches in the 2025 DBIR — a 34% jump in one year — and internet-facing, unpatched systems are the prime target. If you run WordPress or another CMS, the attack surface is mostly plugins and themes: enable automatic minor updates, remove anything unused, and subscribe to security advisories for the components you keep.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%3Fw%3D700%26h%3D380%26bkg%3Dwhite%26c%3D%257B%2522type%2522%253A%2522horizontalBar%2522%252C%2522data%2522%253A%257B%2522labels%2522%253A%255B%2522Credential%2520abuse%2522%252C%2522Vulnerability%2520exploitation%2522%252C%2522Phishing%2522%255D%252C%2522datasets%2522%253A%255B%257B%2522label%2522%253A%2522%2525%2520of%2520breaches%2522%252C%2522data%2522%253A%255B22%252C20%252C16%255D%252C%2522backgroundColor%2522%253A%255B%2522%25232563eb%2522%252C%2522%2523f59e0b%2522%252C%2522%2523ef4444%2522%255D%257D%255D%257D%252C%2522options%2522%253A%257B%2522legend%2522%253A%257B%2522display%2522%253Afalse%257D%252C%2522title%2522%253A%257B%2522display%2522%253Atrue%252C%2522text%2522%253A%2522Top%2520ways%2520attackers%2520break%2520in%2520%2528share%2520of%2520breaches%252C%2520Verizon%2520DBIR%25202025%2529%2522%257D%252C%2522scales%2522%253A%257B%2522xAxes%2522%253A%255B%257B%2522ticks%2522%253A%257B%2522beginAtZero%2522%253Atrue%252C%2522max%2522%253A25%257D%257D%255D%257D%257D%257D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%3Fw%3D700%26h%3D380%26bkg%3Dwhite%26c%3D%257B%2522type%2522%253A%2522horizontalBar%2522%252C%2522data%2522%253A%257B%2522labels%2522%253A%255B%2522Credential%2520abuse%2522%252C%2522Vulnerability%2520exploitation%2522%252C%2522Phishing%2522%255D%252C%2522datasets%2522%253A%255B%257B%2522label%2522%253A%2522%2525%2520of%2520breaches%2522%252C%2522data%2522%253A%255B22%252C20%252C16%255D%252C%2522backgroundColor%2522%253A%255B%2522%25232563eb%2522%252C%2522%2523f59e0b%2522%252C%2522%2523ef4444%2522%255D%257D%255D%257D%252C%2522options%2522%253A%257B%2522legend%2522%253A%257B%2522display%2522%253Afalse%257D%252C%2522title%2522%253A%257B%2522display%2522%253Atrue%252C%2522text%2522%253A%2522Top%2520ways%2520attackers%2520break%2520in%2520%2528share%2520of%2520breaches%252C%2520Verizon%2520DBIR%25202025%2529%2522%257D%252C%2522scales%2522%253A%257B%2522xAxes%2522%253A%255B%257B%2522ticks%2522%253A%257B%2522beginAtZero%2522%253Atrue%252C%2522max%2522%253A25%257D%257D%255D%257D%257D%257D" alt="Bar chart showing the most common initial access vectors in breaches: credential abuse 22%, vulnerability exploitation 20%, phishing 16% — Verizon DBIR 2025" width="1400" height="760"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stolen credentials, unpatched software and phishing together opened the door in over half of analyzed breaches. Source: Verizon DBIR 2025.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Turn on MFA and retire weak credentials
&lt;/h2&gt;

&lt;p&gt;Credential abuse remains the single most common way in (22% of breaches). Enable multi-factor authentication on every account that can change your website: CMS admin, hosting control panel, domain registrar, DNS provider and email. Use a password manager to generate unique passwords, rename or disable default &lt;code&gt;admin&lt;/code&gt; accounts, and remove accounts of people who no longer need access.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Back up as if you'll be hit tomorrow
&lt;/h2&gt;

&lt;p&gt;Backups are your last line against ransomware and your first line against fat-fingered deletions. Follow the &lt;strong&gt;3-2-1 rule&lt;/strong&gt;: three copies, on two different media, one off-site — and keep at least one copy offline or immutable so an attacker who owns your server can't encrypt the backups too. A backup you haven't test-restored is a hope, not a plan: schedule a restore drill at least quarterly.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Put a WAF and rate limiting in front
&lt;/h2&gt;

&lt;p&gt;A managed web application firewall (from your CDN, host or a service like Cloudflare) filters injection attempts, malicious bots and scanner noise before they reach your application. Add rate limiting on login, signup and API endpoints to blunt credential stuffing and brute force — the attacks feeding item 8.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Monitor the dark web for leaked credentials
&lt;/h2&gt;

&lt;p&gt;Your credentials can leak without your site ever being touched — a third-party breach is enough, and password reuse does the rest. Monitor whether accounts on your domain appear in known breach dumps, and when they do, force a reset and confirm MFA is active. Our &lt;a href="https://fortifynet.com/blog/dark-web-monitoring-guide" rel="noopener noreferrer"&gt;dark web monitoring guide&lt;/a&gt; explains how exposure happens and what to do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Monitor uptime, performance and unexpected change
&lt;/h2&gt;

&lt;p&gt;Availability is part of security. Uptime and performance monitoring often provides the earliest signal that something is wrong — an expired certificate, a defaced page, a crypto-mining script dragging response times down. Alerting on unexpected content or configuration changes turns a week of silent compromise into a five-minute incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  How often should you run through this checklist?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cadence&lt;/th&gt;
&lt;th&gt;What to do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;After every deploy&lt;/td&gt;
&lt;td&gt;Re-check HTTPS, headers and forms on changed pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;Review updates, user accounts, WAF logs and DMARC reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quarterly&lt;/td&gt;
&lt;td&gt;Full checklist pass, backup restore drill, dependency audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Annually&lt;/td&gt;
&lt;td&gt;Review DNS records, access policies and incident response plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is HTTPS enough to make my website secure?&lt;/strong&gt;&lt;br&gt;
No. HTTPS encrypts traffic in transit, but it does nothing against vulnerable plugins, weak admin passwords, spoofed email or leaked credentials. It's step 1 of 12 for a reason — necessary, not sufficient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What single item gives the biggest security gain?&lt;/strong&gt;&lt;br&gt;
Combine items 7 and 8: patching known vulnerabilities and enforcing MFA. Together they directly address the two largest breach entry points measured in the 2025 DBIR — 42% of breaches combined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do small websites really get attacked?&lt;/strong&gt;&lt;br&gt;
Yes, constantly — just not personally. Automated scanners probe every reachable IP and domain for expired certificates, outdated plugins and open admin panels. Bots don't check your traffic stats before exploiting you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does the full checklist take?&lt;/strong&gt;&lt;br&gt;
Items 1, 2, 4 and 8 are typically an afternoon of work. Email authentication and TLS hardening take a few days including DMARC monitoring. The rest are ongoing habits you automate once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check all of this in 60 seconds
&lt;/h2&gt;

&lt;p&gt;You could verify each item by hand — or let a scanner do the first pass. The free &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet scan&lt;/a&gt; checks your SSL/TLS setup, security headers, DNS configuration, SPF/DKIM/DMARC records, dark-web exposure and performance in about a minute, and tells you exactly which items on this checklist need attention first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Related guides
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/ssl-tls-certificate-security" rel="noopener noreferrer"&gt;SSL/TLS Certificate Security: The Complete Guide to an A+ Rating&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/http-security-headers-guide" rel="noopener noreferrer"&gt;HTTP Security Headers: The Complete 2026 Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/how-to-set-up-dmarc" rel="noopener noreferrer"&gt;How to Set Up DMARC, Step by Step&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/dark-web-monitoring-guide" rel="noopener noreferrer"&gt;Dark Web Monitoring: How to Detect a Breach&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com/blog/website-security-checklist" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. FortifyNet is a free 60-second website security audit — I'm the founder, happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>guides</category>
    </item>
    <item>
      <title>Website Vulnerability Scanner: What It Checks and How to Read Results</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Sat, 18 Jul 2026 07:37:20 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/website-vulnerability-scanner-what-it-checks-and-how-to-read-results-1npk</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/website-vulnerability-scanner-what-it-checks-and-how-to-read-results-1npk</guid>
      <description>&lt;p&gt;A website vulnerability scanner is an automated tool that inspects your site the way an attacker would, then tells you where it is exposed before someone else finds out. In the time it takes to read this intro, a good scanner can fingerprint your TLS configuration, parse your security headers, query your DNS and email authentication records, probe for files that should never be public, and cross-reference your domain against known data breaches.&lt;/p&gt;

&lt;p&gt;This guide explains what a website vulnerability scanner does, how to read a report without a security background, how to fix the issues that matter most, and how to choose a scanner you can trust. The web is not getting safer on its own: in a 2025 analysis, &lt;strong&gt;about 43% of applications had no Content-Security-Policy header at all&lt;/strong&gt; (&lt;a href="https://almanac.httparchive.org/en/2025/security" rel="noopener noreferrer"&gt;HTTP Archive Web Almanac, 2025&lt;/a&gt;), and &lt;strong&gt;roughly 83.9% of domains still publish no DMARC record&lt;/strong&gt; (&lt;a href="https://dmarc.org/stats/dmarc/" rel="noopener noreferrer"&gt;dmarc.org, December 2025&lt;/a&gt;). A scan turns those abstract risks into a concrete, fixable list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1563013544-824ae1b704d3%3Fw%3D1200%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1563013544-824ae1b704d3%3Fw%3D1200%26q%3D80" alt="Developer reviewing security code on a dark monitor, representing automated website vulnerability scanning" width="1200" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A website vulnerability scanner automates the manual checks a security engineer would otherwise run one by one. Photo: Unsplash.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a website vulnerability scanner does
&lt;/h2&gt;

&lt;p&gt;At its core, a scanner sends a series of harmless requests to your site and inspects the responses. It does not break in or change anything; it observes how your server behaves and compares that to security best practices. Think of it as a home inspection rather than a burglary: it rattles the doors and windows to see which are unlocked, then hands you a report.&lt;/p&gt;

&lt;p&gt;Most scanners fall into two families. &lt;strong&gt;Passive, non-intrusive scanners&lt;/strong&gt; (the category FortifyNet's free scan belongs to) analyse what your site already exposes publicly: certificates, headers, DNS, reachable files. &lt;strong&gt;Active or authenticated scanners&lt;/strong&gt; (such as OWASP ZAP or commercial DAST tools) send crafted payloads to find application flaws like SQL injection or cross-site scripting. The two are complementary, but a fast external scan is the right starting point for almost every site owner: no installation, no credentials, no risk to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a scanner checks
&lt;/h2&gt;

&lt;p&gt;A thorough external scan covers six dimensions, each mapping to a different class of real-world attack.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. TLS/SSL configuration
&lt;/h3&gt;

&lt;p&gt;The scanner connects over HTTPS and inspects your certificate and the encryption protecting traffic between visitors and your server. It flags certificates that are expired, self-signed or about to lapse; deprecated protocols (anything older than TLS 1.2); and weak cipher suites. A broken certificate does not just trigger scary browser warnings, it can break checkout flows and destroy trust. For a deeper walkthrough, see our &lt;a href="https://fortifynet.com/blog/ssl-tls-certificate-security" rel="noopener noreferrer"&gt;SSL/TLS certificate security guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. HTTP security headers
&lt;/h3&gt;

&lt;p&gt;Security headers are small instructions your server sends with every page, telling the browser how to behave defensively. The most important are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content-Security-Policy (CSP)&lt;/strong&gt; restricts which scripts and resources can load, the single strongest defence against cross-site scripting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict-Transport-Security (HSTS)&lt;/strong&gt; forces browsers to use HTTPS and prevents downgrade attacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X-Content-Type-Options: nosniff&lt;/strong&gt; stops the browser reinterpreting files as executable content (&lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html" rel="noopener noreferrer"&gt;OWASP HTTP Headers Cheat Sheet&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X-Frame-Options&lt;/strong&gt; blocks clickjacking by preventing your site being framed by others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Referrer-Policy&lt;/strong&gt; limits how much URL information leaks to third parties; &lt;code&gt;strict-origin-when-cross-origin&lt;/code&gt; is a safe default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These headers are free to add, yet adoption is poor: the same 2025 data found &lt;strong&gt;more than 40% of sites missing HSTS entirely&lt;/strong&gt;. Our &lt;a href="https://fortifynet.com/blog/http-security-headers-guide" rel="noopener noreferrer"&gt;HTTP security headers guide&lt;/a&gt; covers exact values to deploy.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. DNS and email authentication
&lt;/h3&gt;

&lt;p&gt;Your DNS records control where mail and traffic go, and they are a favourite target for spoofing. A scanner checks three records that stop criminals sending email that looks like it came from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SPF&lt;/strong&gt; lists the servers allowed to send mail for your domain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DKIM&lt;/strong&gt; cryptographically signs your messages so recipients can verify them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DMARC&lt;/strong&gt; tells receivers what to do with mail that fails SPF or DKIM, and where to send reports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Missing DMARC is the norm, not the exception, which is exactly why phishing remains so effective. See our &lt;a href="https://fortifynet.com/blog/dns-security-configuration" rel="noopener noreferrer"&gt;DNS security configuration guide&lt;/a&gt; for record-by-record setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Exposed files and secrets
&lt;/h3&gt;

&lt;p&gt;Scanners probe for files that should never be reachable publicly: &lt;code&gt;.env&lt;/code&gt; files holding database passwords and API keys, exposed &lt;code&gt;.git/&lt;/code&gt; directories that leak your entire source history, backup archives and open admin panels. This is not theoretical. A 2024 scan of 10,000 sites found &lt;strong&gt;34% had exposed configuration files&lt;/strong&gt; (&lt;a href="https://siteleak.com/" rel="noopener noreferrer"&gt;SiteLeak&lt;/a&gt;), and GitGuardian detected &lt;strong&gt;more than 39 million leaked secrets in 2024 alone&lt;/strong&gt; (&lt;a href="https://blog.gitguardian.com/exposed-git-folders-exposed/" rel="noopener noreferrer"&gt;GitGuardian&lt;/a&gt;). A single exposed &lt;code&gt;.env&lt;/code&gt; can hand an attacker your database within minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Dark-web and breach exposure
&lt;/h3&gt;

&lt;p&gt;Even a perfectly configured site can be compromised through credentials leaked elsewhere. This check cross-references your domain against known breach datasets to see whether employee or customer email addresses and passwords are already circulating. If your team reuses a leaked password, no amount of TLS hardening will help, so surfacing that exposure early is essential.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Performance
&lt;/h3&gt;

&lt;p&gt;Performance belongs in a security report for two reasons: slow, unoptimised sites often signal outdated software and missing caching or CDN protection, and degraded performance is itself a symptom of many denial-of-service and bot-abuse problems. A scanner measures load time and responsiveness so you catch both user-experience and resilience issues in one pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read your scan results
&lt;/h2&gt;

&lt;p&gt;A good report ranks findings by severity rather than dumping a raw list. Read it in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Critical and high first.&lt;/strong&gt; An exposed &lt;code&gt;.env&lt;/code&gt;, an expired certificate or a readable &lt;code&gt;.git/&lt;/code&gt; directory can be exploited today. Treat these as emergencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then medium issues.&lt;/strong&gt; Missing CSP or HSTS, no DMARC, weak ciphers widen your attack surface and should be scheduled within days, not months.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then low and informational.&lt;/strong&gt; Sub-optimal cache headers or a missing &lt;code&gt;Referrer-Policy&lt;/code&gt; are worth fixing but rarely urgent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Watch for &lt;strong&gt;false positives&lt;/strong&gt;. External scanners infer behaviour from responses and occasionally flag something intentional (for example, a deliberately permissive CSP on a documentation subdomain). The fix is context: confirm each finding against how your site is actually meant to work before you act. A trustworthy scanner explains &lt;em&gt;why&lt;/em&gt; something is flagged and &lt;em&gt;what&lt;/em&gt; value it recommends, so you are not left guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each scan dimension reveals
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scan dimension&lt;/th&gt;
&lt;th&gt;What the scanner checks&lt;/th&gt;
&lt;th&gt;What a failure reveals&lt;/th&gt;
&lt;th&gt;Typical severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TLS/SSL&lt;/td&gt;
&lt;td&gt;Certificate validity, protocol version, cipher strength&lt;/td&gt;
&lt;td&gt;Traffic can be intercepted; browser trust warnings&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security headers&lt;/td&gt;
&lt;td&gt;CSP, HSTS, X-Frame-Options, nosniff&lt;/td&gt;
&lt;td&gt;Exposure to XSS, clickjacking, downgrade attacks&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS &amp;amp; email auth&lt;/td&gt;
&lt;td&gt;SPF, DKIM, DMARC records&lt;/td&gt;
&lt;td&gt;Your domain can be spoofed in phishing&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exposed files&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;.git/&lt;/code&gt;, backups, open admin panels&lt;/td&gt;
&lt;td&gt;Secrets and source code leak directly&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark-web exposure&lt;/td&gt;
&lt;td&gt;Domain in known breach datasets&lt;/td&gt;
&lt;td&gt;Reused credentials enable account takeover&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Load time, responsiveness&lt;/td&gt;
&lt;td&gt;Poor UX; may mask DoS or bot abuse&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to fix the top issues
&lt;/h2&gt;

&lt;p&gt;You can resolve most high-impact findings without specialist help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Renew or fix your certificate&lt;/strong&gt; with an automated provider (such as Let's Encrypt) so renewal never lapses again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add security headers.&lt;/strong&gt; Most can be set in your web server config or CDN in a few lines. Start with HSTS and a baseline CSP, then tighten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish SPF, DKIM and DMARC.&lt;/strong&gt; Begin DMARC at &lt;code&gt;p=none&lt;/code&gt; to monitor, then move to &lt;code&gt;quarantine&lt;/code&gt; and finally &lt;code&gt;reject&lt;/code&gt; once legitimate mail passes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove exposed files.&lt;/strong&gt; Block access to &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;.git/&lt;/code&gt; and backups at the server level, and rotate any secret that was ever exposed, since it must be considered compromised.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respond to breach hits.&lt;/strong&gt; Force password resets and enable multi-factor authentication for any account flagged in a breach.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Re-scan after each change. Security is not a one-time event: configurations drift, certificates expire and new code introduces new exposure, so continuous monitoring beats a single annual audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose a website vulnerability scanner
&lt;/h2&gt;

&lt;p&gt;Not all scanners are equal. Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Breadth across all six dimensions&lt;/strong&gt;, not just headers or just SSL. A partial picture creates a false sense of safety.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Severity-ranked, actionable output&lt;/strong&gt; that tells you what to fix and how.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy and low false-positive rates&lt;/strong&gt;, with clear explanations for each finding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous monitoring&lt;/strong&gt;, so you are alerted when something changes rather than discovering it months later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-risk, non-intrusive scanning&lt;/strong&gt; that needs no software installation and cannot harm production.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Free vs. paid scanners
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Free scan&lt;/th&gt;
&lt;th&gt;Paid / continuous monitoring&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One-off external assessment&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All six scan dimensions&lt;/td&gt;
&lt;td&gt;Often partial&lt;/td&gt;
&lt;td&gt;Comprehensive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduled re-scans &amp;amp; alerts&lt;/td&gt;
&lt;td&gt;Rarely&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical tracking &amp;amp; trends&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-site / team management&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A free scan is the perfect way to get an honest baseline today; continuous monitoring is what keeps you secure tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is a website vulnerability scanner safe to run on my live site?&lt;/strong&gt;&lt;br&gt;
Yes, if it is a passive external scanner. It only reads what your site already exposes publicly and sends no attack payloads, so there is no risk to production. Active penetration testing is different and should be scheduled deliberately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How often should I scan my website?&lt;/strong&gt;&lt;br&gt;
Run a full scan after every significant change, and enable continuous monitoring so certificate expiries, configuration drift and new breaches are caught automatically. A once-a-year audit leaves long blind spots.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will a scanner find every vulnerability?&lt;/strong&gt;&lt;br&gt;
No tool catches everything. External scanners excel at configuration, exposure and authentication issues; deeper application logic flaws need authenticated testing or manual review. A good external scan still eliminates the majority of easily exploited weaknesses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need technical skills to act on the results?&lt;/strong&gt;&lt;br&gt;
For the common fixes, no. A clear report tells you what to change and where. Complex application issues may need a developer, but renewing a certificate, adding a header or publishing a DMARC record is well within reach for most site owners.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run a free scan in 60 seconds
&lt;/h2&gt;

&lt;p&gt;You cannot fix what you cannot see. &lt;strong&gt;&lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet's free website vulnerability scanner&lt;/a&gt;&lt;/strong&gt; checks your TLS/SSL, security headers, DNS and email authentication, exposed files, dark-web exposure and performance in about 60 seconds, then hands you a severity-ranked report with plain-language fixes. No installation, no risk to your site. See where you stand, then decide what to harden first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com/blog/website-vulnerability-scanner" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. FortifyNet is a free 60-second website security audit — I'm the founder, happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>"Your Connection Is Not Private": What It Means and How to Fix It</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Fri, 17 Jul 2026 21:18:34 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/your-connection-is-not-private-what-it-means-and-how-to-fix-it-5aln</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/your-connection-is-not-private-what-it-means-and-how-to-fix-it-5aln</guid>
      <description>&lt;p&gt;You click a link, expect a familiar page, and instead Chrome fills the screen with a stark warning: &lt;strong&gt;"Your connection is not private."&lt;/strong&gt; Below it sits a cryptic code like &lt;code&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/code&gt;. Whether you are a visitor trying to reach a site or the owner watching traffic evaporate, the error is almost always fixable in minutes — once you know which of a handful of causes is behind it.&lt;/p&gt;

&lt;p&gt;The warning is not malware, and it does not mean you have been hacked. It means your browser tried to establish an encrypted HTTPS connection and could not verify the website's SSL/TLS certificate. Because the certificate is the site's identity document, the browser refuses to load the page rather than risk sending your data to an impostor.&lt;/p&gt;

&lt;p&gt;This guide explains what triggers the warning, how visitors can clear it in seven quick steps, and how site owners can diagnose and permanently fix it — plus why an industry-wide change to certificate lifetimes means you will see this error more often from 2026 onward.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the warning actually means
&lt;/h2&gt;

&lt;p&gt;More than 95% of pages loaded in Chrome are served over HTTPS, according to &lt;a href="https://transparencyreport.google.com/https/overview" rel="noopener noreferrer"&gt;Google's Transparency Report&lt;/a&gt;. HTTPS does two jobs: it encrypts traffic, and it proves the server really is the one named in the address bar. That proof comes from the TLS certificate, which your browser validates on every single connection. Three checks must all pass:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trust&lt;/strong&gt; — the certificate was issued by a certificate authority (CA) your device trusts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validity&lt;/strong&gt; — today's date falls inside the certificate's validity window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity&lt;/strong&gt; — the domain in the address bar matches a name listed in the certificate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any check fails, the browser blocks the page and shows the interstitial instead. Encryption without verified identity is worthless — an attacker on public Wi‑Fi could otherwise silently decrypt everything you send.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same error in every browser
&lt;/h2&gt;

&lt;p&gt;Each browser words the warning differently, but the underlying certificate problem is identical.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;th&gt;Warning text&lt;/th&gt;
&lt;th&gt;Typical error codes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chrome&lt;/td&gt;
&lt;td&gt;"Your connection is not private"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/code&gt;, &lt;code&gt;NET::ERR_CERT_DATE_INVALID&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge&lt;/td&gt;
&lt;td&gt;"Your connection isn't private"&lt;/td&gt;
&lt;td&gt;Same &lt;code&gt;NET::ERR_CERT_*&lt;/code&gt; codes as Chrome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firefox&lt;/td&gt;
&lt;td&gt;"Warning: Potential Security Risk Ahead"&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SEC_ERROR_EXPIRED_CERTIFICATE&lt;/code&gt;, &lt;code&gt;SEC_ERROR_UNKNOWN_ISSUER&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safari&lt;/td&gt;
&lt;td&gt;"This Connection Is Not Private"&lt;/td&gt;
&lt;td&gt;Plain-language description, no code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The code at the bottom of the warning is the most useful diagnostic you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;NET::ERR_CERT_DATE_INVALID&lt;/code&gt;&lt;/strong&gt; — the certificate has expired, or your device clock is wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;NET::ERR_CERT_AUTHORITY_INVALID&lt;/code&gt;&lt;/strong&gt; — the issuing CA is not trusted: a self-signed certificate, an incomplete certificate chain, or antivirus/proxy interception.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;NET::ERR_CERT_COMMON_NAME_INVALID&lt;/code&gt;&lt;/strong&gt; — the certificate does not cover this exact domain, e.g. it covers &lt;code&gt;www.example.com&lt;/code&gt; but not &lt;code&gt;example.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;NET::ERR_CERT_REVOKED&lt;/code&gt;&lt;/strong&gt; — the CA has withdrawn the certificate, often after a key compromise.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you're a visitor: 7 fixes, fastest first
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reload, then try an incognito/private window.&lt;/strong&gt; This rules out a stale cached certificate or a misbehaving extension.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your device's date and time.&lt;/strong&gt; A clock that is off by months makes every valid certificate look expired or not yet valid. Enable automatic time. This alone resolves a large share of &lt;code&gt;DATE_INVALID&lt;/code&gt; errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On public Wi‑Fi, log in to the network first.&lt;/strong&gt; Hotel and airport captive portals hijack requests until you authenticate, which breaks HTTPS. Visit a plain-HTTP site such as &lt;code&gt;http://neverssl.com&lt;/code&gt; to force the login page to appear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your browser and operating system.&lt;/strong&gt; Root certificates ship with OS and browser updates; very old devices no longer know the CAs modern sites use — the fate of many pre-7.1.1 Android phones after Let's Encrypt's root transition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporarily disable HTTPS scanning in your antivirus.&lt;/strong&gt; Security suites that inspect encrypted traffic re-sign it with their own certificate; when that goes wrong you get &lt;code&gt;AUTHORITY_INVALID&lt;/code&gt; on every site. If the warning disappears, re-enable the feature and update or reconfigure the antivirus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear your browser's cache and SSL state.&lt;/strong&gt; In Chrome: Settings → Privacy and security → Clear browsing data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still failing on one specific site — from every device and network?&lt;/strong&gt; Then the problem is the site's, not yours. Do not click "Proceed"; on a login or payment page, that is exactly the risk this warning exists to prevent.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  If it's your website: diagnose, fix, automate
&lt;/h2&gt;

&lt;p&gt;First, see what the certificate actually says. From any terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl s_client &lt;span class="nt"&gt;-connect&lt;/span&gt; example.com:443 &lt;span class="nt"&gt;-servername&lt;/span&gt; example.com &amp;lt;/dev/null 2&amp;gt;/dev/null | openssl x509 &lt;span class="nt"&gt;-noout&lt;/span&gt; &lt;span class="nt"&gt;-subject&lt;/span&gt; &lt;span class="nt"&gt;-issuer&lt;/span&gt; &lt;span class="nt"&gt;-dates&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or skip the command line: a &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;free FortifyNet scan&lt;/a&gt; reads your certificate, chain, and TLS configuration in about 60 seconds and tells you exactly what is wrong.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Typical code&lt;/th&gt;
&lt;th&gt;Permanent fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Expired certificate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DATE_INVALID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Renew now, then automate renewal (ACME/Certbot)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incomplete chain (missing intermediate)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AUTHORITY_INVALID&lt;/code&gt; — often only on mobile&lt;/td&gt;
&lt;td&gt;Serve the full chain (&lt;code&gt;fullchain.pem&lt;/code&gt;, not &lt;code&gt;cert.pem&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name mismatch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;COMMON_NAME_INVALID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reissue with SANs for apex + &lt;code&gt;www&lt;/code&gt;; wildcard if needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-signed certificate in production&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AUTHORITY_INVALID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Replace with a CA-issued certificate — Let's Encrypt is free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revoked certificate&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ERR_CERT_REVOKED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reissue with a new private key&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;With &lt;a href="https://letsencrypt.org/stats/" rel="noopener noreferrer"&gt;Let's Encrypt&lt;/a&gt; securing hundreds of millions of sites at no cost, there is no reason to run production on a self-signed certificate. A typical setup on nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.example.com
&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot renew &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Certbot installs the certificate with its full chain and schedules automatic renewal — the single most effective protection against ever showing this warning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this error is about to get more common
&lt;/h2&gt;

&lt;p&gt;In April 2025 the CA/Browser Forum passed &lt;a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/" rel="noopener noreferrer"&gt;Ballot SC-081v3&lt;/a&gt;, a schedule that shrinks the maximum lifetime of public TLS certificates from 398 days to just 47 days by 2029, as &lt;a href="https://www.digicert.com/blog/tls-certificate-lifetimes-will-officially-reduce-to-47-days" rel="noopener noreferrer"&gt;DigiCert explains&lt;/a&gt;. Since 15 March 2026, no public CA may issue a certificate valid for longer than 200 days; in March 2027 the cap drops to 100 days, and in March 2029 to 47.&lt;/p&gt;

&lt;p&gt;The practical consequence: a site renewing certificates by hand needs to do it at least twice a year today, and roughly eight times a year from 2029. Every manual step is a chance to forget — which is why automation plus expiry monitoring is now the baseline, not a nice-to-have.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it ever safe to click "Proceed anyway"?&lt;/strong&gt;&lt;br&gt;
Only when you know exactly why the warning appears and no sensitive data is involved — for example, your own router's admin panel using a self-signed certificate. Never on banking, email, shopping, or any login page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do I see the warning when nobody else does?&lt;/strong&gt;&lt;br&gt;
That points to a local cause: a wrong clock, aggressive antivirus, a captive portal, or an outdated OS that lacks modern root certificates. Work through visitor steps 1–6 above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does my site show the error only on phones?&lt;/strong&gt;&lt;br&gt;
A classic sign of an incomplete certificate chain. Desktop browsers often cache missing intermediates; mobile browsers are stricter. Configure your server to send the full chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the warning affect SEO and traffic?&lt;/strong&gt;&lt;br&gt;
Directly: most visitors leave immediately, since the interstitial takes two deliberate clicks to bypass. Indirectly: HTTPS is a Google ranking signal, and prolonged certificate failures depress crawling and conversions alike.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related guides
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/ssl-tls-certificate-security" rel="noopener noreferrer"&gt;SSL/TLS Certificate Security: The Complete Guide to Achieving A+ Rating&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/website-vulnerability-scanner" rel="noopener noreferrer"&gt;Website Vulnerability Scanner: What It Checks and How to Read Results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Catch certificate problems before your visitors do
&lt;/h2&gt;

&lt;p&gt;The warning your visitors see is the last symptom of a problem that was detectable weeks earlier. &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;Run a free FortifyNet scan&lt;/a&gt; — 60 seconds, no signup — and get a plain-English report on your certificate expiry, chain, TLS configuration, security headers, DNS, and email authentication.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com/blog/your-connection-is-not-private" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. FortifyNet is a free 60-second website security audit — I'm the founder, happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ssl</category>
      <category>tls</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Set Up DMARC, Step by Step (From p=none to p=reject)</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Wed, 15 Jul 2026 08:15:00 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/how-to-set-up-dmarc-step-by-step-from-pnone-to-preject-4mo8</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/how-to-set-up-dmarc-step-by-step-from-pnone-to-preject-4mo8</guid>
      <description>&lt;p&gt;Anyone can put your domain in the From field of an email. Without DMARC, a scammer can send fake invoices, password resets or CEO-fraud messages that look exactly like they came from you — and many receiving servers will deliver them. DMARC closes that door, and the world's largest mailbox providers have stopped treating it as optional: &lt;a href="https://support.google.com/a/answer/81126" rel="noopener noreferrer"&gt;Gmail and Yahoo have required it for bulk senders since February 2024&lt;/a&gt;, and &lt;a href="https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/strengthening-email-ecosystem-outlook%E2%80%99s-new-requirements-for-high%E2%80%90volume-senders/4399730" rel="noopener noreferrer"&gt;Microsoft began rejecting non-compliant high-volume mail in May 2025&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This guide walks you through the whole setup: your first monitoring record in about 15 minutes, then a safe, staged path to full enforcement. No mail gets lost along the way if you follow the stages in order.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a DMARC record actually does
&lt;/h2&gt;

&lt;p&gt;DMARC (Domain-based Message Authentication, Reporting and Conformance, defined in &lt;a href="https://datatracker.ietf.org/doc/html/rfc7489" rel="noopener noreferrer"&gt;RFC 7489&lt;/a&gt;) is a TXT record in your DNS that builds on two other standards, SPF and DKIM. It tells every receiving mail server three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;How to verify&lt;/strong&gt; that mail claiming to be from your domain really is — the From domain must &lt;em&gt;align&lt;/em&gt; with the domain that passed SPF or DKIM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What to do when verification fails&lt;/strong&gt; — nothing (&lt;code&gt;p=none&lt;/code&gt;), send it to spam (&lt;code&gt;p=quarantine&lt;/code&gt;), or refuse it outright (&lt;code&gt;p=reject&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where to send reports&lt;/strong&gt; about everything it saw, so you get visibility into every service sending as your domain — legitimate or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the concepts in more depth, read our guide &lt;a href="https://fortifynet.com/blog/dns-security-configuration" rel="noopener noreferrer"&gt;What is DMARC and why is it important?&lt;/a&gt; — this article is the hands-on rollout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you start: three prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Access to your DNS.&lt;/strong&gt; You will add TXT records at your DNS host (Cloudflare, your registrar, Route 53, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A working SPF record.&lt;/strong&gt; It lists which servers may send mail for your domain. Verify yours with our &lt;a href="https://fortifynet.com/blog/spf-record-checker" rel="noopener noreferrer"&gt;SPF record guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DKIM enabled in every sending service.&lt;/strong&gt; Each service cryptographically signs your mail. Google Workspace, Microsoft 365, Mailchimp, HubSpot, Zendesk and most invoicing platforms all have a DKIM or "domain authentication" setting — turn it on everywhere.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Take five minutes to inventory everything that sends email as your domain: mail platform, newsletter tool, CRM, helpdesk, billing system, website contact forms. Every one of them must eventually authenticate, or enforcement will bite you later.&lt;/p&gt;

&lt;p&gt;You can check your current state from any terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;dig TXT yourdomain.com +short
dig TXT _dmarc.yourdomain.com +short
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows, &lt;code&gt;nslookup -type=TXT _dmarc.yourdomain.com&lt;/code&gt; does the same job. If the second query returns nothing, you have no DMARC record yet — which is exactly what we are about to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Publish a monitoring-only record (p=none)
&lt;/h2&gt;

&lt;p&gt;Create a TXT record with these values at your DNS host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="err"&gt;Host/&lt;/span&gt;&lt;span class="py"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;_dmarc&lt;/span&gt;
&lt;span class="py"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;      &lt;span class="s"&gt;TXT&lt;/span&gt;
&lt;span class="py"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The record lives at &lt;code&gt;_dmarc.yourdomain.com&lt;/code&gt; — most DNS panels only ask for the &lt;code&gt;_dmarc&lt;/code&gt; part. Three practical notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use a dedicated mailbox&lt;/strong&gt; (or alias) for &lt;code&gt;rua&lt;/code&gt;. Aggregate reports arrive daily from every major receiver and will clutter a personal inbox fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish exactly one DMARC record.&lt;/strong&gt; Two records at &lt;code&gt;_dmarc&lt;/code&gt; means receivers ignore both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;p=none&lt;/code&gt; changes nothing about delivery.&lt;/strong&gt; It is pure observation mode — the safe starting point for every domain, no matter how messy your email setup is.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DNS propagation usually takes minutes, occasionally a few hours depending on TTL.&lt;/p&gt;

&lt;h3&gt;
  
  
  The DMARC tags that matter
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Recommended&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Protocol version&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;DMARC1&lt;/code&gt; (mandatory, must be first)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Policy for your domain&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;none&lt;/code&gt; → &lt;code&gt;quarantine&lt;/code&gt; → &lt;code&gt;reject&lt;/code&gt; over time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rua&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Where aggregate reports go&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;mailto:&lt;/code&gt; address you actually check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ruf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Forensic (per-message) reports&lt;/td&gt;
&lt;td&gt;Skip it — most receivers no longer send these&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Policy for subdomains&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;sp=reject&lt;/code&gt; at the final stage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;adkim&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DKIM alignment mode&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;r&lt;/code&gt; (relaxed, default) is right for most&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;aspf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SPF alignment mode&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;r&lt;/code&gt; (relaxed, default) is right for most&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pct&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;% of failing mail the policy applies to&lt;/td&gt;
&lt;td&gt;Use for ramping quarantine (25 → 50 → 100)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Failure-report options&lt;/td&gt;
&lt;td&gt;Leave default unless debugging DKIM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 2: Read the reports and fix what fails (2–6 weeks)
&lt;/h2&gt;

&lt;p&gt;Within a day or two, aggregate reports (XML files) start arriving from Gmail, Yahoo, Microsoft and others. Each one lists the IP addresses that sent mail using your domain, how many messages, and whether they passed SPF, DKIM and — crucially — &lt;strong&gt;alignment&lt;/strong&gt;: the From domain matching the domain that actually passed. Relaxed alignment accepts subdomains (&lt;code&gt;mail.yourdomain.com&lt;/code&gt; aligns with &lt;code&gt;yourdomain.com&lt;/code&gt;); strict requires an exact match.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1563986768494-4dee2763ff3f%3Fw%3D1200%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1563986768494-4dee2763ff3f%3Fw%3D1200%26q%3D80" alt="Wall of paper envelopes representing the email traffic you need to authenticate" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The typical findings, in order of frequency:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A newsletter or CRM tool signs with its own domain, not yours.&lt;/strong&gt; Fix: enable custom-domain DKIM (often called "domain authentication") inside that tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A server or SaaS tool is missing from SPF.&lt;/strong&gt; Fix: add its include or IP to your SPF record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forwarded mail fails SPF.&lt;/strong&gt; Expected — forwarding rewrites the sending IP. As long as DKIM survives (it usually does), aligned DKIM keeps the mail passing DMARC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At low volume you can read the XML by hand; beyond a few reports a day, a report analyzer saves real time. Give this phase two to six weeks — long enough to catch monthly senders like invoicing runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Tighten to quarantine
&lt;/h2&gt;

&lt;p&gt;Once reports show all legitimate sources passing with alignment for several consecutive weeks, step up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;v&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;DMARC1; p=quarantine; pct=25; rua=mailto:dmarc-reports@yourdomain.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Failing mail now lands in spam folders — for 25% of failures. Raise &lt;code&gt;pct&lt;/code&gt; to 50, then 100 over a few weeks while watching the reports. One caveat: some receivers apply the policy to all mail regardless of intermediate &lt;code&gt;pct&lt;/code&gt; values, so treat the ramp as a convenience, not a guarantee — and don't camp at &lt;code&gt;pct=25&lt;/code&gt; for months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Move to reject and cover subdomains
&lt;/h2&gt;

&lt;p&gt;The destination — spoofed mail is refused outright:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;v&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;DMARC1; p=reject; sp=reject; rua=mailto:dmarc-reports@yourdomain.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;sp=reject&lt;/code&gt; closes the subdomain loophole (&lt;code&gt;invoices.yourdomain.com&lt;/code&gt;, &lt;code&gt;hr.yourdomain.com&lt;/code&gt;) that attackers probe next. Two final habits: keep the &lt;code&gt;rua&lt;/code&gt; address alive forever — reports are how you notice when a new tool starts sending unauthenticated — and put &lt;strong&gt;parked domains that never send mail&lt;/strong&gt; straight at &lt;code&gt;p=reject&lt;/code&gt; with a restrictive SPF (&lt;code&gt;v=spf1 -all&lt;/code&gt;). Scammers love forgotten domains.&lt;/p&gt;

&lt;h2&gt;
  
  
  The deadlines that made DMARC mandatory
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;In force&lt;/th&gt;
&lt;th&gt;Applies to&lt;/th&gt;
&lt;th&gt;Minimum requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gmail&lt;/td&gt;
&lt;td&gt;Feb 2024, &lt;a href="https://support.google.com/a/answer/81126" rel="noopener noreferrer"&gt;rejections since late 2025&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;5,000+ msgs/day to Gmail&lt;/td&gt;
&lt;td&gt;SPF + DKIM + DMARC (&lt;code&gt;p=none&lt;/code&gt; or stronger), aligned From, one-click unsubscribe, spam rate &amp;lt; 0.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yahoo/AOL&lt;/td&gt;
&lt;td&gt;Feb 2024&lt;/td&gt;
&lt;td&gt;5,000+ msgs/day&lt;/td&gt;
&lt;td&gt;Same core set: SPF + DKIM + DMARC with alignment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outlook.com / Hotmail / Live&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/strengthening-email-ecosystem-outlook%E2%80%99s-new-requirements-for-high%E2%80%90volume-senders/4399730" rel="noopener noreferrer"&gt;May 5, 2025 — non-compliant mail rejected&lt;/a&gt; (error 550 5.7.515)&lt;/td&gt;
&lt;td&gt;5,000+ msgs/day to consumer accounts&lt;/td&gt;
&lt;td&gt;SPF + DKIM + DMARC at least &lt;code&gt;p=none&lt;/code&gt;, aligned with SPF or DKIM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Below 5,000 messages a day you escape the letter of these rules, but not their spirit: the same providers still weigh authentication heavily in spam filtering for everyone, and the thresholds have only moved in one direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most domains stop halfway — don't
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://easydmarc.com/blog/easydmarc-releases-2026-dmarc-adoption-report/" rel="noopener noreferrer"&gt;EasyDMARC's 2026 adoption report&lt;/a&gt;, analyzing 1.8 million domains, found 52% now publish a DMARC record (up from 47.7% in 2025) — but 56% of those never move past &lt;code&gt;p=none&lt;/code&gt;. Monitoring mode satisfies the mailbox providers' checkbox, yet blocks nothing: a spoofed invoice still lands in your customer's inbox. Meanwhile 95% of the Fortune 500 publish DMARC and more than 80% of them enforce it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%3Fw%3D700%26h%3D380%26c%3D%257B%2522type%2522%253A%2522bar%2522%252C%2522data%2522%253A%257B%2522labels%2522%253A%255B%2522p%253Dnone%2520%2528monitoring%2520only%2529%2522%252C%2522Enforcement%2520%2528quarantine%252Freject%2529%2522%255D%252C%2522datasets%2522%253A%255B%257B%2522label%2522%253A%2522%2525%2520of%2520domains%2520with%2520DMARC%2522%252C%2522data%2522%253A%255B56%252C44%255D%252C%2522backgroundColor%2522%253A%255B%2522%2523f59e0b%2522%252C%2522%252310b981%2522%255D%257D%255D%257D%252C%2522options%2522%253A%257B%2522legend%2522%253A%257B%2522display%2522%253Afalse%257D%252C%2522title%2522%253A%257B%2522display%2522%253Atrue%252C%2522text%2522%253A%2522DMARC%2520policies%25202026%253A%252056%2525%2520of%2520domains%2520still%2520only%2520monitor%2522%257D%252C%2522scales%2522%253A%257B%2522yAxes%2522%253A%255B%257B%2522ticks%2522%253A%257B%2522beginAtZero%2522%253Atrue%252C%2522max%2522%253A60%257D%257D%255D%257D%257D%257D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%3Fw%3D700%26h%3D380%26c%3D%257B%2522type%2522%253A%2522bar%2522%252C%2522data%2522%253A%257B%2522labels%2522%253A%255B%2522p%253Dnone%2520%2528monitoring%2520only%2529%2522%252C%2522Enforcement%2520%2528quarantine%252Freject%2529%2522%255D%252C%2522datasets%2522%253A%255B%257B%2522label%2522%253A%2522%2525%2520of%2520domains%2520with%2520DMARC%2522%252C%2522data%2522%253A%255B56%252C44%255D%252C%2522backgroundColor%2522%253A%255B%2522%2523f59e0b%2522%252C%2522%252310b981%2522%255D%257D%255D%257D%252C%2522options%2522%253A%257B%2522legend%2522%253A%257B%2522display%2522%253Afalse%257D%252C%2522title%2522%253A%257B%2522display%2522%253Atrue%252C%2522text%2522%253A%2522DMARC%2520policies%25202026%253A%252056%2525%2520of%2520domains%2520still%2520only%2520monitor%2522%257D%252C%2522scales%2522%253A%257B%2522yAxes%2522%253A%255B%257B%2522ticks%2522%253A%257B%2522beginAtZero%2522%253Atrue%252C%2522max%2522%253A60%257D%257D%255D%257D%257D%257D" alt="Bar chart: among domains with DMARC in 2026, 56% remain at p=none monitoring while 44% enforce with quarantine or reject (source: EasyDMARC)" width="1400" height="760"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Share of DMARC-enabled domains by policy level, 2026 (source: EasyDMARC adoption report).&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two DMARC records at &lt;code&gt;_dmarc&lt;/code&gt;&lt;/strong&gt; — receivers must ignore both. Merge into one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A typo in the &lt;code&gt;rua&lt;/code&gt; address&lt;/strong&gt; — you fly blind for weeks before noticing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publishing the record at the root instead of the &lt;code&gt;_dmarc&lt;/code&gt; host&lt;/strong&gt; — it is simply never found.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jumping straight to &lt;code&gt;p=reject&lt;/code&gt;&lt;/strong&gt; without a monitoring phase — the fastest way to lose your own newsletter or invoices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting subdomains&lt;/strong&gt; — without &lt;code&gt;sp=&lt;/code&gt;, subdomains inherit &lt;code&gt;p=&lt;/code&gt;, but check that this is what you want at each stage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating &lt;code&gt;p=none&lt;/code&gt; as done&lt;/strong&gt; — it proves you exist; it protects nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;I send fewer than 5,000 emails a day. Do I still need DMARC?&lt;/strong&gt;&lt;br&gt;
Yes. Spoofing doesn't check your volume — small companies are prime targets for invoice fraud precisely because they lack enforcement. The bulk-sender rules are a floor, not the definition of who benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does the whole rollout take?&lt;/strong&gt;&lt;br&gt;
Typically 4–12 weeks from first record to &lt;code&gt;p=reject&lt;/code&gt;, driven mostly by how many sending services you must fix during monitoring. A domain with one mail platform can move in a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will DMARC improve my deliverability?&lt;/strong&gt;&lt;br&gt;
Aligned SPF/DKIM/DMARC is now part of how Gmail, Yahoo and Microsoft score senders, so yes — properly authenticated domains see fewer spam-folder placements. The reverse is also true: broken authentication increasingly means rejection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the practical difference between quarantine and reject?&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;quarantine&lt;/code&gt; delivers failing mail to the spam folder — recipients can still find it. &lt;code&gt;reject&lt;/code&gt; refuses it at the door — the strongest protection and the end goal for domains that have cleaned up their senders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a paid tool to read the reports?&lt;/strong&gt;&lt;br&gt;
Not at low volume — the XML is human-readable. Once multiple reports arrive daily, a free or paid analyzer pays for itself in time saved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your email authentication in 60 seconds
&lt;/h2&gt;

&lt;p&gt;Not sure where your domain stands right now? Run the free &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet scan&lt;/a&gt; — it checks your SPF, DKIM and DMARC records (including policy strength and common syntax errors), plus SSL/TLS, security headers and dark-web exposure. One minute, no signup, and you'll know exactly which step of this guide to start at.&lt;/p&gt;

&lt;h3&gt;
  
  
  Related guides
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/dns-security-configuration" rel="noopener noreferrer"&gt;What is DMARC and Why is it Important for Your Business?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/spf-record-checker" rel="noopener noreferrer"&gt;SPF Record Checker: How to Test, Read, and Fix Your SPF Record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/dns-security-configuration" rel="noopener noreferrer"&gt;DNS Security Configuration: SPF, DMARC, DNSSEC &amp;amp; CAA Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com/blog/how-to-set-up-dmarc" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. FortifyNet is a free 60-second website security audit — I'm the founder, happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>dmarc</category>
      <category>email</category>
      <category>spf</category>
    </item>
    <item>
      <title>What Is HSTS? HTTP Strict Transport Security Explained</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Sun, 12 Jul 2026 11:40:00 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/what-is-hsts-http-strict-transport-security-explained-1o17</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/what-is-hsts-http-strict-transport-security-explained-1o17</guid>
      <description>&lt;p&gt;Your site probably redirects to HTTPS already, and the padlock shows up just fine. But every time a returning visitor types your address without &lt;code&gt;https://&lt;/code&gt;, their browser still sends one unencrypted HTTP request before your redirect kicks in. On hostile networks — airport Wi-Fi, hotel hotspots, a compromised router — that single request is the opening an attacker needs. HTTP Strict Transport Security (HSTS) closes it for good: one response header that tells browsers to never speak plain HTTP to your domain again.&lt;/p&gt;

&lt;p&gt;The gap is real: according to &lt;a href="https://w3techs.com/technologies/details/ce-httpsdefault" rel="noopener noreferrer"&gt;W3Techs&lt;/a&gt; (July 2026), 90.1% of all websites now default to HTTPS, but only &lt;a href="https://w3techs.com/technologies/details/ce-hsts" rel="noopener noreferrer"&gt;34.1% send an HSTS header&lt;/a&gt;. Nine sites in ten encrypt; barely one in three actually &lt;em&gt;enforces&lt;/em&gt; it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is HSTS?
&lt;/h2&gt;

&lt;p&gt;HSTS (HTTP Strict Transport Security) is a web security policy mechanism standardized in &lt;a href="https://datatracker.ietf.org/doc/html/rfc6797" rel="noopener noreferrer"&gt;RFC 6797&lt;/a&gt; back in 2012. It consists of a single HTTP response header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a browser receives this header over a &lt;strong&gt;valid HTTPS connection&lt;/strong&gt;, it remembers — for &lt;code&gt;max-age&lt;/code&gt; seconds — that your host is HTTPS-only. From that moment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every &lt;code&gt;http://&lt;/code&gt; link, bookmark, or typed address for your domain is rewritten to &lt;code&gt;https://&lt;/code&gt; &lt;em&gt;inside the browser&lt;/em&gt; (an internal 307 redirect), before a single packet leaves the device.&lt;/li&gt;
&lt;li&gt;Certificate warnings on your site become &lt;strong&gt;non-bypassable&lt;/strong&gt;: no "Proceed anyway" link. If the certificate is broken — or someone is intercepting the connection — the browser refuses, full stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All major browsers — Chrome, Edge, Firefox, Safari — have supported HSTS for roughly a decade, on desktop and mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1555949963-aa79dcee981c%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1200%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1555949963-aa79dcee981c%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1200%26q%3D80" alt="Server configuration code on a laptop screen" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an HTTPS redirect alone isn't enough
&lt;/h2&gt;

&lt;p&gt;A classic 301 redirect from HTTP to HTTPS happens &lt;strong&gt;server-side&lt;/strong&gt; — the browser must first send the plain-HTTP request, and an attacker sitting between your visitor and your server sees it before your redirect ever answers. That is exactly how &lt;em&gt;SSL stripping&lt;/em&gt; works, a downgrade attack demonstrated by Moxie Marlinspike back in 2009: the attacker silently keeps the victim on HTTP while talking HTTPS to the real server, reading everything in transit.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protection&lt;/th&gt;
&lt;th&gt;301 redirect only&lt;/th&gt;
&lt;th&gt;HSTS&lt;/th&gt;
&lt;th&gt;HSTS + preload&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Later visits upgraded before any network request&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The very first visit protected&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificate errors non-bypassable&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Defeats SSL stripping (downgrade attacks)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ after first visit&lt;/td&gt;
&lt;td&gt;✅ always&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;What each level of HTTPS enforcement actually protects.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Keep the redirect — you still need it for first-time visitors and for preload eligibility — but understand what it cannot do alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  How HSTS works, step by step
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;First visit.&lt;/strong&gt; The browser loads &lt;code&gt;https://example.com&lt;/code&gt;, the response carries the &lt;code&gt;Strict-Transport-Security&lt;/code&gt; header, and the policy is cached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every visit after that.&lt;/strong&gt; Any attempt to reach &lt;code&gt;http://example.com&lt;/code&gt; is upgraded internally to HTTPS. A packet capture on the network would show no plaintext request at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The timer slides.&lt;/strong&gt; Each new HTTPS response containing the header resets &lt;code&gt;max-age&lt;/code&gt;, so regular visitors stay protected indefinitely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard failure on bad certificates.&lt;/strong&gt; Expired, self-signed, or man-in-the-middle certificates produce an error page that cannot be clicked through.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The three directives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Directive&lt;/th&gt;
&lt;th&gt;Required?&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Recommended value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max-age&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;How long (in seconds) the browser enforces HTTPS-only&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;31536000&lt;/code&gt; (1 year); &lt;code&gt;63072000&lt;/code&gt; (2 years) is also common&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;includeSubDomains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;For preload&lt;/td&gt;
&lt;td&gt;Extends the policy to every subdomain&lt;/td&gt;
&lt;td&gt;Only after confirming &lt;strong&gt;all&lt;/strong&gt; subdomains serve HTTPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;For preload&lt;/td&gt;
&lt;td&gt;Opts in to browsers' built-in preload list&lt;/td&gt;
&lt;td&gt;After running at a 1-year &lt;code&gt;max-age&lt;/code&gt; without issues&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to enable HSTS on your server
&lt;/h2&gt;

&lt;p&gt;Add the header &lt;strong&gt;only in the HTTPS configuration&lt;/strong&gt; — browsers ignore HSTS sent over plain HTTP, as required by the spec.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nginx&lt;/strong&gt; (inside the &lt;code&gt;server&lt;/code&gt; block that listens on 443):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt; &lt;span class="s"&gt;"max-age=31536000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;includeSubDomains"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Apache&lt;/strong&gt; (with &lt;code&gt;mod_headers&lt;/code&gt; enabled, in the HTTPS vhost):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="nc"&gt;Header&lt;/span&gt; &lt;span class="ss"&gt;always&lt;/span&gt; &lt;span class="ss"&gt;set&lt;/span&gt; Strict-Transport-Security "max-age=31536000; includeSubDomains"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;IIS&lt;/strong&gt; (&lt;code&gt;web.config&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;httpProtocol&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;customHeaders&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Strict-Transport-Security"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"max-age=31536000; includeSubDomains"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/customHeaders&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/httpProtocol&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cloudflare:&lt;/strong&gt; SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → Enable, then set max-age and subdomain options in the dashboard.&lt;/p&gt;

&lt;p&gt;Then confirm the header is actually served: open your site, check the &lt;strong&gt;Network tab in your browser's DevTools&lt;/strong&gt;, and look for &lt;code&gt;strict-transport-security&lt;/code&gt; among the response headers — or simply run the free FortifyNet scan, which flags a missing or weak HSTS policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Roll it out gradually
&lt;/h3&gt;

&lt;p&gt;A mistaken HSTS policy locks visitors out of any broken HTTP-only resource for the full remaining &lt;code&gt;max-age&lt;/code&gt; — you cannot take it back remotely except by serving &lt;code&gt;max-age=0&lt;/code&gt; over valid HTTPS to each affected browser. Ramp up instead:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Header value&lt;/th&gt;
&lt;th&gt;Hold for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 — Test&lt;/td&gt;
&lt;td&gt;&lt;code&gt;max-age=300&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A day or two&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 — Short&lt;/td&gt;
&lt;td&gt;&lt;code&gt;max-age=86400&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 — Medium&lt;/td&gt;
&lt;td&gt;&lt;code&gt;max-age=2592000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 — Full&lt;/td&gt;
&lt;td&gt;&lt;code&gt;max-age=31536000; includeSubDomains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3+ months&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 — Preload&lt;/td&gt;
&lt;td&gt;&lt;code&gt;max-age=31536000; includeSubDomains; preload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  HSTS preload: closing the first-visit gap
&lt;/h2&gt;

&lt;p&gt;Plain HSTS is &lt;em&gt;trust on first use&lt;/em&gt;: the very first request from a brand-new visitor is still unprotected until the first header arrives. The preload list fixes that — your domain ships &lt;strong&gt;inside the browser itself&lt;/strong&gt; as HTTPS-only, so even visit number one never touches plain HTTP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1510915228340-29c85a43dcfe%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1200%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1510915228340-29c85a43dcfe%3Fauto%3Dformat%26fit%3Dcrop%26w%3D1200%26q%3D80" alt="Developer verifying a website's HTTPS configuration on a laptop" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Submission is free at &lt;a href="https://hstspreload.org/" rel="noopener noreferrer"&gt;hstspreload.org&lt;/a&gt; (the Chromium-maintained list, also consumed by Edge, Firefox, and Safari). The requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A valid TLS certificate.&lt;/li&gt;
&lt;li&gt;HTTP redirects to HTTPS &lt;strong&gt;on the same host&lt;/strong&gt; (port 80 → 443).&lt;/li&gt;
&lt;li&gt;The HSTS header served on the HTTPS response of the base domain with &lt;code&gt;max-age&lt;/code&gt; of at least 31536000 (1 year), plus both &lt;code&gt;includeSubDomains&lt;/code&gt; and &lt;code&gt;preload&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Every subdomain — including &lt;code&gt;www&lt;/code&gt; — reachable over HTTPS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Treat preload as a one-way door.&lt;/strong&gt; Removal from the list takes months to propagate through browser releases. Do not preload until every subdomain — including internal ones like &lt;code&gt;intranet.&lt;/code&gt; or &lt;code&gt;mail.&lt;/code&gt; — has working HTTPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adoption in 2026: HTTPS everywhere, enforcement lagging
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%2Frender%2Fzf-30264ce3-9f1d-4b0d-a179-41c4f2c6e659" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fquickchart.io%2Fchart%2Frender%2Fzf-30264ce3-9f1d-4b0d-a179-41c4f2c6e659" alt="Bar chart: 90.1% of websites default to HTTPS but only 34.1% send an HSTS header (W3Techs, July 2026)" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;HTTPS is near-universal, yet only about a third of sites enforce it with HSTS (source: W3Techs, July 2026).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Browsers are pushing hard in the same direction. In &lt;a href="https://security.googleblog.com/2025/10/https-by-default.html" rel="noopener noreferrer"&gt;Chrome 147 (April 2026), Google enabled "Always Use Secure Connections" for the 1 billion+ users with Enhanced Safe Browsing&lt;/a&gt;, and with &lt;strong&gt;Chrome 154 (October 2026) it becomes the default for everyone&lt;/strong&gt;: Chrome will attempt HTTPS first and warn before loading public HTTP sites.&lt;/p&gt;

&lt;p&gt;Does that make HSTS obsolete? No. Chrome's warning is &lt;strong&gt;bypassable&lt;/strong&gt; by the user; HSTS is your server's own &lt;strong&gt;non-bypassable&lt;/strong&gt; guarantee. It works in every browser regardless of settings, covers all your subdomains, and blocks certificate click-through. The two complement each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common HSTS mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enabling &lt;code&gt;includeSubDomains&lt;/code&gt; blind&lt;/strong&gt; — one forgotten HTTP-only subdomain (intranet, staging, a printer portal) becomes unreachable for the whole &lt;code&gt;max-age&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sending the header over HTTP&lt;/strong&gt; — harmless but useless; browsers ignore it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A &lt;code&gt;max-age&lt;/code&gt; of a few minutes in production&lt;/strong&gt; — near-zero protection, and it fails preload requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting HSTS after a server or CDN migration&lt;/strong&gt; — the policy silently expires and nobody notices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does HSTS replace my HTTP→HTTPS redirect?&lt;/strong&gt;&lt;br&gt;
No. Keep the redirect: first-time visitors need it, and the preload list requires it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I undo HSTS?&lt;/strong&gt;&lt;br&gt;
Serve &lt;code&gt;Strict-Transport-Security: max-age=0&lt;/code&gt; over HTTPS and browsers drop the policy on their next visit. Preload removal is much slower — months — which is why you ramp up carefully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does HSTS affect SEO?&lt;/strong&gt;&lt;br&gt;
Only positively: it guarantees users and crawlers land on one canonical HTTPS version of your site. There is no downside for rankings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I know if my site sends HSTS?&lt;/strong&gt;&lt;br&gt;
Check the response headers in your browser's DevTools (Network tab) for &lt;code&gt;strict-transport-security&lt;/code&gt; — or run a free FortifyNet scan, which checks HSTS along with the rest of your security headers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is HSTS all I need?&lt;/strong&gt;&lt;br&gt;
It is one of several headers a hardened site sends. Pair it with Content-Security-Policy, X-Content-Type-Options and friends — see our &lt;a href="https://fortifynet.com/blog/http-security-headers-guide" rel="noopener noreferrer"&gt;complete security headers guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your HSTS in 60 seconds
&lt;/h2&gt;

&lt;p&gt;The free &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet scan&lt;/a&gt; tests your SSL/TLS setup, HSTS and all other security headers, DNS and email authentication, and dark-web exposure — in about a minute, no signup required. If HSTS is missing or misconfigured, you will see exactly what to fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  Related guides
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/http-security-headers-guide" rel="noopener noreferrer"&gt;HTTP Security Headers: The Complete Guide for 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/http-security-headers-guide" rel="noopener noreferrer"&gt;HTTP Security Headers with nginx &amp;amp; Apache examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/ssl-tls-certificate-security" rel="noopener noreferrer"&gt;SSL Certificates: A+ Rating in SSL Labs — Complete Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fortifynet.com/blog/your-connection-is-not-private" rel="noopener noreferrer"&gt;"Your Connection Is Not Private": What It Means and How to Fix It&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com/blog/what-is-hsts" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. FortifyNet is a free 60-second website security audit — I'm the founder, happy to answer questions in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>https</category>
      <category>tls</category>
    </item>
    <item>
      <title>Best Semrush Alternatives in 2026 (For Website Security &amp; Audits)</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Tue, 30 Jun 2026 08:20:10 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/best-semrush-alternatives-in-2026-for-website-security-audits-41om</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/best-semrush-alternatives-in-2026-for-website-security-audits-41om</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. Reposting here for the community.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Look for a Semrush Alternative?
&lt;/h2&gt;

&lt;p&gt;Semrush is genuinely powerful. If you're a digital marketing agency managing keyword rankings, backlink profiles, and competitor analysis, it's hard to beat. But for many website owners, it's overkill — and overpriced.&lt;/p&gt;

&lt;p&gt;Common frustrations that drive people to search for alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price&lt;/strong&gt;: Semrush starts at $139.95/month. That's steep if you just want to audit your website.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complexity&lt;/strong&gt;: The platform has 50+ tools. Finding what you need takes time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security blind spots&lt;/strong&gt;: Semrush focuses on SEO. It won't tell you about your SSL expiry, GDPR compliance gaps, or dark web leaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong tool for the job&lt;/strong&gt;: If you need a security audit, you don't need keyword rankings.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Semrush Actually Does Well
&lt;/h2&gt;

&lt;p&gt;Before comparing, let's be honest about Semrush's strengths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keyword research&lt;/strong&gt; — world-class database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backlink analysis&lt;/strong&gt; — large, frequently updated index&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical SEO audit&lt;/strong&gt; — crawls your site for broken links, redirect issues, crawlability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive intelligence&lt;/strong&gt; — see what competitors rank for&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content marketing tools&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it doesn't cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSL certificate health&lt;/li&gt;
&lt;li&gt;Security headers&lt;/li&gt;
&lt;li&gt;DNS configuration&lt;/li&gt;
&lt;li&gt;Dark web monitoring&lt;/li&gt;
&lt;li&gt;GDPR / NIS2 compliance posture&lt;/li&gt;
&lt;li&gt;JavaScript secret exposure&lt;/li&gt;
&lt;li&gt;Real-time security monitoring&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Top Semrush Alternatives in 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. FortifyNet ⭐ (Best for Technical Security Audits)
&lt;/h3&gt;

&lt;p&gt;If the reason you're considering Semrush is to run website audits — not rank keywords — then &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet&lt;/a&gt; is built exactly for that use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full technical website audit (SSL, DNS, security headers, performance, compliance)&lt;/li&gt;
&lt;li&gt;Continuous monitoring with automated alerts when issues are detected&lt;/li&gt;
&lt;li&gt;Dark web leak monitoring for your domain and company emails&lt;/li&gt;
&lt;li&gt;GDPR and NIS2 compliance scoring&lt;/li&gt;
&lt;li&gt;Exposure scan (JavaScript secrets, exposed files, cloud bucket leaks)&lt;/li&gt;
&lt;li&gt;Multi-domain management for agencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Purpose-built for security audits, not SEO keyword fluff&lt;br&gt;
✅ Actionable recommendations with severity ratings&lt;br&gt;
✅ Continuous monitoring — not just a point-in-time snapshot&lt;br&gt;
✅ Affordable: starts at free trial, paid plans significantly cheaper than Semrush&lt;br&gt;
✅ Covers what Semrush misses: SSL, headers, dark web, GDPR&lt;br&gt;
✅ Clean UI — no 50-tool overwhelm&lt;br&gt;
✅ Ideal for agencies managing multiple client websites&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ No keyword research or backlink analysis&lt;br&gt;
❌ Not an SEO content marketing tool&lt;br&gt;
❌ Newer platform than Semrush&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; If your goal is "I want to know everything wrong with my website from a security and technical perspective," FortifyNet wins outright. &lt;a href="https://fortifynet.com/Onboarding" rel="noopener noreferrer"&gt;Start your free audit →&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Ahrefs
&lt;/h3&gt;

&lt;p&gt;Ahrefs is arguably Semrush's closest competitor — focused on backlinks and keyword research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Excellent backlink index (some say better than Semrush)&lt;br&gt;
✅ Good keyword explorer&lt;br&gt;
✅ Site audit tool for technical SEO&lt;br&gt;
✅ Slightly cheaper than Semrush ($129/month)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Still expensive for non-SEO professionals&lt;br&gt;
❌ Zero security features (no SSL, headers, dark web)&lt;br&gt;
❌ Not built for non-marketers&lt;br&gt;
❌ Limited free tier&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Moz Pro
&lt;/h3&gt;

&lt;p&gt;Moz was one of the original SEO tools and still holds its own for domain authority tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Good Domain Authority (DA) metric widely used in industry&lt;br&gt;
✅ Solid site crawl for technical SEO issues&lt;br&gt;
✅ More approachable than Semrush/Ahrefs for beginners&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Smaller keyword/backlink database than Semrush&lt;br&gt;
❌ No security features&lt;br&gt;
❌ Pricing similar to competitors&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Screaming Frog SEO Spider
&lt;/h3&gt;

&lt;p&gt;A technical SEO crawler loved by developers and SEO specialists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Very detailed technical crawl&lt;br&gt;
✅ Free up to 500 URLs&lt;br&gt;
✅ Runs locally — fast&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Desktop software, not cloud-based&lt;br&gt;
❌ No monitoring or alerting&lt;br&gt;
❌ No security, SSL, or compliance features&lt;br&gt;
❌ Requires technical knowledge to interpret&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Ubersuggest (Neil Patel)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Much more affordable&lt;br&gt;
✅ Good for beginners&lt;br&gt;
✅ Lifetime deal available&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Smaller data sets than Semrush/Ahrefs&lt;br&gt;
❌ Limited technical SEO depth&lt;br&gt;
❌ No security features&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;FortifyNet&lt;/th&gt;
&lt;th&gt;Semrush&lt;/th&gt;
&lt;th&gt;Ahrefs&lt;/th&gt;
&lt;th&gt;Moz Pro&lt;/th&gt;
&lt;th&gt;Screaming Frog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SSL analysis&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS audit&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security headers&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark web monitoring&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GDPR compliance&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Technical SEO audit&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keyword research&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backlink analysis&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continuous monitoring&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free trial / low&lt;/td&gt;
&lt;td&gt;$139.95/mo&lt;/td&gt;
&lt;td&gt;$129/mo&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;Free / £259/yr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Real Difference: SEO vs. Security Audits
&lt;/h2&gt;

&lt;p&gt;Semrush is built for marketers. FortifyNet is built for website owners who want to know their site is safe, fast, and compliant.&lt;/p&gt;

&lt;p&gt;These are genuinely different needs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Semrush (or Ahrefs) if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are an SEO professional or agency&lt;/li&gt;
&lt;li&gt;Need keyword ranking data&lt;/li&gt;
&lt;li&gt;Manage backlink outreach campaigns&lt;/li&gt;
&lt;li&gt;Compete in content marketing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use FortifyNet if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Want to audit your website's security posture&lt;/li&gt;
&lt;li&gt;Need to verify SSL, DNS, and security headers are correct&lt;/li&gt;
&lt;li&gt;Must demonstrate GDPR/NIS2 compliance to clients or auditors&lt;/li&gt;
&lt;li&gt;Want continuous monitoring instead of periodic manual checks&lt;/li&gt;
&lt;li&gt;Manage multiple client websites and need one dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many teams actually use both — Semrush for SEO, FortifyNet for security. And since FortifyNet is significantly cheaper, the combined cost is often &lt;em&gt;less&lt;/em&gt; than Semrush alone.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much does Semrush cost?
&lt;/h3&gt;

&lt;p&gt;Semrush starts at $139.95/month for the Pro plan. Business plans can exceed $449/month. Annual billing offers a discount.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best free Semrush alternative?
&lt;/h3&gt;

&lt;p&gt;For technical website audits, FortifyNet's free trial is the most comprehensive option covering security, performance, DNS, and SSL. Screaming Frog offers a free tier for up to 500 URLs if you specifically need a technical SEO crawl.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can FortifyNet replace Semrush?
&lt;/h3&gt;

&lt;p&gt;For security audits, yes. For SEO keyword research and backlink analysis, no — they serve different purposes. FortifyNet covers the security blind spots that Semrush leaves entirely open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Semrush check SSL certificates?
&lt;/h3&gt;

&lt;p&gt;No. Semrush's site audit checks technical SEO factors like broken links and missing meta tags. It does not audit SSL certificates, HSTS configuration, or security headers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is FortifyNet good for agencies?
&lt;/h3&gt;

&lt;p&gt;Yes. FortifyNet supports multi-domain management, making it ideal for agencies managing security and performance for multiple client websites simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  What technical SEO issues does FortifyNet check?
&lt;/h3&gt;

&lt;p&gt;FortifyNet checks performance (Core Web Vitals via PageSpeed API), DNS configuration, SSL/TLS settings, security headers (CSP, HSTS, X-Frame-Options, etc.), server exposure, and compliance indicators — all the technical foundations that affect both security and SEO.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fortifynet.com/Onboarding" rel="noopener noreferrer"&gt;Try FortifyNet free →&lt;/a&gt; | &lt;a href="https://fortifynet.com/Features" rel="noopener noreferrer"&gt;See all features →&lt;/a&gt; | &lt;a href="https://fortifynet.com/Pricing" rel="noopener noreferrer"&gt;Compare plans →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>seo</category>
      <category>webdev</category>
      <category>tools</category>
    </item>
    <item>
      <title>Best MX Toolbox Alternatives in 2026 (Honest Review)</title>
      <dc:creator>Håkan Fägnell</dc:creator>
      <pubDate>Tue, 30 Jun 2026 08:15:22 +0000</pubDate>
      <link>https://dev.to/hkan_fgnell_322b4aba3d6/best-mx-toolbox-alternatives-in-2026-honest-review-2l4m</link>
      <guid>https://dev.to/hkan_fgnell_322b4aba3d6/best-mx-toolbox-alternatives-in-2026-honest-review-2l4m</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet blog&lt;/a&gt;. Reposting here for the community.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why People Search for MX Toolbox Alternatives
&lt;/h2&gt;

&lt;p&gt;MX Toolbox has been around for years. It's a go-to for IT admins who need quick DNS lookups, MX record checks, and blacklist monitoring. But times change. Modern websites need more than just email diagnostics — they need full-stack security awareness.&lt;/p&gt;

&lt;p&gt;If you've landed here, you're probably frustrated with one of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MX Toolbox's free tier limitations&lt;/li&gt;
&lt;li&gt;Lack of actionable security recommendations&lt;/li&gt;
&lt;li&gt;No continuous monitoring&lt;/li&gt;
&lt;li&gt;No performance or SSL insights in one place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's walk through the real alternatives, including their pros, cons, and pricing.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does MX Toolbox Actually Do?
&lt;/h2&gt;

&lt;p&gt;Before comparing alternatives, let's be fair. MX Toolbox is genuinely useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MX record lookups&lt;/strong&gt; — quickly check where your email routes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blacklist checks&lt;/strong&gt; — see if your IP or domain appears on spam lists&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SPF/DKIM/DMARC validation&lt;/strong&gt; — essential for email deliverability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS propagation checks&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it stops there. There's no SSL monitoring, no security headers check, no performance scoring, and no dark web monitoring. It's a specialist tool in a world that now needs generalists.&lt;/p&gt;




&lt;h2&gt;
  
  
  Top MX Toolbox Alternatives
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. FortifyNet ⭐ (Best Overall)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fortifynet.com" rel="noopener noreferrer"&gt;FortifyNet&lt;/a&gt; is a full-stack website and domain security platform built for the modern web. It goes far beyond what MX Toolbox offers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS health check (including MX, SPF, DKIM, DMARC)&lt;/li&gt;
&lt;li&gt;Blacklist monitoring across 80+ providers&lt;/li&gt;
&lt;li&gt;SSL/TLS certificate analysis with expiry alerts&lt;/li&gt;
&lt;li&gt;Security headers audit (CSP, HSTS, X-Frame-Options, etc.)&lt;/li&gt;
&lt;li&gt;Performance scoring using real metrics&lt;/li&gt;
&lt;li&gt;Dark web leak monitoring&lt;/li&gt;
&lt;li&gt;GDPR/NIS2 compliance checks&lt;/li&gt;
&lt;li&gt;Continuous automated monitoring with alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ All-in-one platform — no juggling 5 different tools&lt;br&gt;
✅ Actionable recommendations, not just raw data&lt;br&gt;
✅ Continuous monitoring with email alerts&lt;br&gt;
✅ Clean, modern UI designed for non-technical users too&lt;br&gt;
✅ Covers compliance requirements (GDPR, NIS2)&lt;br&gt;
✅ Affordable plans starting at free trial&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Newer platform, so fewer community forum discussions&lt;br&gt;
❌ Not focused solely on email/DNS (by design — it does much more)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; If you want to replace MX Toolbox &lt;em&gt;and&lt;/em&gt; reduce 4–5 other tools, FortifyNet is the obvious choice. &lt;a href="https://fortifynet.com/Onboarding" rel="noopener noreferrer"&gt;Start your free audit →&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. MXToolbox (The Original)
&lt;/h3&gt;

&lt;p&gt;Fair is fair — let's put MXToolbox itself in context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Very fast DNS lookups&lt;br&gt;
✅ Good blacklist database&lt;br&gt;
✅ Free tier available&lt;br&gt;
✅ Long history and trusted by IT professionals&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ No SSL monitoring&lt;br&gt;
❌ No security headers checks&lt;br&gt;
❌ No performance insights&lt;br&gt;
❌ Alert system requires paid plan&lt;br&gt;
❌ UI feels dated compared to modern alternatives&lt;br&gt;
❌ No GDPR/compliance context&lt;/p&gt;




&lt;h3&gt;
  
  
  3. DNSChecker.org
&lt;/h3&gt;

&lt;p&gt;A solid free tool for DNS propagation checks globally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Free and simple to use&lt;br&gt;
✅ Good global DNS propagation view&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Zero security recommendations&lt;br&gt;
❌ No monitoring capabilities&lt;br&gt;
❌ No SSL, performance, or compliance checks&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Dmarcian
&lt;/h3&gt;

&lt;p&gt;Focused specifically on DMARC reporting and email authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Deep DMARC analytics&lt;br&gt;
✅ Good for large email senders&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ Very narrow focus — only email auth&lt;br&gt;
❌ Can be expensive for small teams&lt;br&gt;
❌ No website security features&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Sucuri SiteCheck
&lt;/h3&gt;

&lt;p&gt;A website scanner focused on malware detection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;br&gt;
✅ Good malware scanning&lt;br&gt;
✅ Reputation check included&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;br&gt;
❌ No DNS/email diagnostics&lt;br&gt;
❌ Limited free checks&lt;br&gt;
❌ No performance or headers analysis&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;FortifyNet&lt;/th&gt;
&lt;th&gt;MXToolbox&lt;/th&gt;
&lt;th&gt;DNSChecker&lt;/th&gt;
&lt;th&gt;Dmarcian&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MX / DNS checks&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPF / DKIM / DMARC&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blacklist check&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL monitoring&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security headers&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance score&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark web monitoring&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GDPR compliance&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Continuous monitoring&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ (paid)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ (paid)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price (entry)&lt;/td&gt;
&lt;td&gt;Free trial&lt;/td&gt;
&lt;td&gt;Free / $49/mo&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$199/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why FortifyNet Is the Best MX Toolbox Alternative in 2026
&lt;/h2&gt;

&lt;p&gt;The digital threat landscape in 2026 isn't just about email anymore. A misconfigured DNS record is serious. But so is an expired SSL certificate, a missing Content Security Policy header, or your company domain showing up in a dark web data dump.&lt;/p&gt;

&lt;p&gt;MX Toolbox solves one slice of the problem. FortifyNet solves the whole picture — and it does it with continuous monitoring, so you're not relying on manually running checks.&lt;/p&gt;

&lt;p&gt;For agencies, consultants, and businesses managing multiple websites, FortifyNet's multi-domain support makes it significantly more cost-effective than stitching together 4–5 point solutions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fortifynet.com/Onboarding" rel="noopener noreferrer"&gt;Try FortifyNet free →&lt;/a&gt; | &lt;a href="https://fortifynet.com/Features" rel="noopener noreferrer"&gt;See all features →&lt;/a&gt; | &lt;a href="https://fortifynet.com/Pricing" rel="noopener noreferrer"&gt;Compare plans →&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is MX Toolbox free?
&lt;/h3&gt;

&lt;p&gt;MX Toolbox offers a free tier for basic lookups. Advanced monitoring, alerts, and API access require a paid subscription starting at around $49/month.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best free MX Toolbox alternative?
&lt;/h3&gt;

&lt;p&gt;FortifyNet offers a free trial that includes DNS checks, SSL analysis, security headers, and performance scoring — making it the most comprehensive free starting point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can FortifyNet replace MX Toolbox?
&lt;/h3&gt;

&lt;p&gt;Yes. FortifyNet covers all DNS and email security checks MX Toolbox offers, plus SSL, performance, security headers, dark web monitoring, and GDPR compliance — in one dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does FortifyNet check blacklists?
&lt;/h3&gt;

&lt;p&gt;Yes. FortifyNet checks your domain and IP against 80+ blacklist providers as part of its standard DNS audit.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is DMARC and why does it matter?
&lt;/h3&gt;

&lt;p&gt;DMARC (Domain-based Message Authentication, Reporting &amp;amp; Conformance) is a protocol that tells receiving mail servers what to do with emails that fail SPF or DKIM checks. It protects your domain from being used in phishing attacks. Both MX Toolbox and FortifyNet can validate your DMARC setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is FortifyNet GDPR compliant?
&lt;/h3&gt;

&lt;p&gt;FortifyNet is built with GDPR and NIS2 compliance in mind. It not only helps you check your own site's compliance posture but also operates transparently regarding data it processes.&lt;/p&gt;

</description>
      <category>security</category>
      <category>dns</category>
      <category>sysadmin</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
