<?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: GlitchGuard</title>
    <description>The latest articles on DEV Community by GlitchGuard (@glitchguard).</description>
    <link>https://dev.to/glitchguard</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%2F4021776%2F0b9d96e4-e55a-438e-9e4d-5b29d9327a95.png</url>
      <title>DEV Community: GlitchGuard</title>
      <link>https://dev.to/glitchguard</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/glitchguard"/>
    <language>en</language>
    <item>
      <title>SPF, DKIM and DMARC: A Practical Email Authentication Guide</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Sun, 09 Aug 2026 16:48:19 +0000</pubDate>
      <link>https://dev.to/getglitchguard/spf-dkim-and-dmarc-a-practical-email-authentication-guide-4g15</link>
      <guid>https://dev.to/getglitchguard/spf-dkim-and-dmarc-a-practical-email-authentication-guide-4g15</guid>
      <description>&lt;h1&gt;
  
  
  SPF, DKIM and DMARC: A Practical Email Authentication Guide
&lt;/h1&gt;

&lt;p&gt;Modern businesses rarely send email from only one system.&lt;/p&gt;

&lt;p&gt;A typical domain may send mail through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Workspace or Microsoft 365&lt;/li&gt;
&lt;li&gt;a CRM&lt;/li&gt;
&lt;li&gt;an ecommerce platform&lt;/li&gt;
&lt;li&gt;a marketing automation tool&lt;/li&gt;
&lt;li&gt;a support desk&lt;/li&gt;
&lt;li&gt;a booking system&lt;/li&gt;
&lt;li&gt;a transactional email provider&lt;/li&gt;
&lt;li&gt;password reset infrastructure&lt;/li&gt;
&lt;li&gt;billing software&lt;/li&gt;
&lt;li&gt;website contact forms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of those systems may send messages that appear to come from the same business domain.&lt;/p&gt;

&lt;p&gt;So how does a receiving mail server determine whether those messages are legitimate?&lt;/p&gt;

&lt;p&gt;That is where SPF, DKIM, and DMARC come in.&lt;/p&gt;

&lt;p&gt;They are related technologies, but they solve different problems.&lt;/p&gt;

&lt;p&gt;A useful mental model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPF   = Is this sending infrastructure authorized?

DKIM  = Does this message contain a valid cryptographic signature?

DMARC = Does successful authentication align with the domain
        visible to the recipient?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DMARC then adds policy and reporting on top of those authentication results.&lt;/p&gt;

&lt;p&gt;Let's break down how the three systems work.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. SPF: Sender Authorization
&lt;/h2&gt;

&lt;p&gt;SPF stands for &lt;strong&gt;Sender Policy Framework&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is published as a DNS TXT record and describes which mail infrastructure is authorized to send on behalf of a domain.&lt;/p&gt;

&lt;p&gt;A simplified SPF record might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=spf1 include:_spf.examplemail.com -all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A receiving mail server can evaluate the SPF policy when it receives a message.&lt;/p&gt;

&lt;p&gt;At a high level, it asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is the system delivering this message included in the sending policy for the relevant domain?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes, SPF can pass.&lt;/p&gt;

&lt;p&gt;If not, SPF may fail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common SPF mechanisms
&lt;/h3&gt;

&lt;p&gt;An SPF record may contain mechanisms such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ip4:
ip6:
a
mx
include:
exists:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also ends with a qualifier such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-all
~all
?all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The correct policy depends on the organization's mail architecture.&lt;/p&gt;

&lt;p&gt;Do not copy an SPF record from another domain without understanding what it authorizes.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Common SPF Problems
&lt;/h2&gt;

&lt;p&gt;SPF configurations often become messy as businesses add more email providers.&lt;/p&gt;

&lt;p&gt;Common problems include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no SPF record at all&lt;/li&gt;
&lt;li&gt;multiple SPF records&lt;/li&gt;
&lt;li&gt;old providers that were never removed&lt;/li&gt;
&lt;li&gt;missing current sending services&lt;/li&gt;
&lt;li&gt;malformed syntax&lt;/li&gt;
&lt;li&gt;excessive DNS lookups&lt;/li&gt;
&lt;li&gt;unnecessary nested &lt;code&gt;include&lt;/code&gt; mechanisms&lt;/li&gt;
&lt;li&gt;misunderstanding what SPF actually authenticates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multiple SPF records
&lt;/h3&gt;

&lt;p&gt;One common mistake is creating a second SPF record whenever a new provider is added.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=spf1 include:_spf.google.com -all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and separately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=spf1 include:mail.exampleprovider.com -all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Publishing multiple independent SPF policies for the same hostname can cause SPF evaluation problems.&lt;/p&gt;

&lt;p&gt;The legitimate services should normally be represented within one valid policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. SPF Does Not Authenticate the Visible From Address by Itself
&lt;/h2&gt;

&lt;p&gt;This is an important distinction.&lt;/p&gt;

&lt;p&gt;Consider an email displaying:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;From&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; sales@example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The recipient sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But SPF does not simply inspect that visible From header.&lt;/p&gt;

&lt;p&gt;SPF evaluates the domain associated with the SMTP envelope.&lt;/p&gt;

&lt;p&gt;That means SPF can technically pass while the domain authenticated through SPF differs from the domain visible to the recipient.&lt;/p&gt;

&lt;p&gt;This is one reason DMARC exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. SPF and Forwarding
&lt;/h2&gt;

&lt;p&gt;SPF can also be affected by forwarding.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sender
  ↓
Original Mail Server
  ↓
Forwarding Server
  ↓
Recipient
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The recipient may see the forwarding server as the infrastructure delivering the message.&lt;/p&gt;

&lt;p&gt;That server may not be authorized by the original sender's SPF record.&lt;/p&gt;

&lt;p&gt;The result can be an SPF failure even though the original sender was legitimate.&lt;/p&gt;

&lt;p&gt;DKIM often survives forwarding more effectively when the message is not modified in a way that breaks its signature.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. DKIM: Cryptographic Message Authentication
&lt;/h2&gt;

&lt;p&gt;DKIM stands for &lt;strong&gt;DomainKeys Identified Mail&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of primarily checking the sending infrastructure, DKIM adds a cryptographic signature to the email.&lt;/p&gt;

&lt;p&gt;The sending system has a private key.&lt;/p&gt;

&lt;p&gt;The corresponding public key is published in DNS.&lt;/p&gt;

&lt;p&gt;A receiving server can use the public key to verify the message signature.&lt;/p&gt;

&lt;p&gt;The architecture looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sending System
     |
     | Private Key
     v
Create DKIM Signature
     |
     v
Email Message
     |
     v
Receiving Server
     |
     | DNS lookup
     v
Public DKIM Key
     |
     v
Verify Signature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the verification succeeds, DKIM passes.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. DKIM Selectors
&lt;/h2&gt;

&lt;p&gt;DKIM uses something called a &lt;strong&gt;selector&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A DNS lookup may look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;selector1._domainkey.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The selector allows a domain to maintain multiple DKIM keys.&lt;/p&gt;

&lt;p&gt;This is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;key rotation&lt;/li&gt;
&lt;li&gt;multiple sending providers&lt;/li&gt;
&lt;li&gt;different applications&lt;/li&gt;
&lt;li&gt;migration between email systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An email's &lt;code&gt;DKIM-Signature&lt;/code&gt; header tells the receiving server which signing domain and selector to query.&lt;/p&gt;

&lt;p&gt;A simplified header may contain fields such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d=example.com;
s=selector1;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d = signing domain
s = selector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Common DKIM Problems
&lt;/h2&gt;

&lt;p&gt;Typical DKIM failures include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DKIM was never enabled&lt;/li&gt;
&lt;li&gt;the public key is missing from DNS&lt;/li&gt;
&lt;li&gt;the selector is incorrect&lt;/li&gt;
&lt;li&gt;the public/private keys no longer match&lt;/li&gt;
&lt;li&gt;a provider rotated its key but DNS was not updated&lt;/li&gt;
&lt;li&gt;the message was modified after signing&lt;/li&gt;
&lt;li&gt;the DKIM signature is malformed&lt;/li&gt;
&lt;li&gt;the signing domain does not align for DMARC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DKIM configuration should therefore be verified publicly rather than assuming that clicking "Enable DKIM" inside an email provider completed the DNS configuration correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. DKIM Can Pass While DMARC Still Fails
&lt;/h2&gt;

&lt;p&gt;This surprises many people.&lt;/p&gt;

&lt;p&gt;Suppose the recipient sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;From&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; support@example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the message carries a valid DKIM signature from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d=emailprovider.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The DKIM signature itself may be completely valid.&lt;/p&gt;

&lt;p&gt;DKIM therefore passes.&lt;/p&gt;

&lt;p&gt;But the signing domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;emailprovider.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;does not necessarily align with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That particular DKIM authentication result may therefore fail to satisfy DMARC.&lt;/p&gt;

&lt;p&gt;Again, this is where domain alignment becomes important.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. DMARC: Alignment, Policy and Reporting
&lt;/h2&gt;

&lt;p&gt;DMARC stands for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain-based Message Authentication, Reporting and Conformance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DMARC builds on SPF and DKIM.&lt;/p&gt;

&lt;p&gt;Its major contribution is connecting technical authentication with the domain that the recipient actually sees.&lt;/p&gt;

&lt;p&gt;Suppose a message displays:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;From&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; billing@example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The visible From domain is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DMARC asks whether successful SPF or DKIM authentication aligns with that domain.&lt;/p&gt;

&lt;p&gt;The simplified logic is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Email arrives
                       |
                       v
              Check SPF authentication
                       |
                       v
              Does SPF domain align?
                    /      \
                  Yes       No
                   |         |
                   |         v
                   |    Check DKIM
                   |         |
                   |         v
                   |   Does DKIM align?
                   |       /     \
                   |     Yes      No
                   |      |        |
                   v      v        v
                 DMARC PASS      DMARC FAIL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A message does not necessarily require both SPF and DKIM alignment.&lt;/p&gt;

&lt;p&gt;One valid aligned authentication path can be enough for DMARC to pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. SPF Alignment
&lt;/h2&gt;

&lt;p&gt;For SPF to satisfy DMARC:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SPF must pass.&lt;/li&gt;
&lt;li&gt;The SPF-authenticated domain must align with the visible From domain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visible From:
example.com

SPF-authenticated domain:
example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is aligned.&lt;/p&gt;

&lt;p&gt;A subdomain relationship may also align depending on the DMARC alignment mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. DKIM Alignment
&lt;/h2&gt;

&lt;p&gt;For DKIM to satisfy DMARC:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The DKIM signature must pass.&lt;/li&gt;
&lt;li&gt;The DKIM signing domain must align with the visible From domain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visible From:
example.com

DKIM d=:
example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aligned.&lt;/p&gt;

&lt;p&gt;Another example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visible From:
example.com

DKIM d=:
emailvendor.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DKIM may still pass technically.&lt;/p&gt;

&lt;p&gt;But that signature may not satisfy DMARC alignment.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. DMARC Alignment Modes
&lt;/h2&gt;

&lt;p&gt;DMARC supports relaxed and strict alignment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Relaxed alignment
&lt;/h3&gt;

&lt;p&gt;A subdomain can align with the organizational domain.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mail.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;may align with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Strict alignment
&lt;/h3&gt;

&lt;p&gt;The domains must match exactly.&lt;/p&gt;

&lt;p&gt;DMARC records can control this with settings such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aspf=s
adkim=s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aspf = SPF alignment mode
adkim = DKIM alignment mode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most organizations should understand the consequences before changing alignment modes.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. A Basic DMARC Record
&lt;/h2&gt;

&lt;p&gt;A simple DMARC record could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=DMARC1; p=none; rua=mailto:dmarc@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The record is normally published at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_dmarc.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important fields include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protocol version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Policy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rua=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aggregate report destination.&lt;/p&gt;

&lt;p&gt;Other options may control subdomain policy, alignment behavior, percentages, and additional reporting behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. DMARC Policies
&lt;/h2&gt;

&lt;p&gt;There are three main policy levels.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;p=none&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=DMARC1; p=none; rua=mailto:dmarc@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is primarily a monitoring policy.&lt;/p&gt;

&lt;p&gt;DMARC authentication is evaluated, but the domain is not requesting quarantine or rejection of failing messages.&lt;/p&gt;

&lt;p&gt;This is often useful when deploying DMARC initially.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;p=quarantine&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The domain asks receiving systems to treat DMARC-failing mail with greater suspicion.&lt;/p&gt;

&lt;p&gt;Depending on the receiver, that may mean spam-folder placement or other restricted handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;p=reject&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=DMARC1; p=reject; rua=mailto:dmarc@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The domain requests rejection of messages that fail DMARC.&lt;/p&gt;

&lt;p&gt;This provides stronger protection against certain forms of domain spoofing.&lt;/p&gt;

&lt;p&gt;However, moving immediately to &lt;code&gt;p=reject&lt;/code&gt; without understanding every legitimate sender can disrupt real email.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Why DMARC Reporting Matters
&lt;/h2&gt;

&lt;p&gt;DMARC reporting can help reveal who is sending mail associated with your domain.&lt;/p&gt;

&lt;p&gt;Reports may show infrastructure belonging to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Workspace&lt;/li&gt;
&lt;li&gt;Microsoft 365&lt;/li&gt;
&lt;li&gt;CRM systems&lt;/li&gt;
&lt;li&gt;ecommerce platforms&lt;/li&gt;
&lt;li&gt;marketing tools&lt;/li&gt;
&lt;li&gt;support platforms&lt;/li&gt;
&lt;li&gt;transactional providers&lt;/li&gt;
&lt;li&gt;old forgotten vendors&lt;/li&gt;
&lt;li&gt;unauthorized senders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That visibility is extremely useful.&lt;/p&gt;

&lt;p&gt;A business may discover that an application installed three years ago is still sending mail.&lt;/p&gt;

&lt;p&gt;Or that a legitimate provider was never configured correctly.&lt;/p&gt;

&lt;p&gt;Or that unknown infrastructure is attempting to use the domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Inventory Every Email Sender
&lt;/h2&gt;

&lt;p&gt;Before making major authentication changes, build an inventory.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Corporate email
Google Workspace

Marketing
Klaviyo

CRM
HubSpot

Transactional email
Amazon SES

Support
Zendesk

Website forms
Application backend

Billing
Stripe-related notifications

Ecommerce
Shopify
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then determine how each service uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SPF&lt;/li&gt;
&lt;li&gt;DKIM&lt;/li&gt;
&lt;li&gt;custom return paths&lt;/li&gt;
&lt;li&gt;custom DKIM domains&lt;/li&gt;
&lt;li&gt;DMARC alignment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is much safer than editing DNS reactively.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Authentication Flow Example
&lt;/h2&gt;

&lt;p&gt;Consider this message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;From: orders@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The business sends through an ecommerce email provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  SPF
&lt;/h3&gt;

&lt;p&gt;The provider's infrastructure is authorized.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPF: PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DKIM
&lt;/h3&gt;

&lt;p&gt;The provider signs with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d=example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DKIM: PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DMARC
&lt;/h3&gt;

&lt;p&gt;Visible From:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DKIM signing domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aligned.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DMARC: PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now consider another message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;From: orders@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DKIM signs using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d=vendor-mail.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DKIM: PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that domain may not align with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If SPF also fails alignment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DMARC: FAIL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This illustrates why checking only "DKIM passed" is not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Common Authentication Mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Multiple SPF records
&lt;/h3&gt;

&lt;p&gt;Combine legitimate sending sources into one valid SPF policy instead of publishing multiple independent SPF records.&lt;/p&gt;

&lt;h3&gt;
  
  
  Missing DKIM selectors
&lt;/h3&gt;

&lt;p&gt;Verify that every configured selector actually resolves in public DNS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passing SPF but failing DMARC
&lt;/h3&gt;

&lt;p&gt;Inspect the SPF-authenticated domain and compare it with the visible From domain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passing DKIM but failing DMARC
&lt;/h3&gt;

&lt;p&gt;Inspect the DKIM &lt;code&gt;d=&lt;/code&gt; domain and check alignment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing DMARC and ignoring reports
&lt;/h3&gt;

&lt;p&gt;DMARC provides visibility only when the organization actually monitors its sending environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcing too early
&lt;/h3&gt;

&lt;p&gt;Do not jump directly from no DMARC to aggressive rejection without identifying legitimate senders.&lt;/p&gt;

&lt;h3&gt;
  
  
  Forgetting application email
&lt;/h3&gt;

&lt;p&gt;Authentication audits often focus only on employee mailboxes.&lt;/p&gt;

&lt;p&gt;Do not forget:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;password resets&lt;/li&gt;
&lt;li&gt;invoices&lt;/li&gt;
&lt;li&gt;order receipts&lt;/li&gt;
&lt;li&gt;shipping notifications&lt;/li&gt;
&lt;li&gt;support replies&lt;/li&gt;
&lt;li&gt;booking confirmations&lt;/li&gt;
&lt;li&gt;website forms&lt;/li&gt;
&lt;li&gt;CRM automation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  19. SPF, DKIM and DMARC Do Not Guarantee Inbox Placement
&lt;/h2&gt;

&lt;p&gt;Passing all three is important.&lt;/p&gt;

&lt;p&gt;But email authentication is not equivalent to deliverability.&lt;/p&gt;

&lt;p&gt;Mailbox providers may also consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sender reputation&lt;/li&gt;
&lt;li&gt;IP reputation&lt;/li&gt;
&lt;li&gt;domain reputation&lt;/li&gt;
&lt;li&gt;complaint rates&lt;/li&gt;
&lt;li&gt;spam reports&lt;/li&gt;
&lt;li&gt;recipient engagement&lt;/li&gt;
&lt;li&gt;list quality&lt;/li&gt;
&lt;li&gt;bounce rates&lt;/li&gt;
&lt;li&gt;sending volume&lt;/li&gt;
&lt;li&gt;sending consistency&lt;/li&gt;
&lt;li&gt;message content&lt;/li&gt;
&lt;li&gt;unsubscribe behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of authentication as identity verification.&lt;/p&gt;

&lt;p&gt;It gives receiving systems stronger evidence that the message legitimately relates to the claimed domain.&lt;/p&gt;

&lt;p&gt;It does not force the receiving system to place the message in the inbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. Practical Email Authentication Checklist
&lt;/h2&gt;

&lt;p&gt;Use this when reviewing a business domain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Inventory every email sending service&lt;/li&gt;
&lt;li&gt;[ ] Confirm an SPF record exists&lt;/li&gt;
&lt;li&gt;[ ] Confirm only one valid SPF policy exists&lt;/li&gt;
&lt;li&gt;[ ] Remove obsolete SPF senders&lt;/li&gt;
&lt;li&gt;[ ] Check SPF DNS lookup complexity&lt;/li&gt;
&lt;li&gt;[ ] Enable DKIM for each supported provider&lt;/li&gt;
&lt;li&gt;[ ] Verify DKIM selectors publicly&lt;/li&gt;
&lt;li&gt;[ ] Check DKIM signing domains&lt;/li&gt;
&lt;li&gt;[ ] Publish a valid DMARC record&lt;/li&gt;
&lt;li&gt;[ ] Configure aggregate reporting&lt;/li&gt;
&lt;li&gt;[ ] Verify SPF alignment&lt;/li&gt;
&lt;li&gt;[ ] Verify DKIM alignment&lt;/li&gt;
&lt;li&gt;[ ] Monitor before increasing enforcement&lt;/li&gt;
&lt;li&gt;[ ] Review transactional email systems&lt;/li&gt;
&lt;li&gt;[ ] Review marketing platforms&lt;/li&gt;
&lt;li&gt;[ ] Review support systems&lt;/li&gt;
&lt;li&gt;[ ] Remove providers that are no longer used&lt;/li&gt;
&lt;li&gt;[ ] Retest after DNS or provider changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  21. Useful GlitchGuard Checks
&lt;/h2&gt;

&lt;p&gt;You can inspect individual authentication components using:&lt;/p&gt;

&lt;p&gt;SPF Checker:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/spf-checker" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/spf-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DKIM Checker:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/dkim-checker" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/dkim-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DMARC Checker:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/dmarc-checker" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/dmarc-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MX Lookup:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/mx-lookup" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/mx-lookup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tools are useful for inspecting what DNS currently publishes before changing records.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;SPF, DKIM, and DMARC become much easier to understand when each technology has a separate job.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPF
→ Which infrastructure is authorized?

DKIM
→ Is there a valid cryptographic signature?

DMARC
→ Does valid authentication align with the visible From domain?

DMARC Policy
→ What should receivers do when authentication fails?

DMARC Reporting
→ What sending activity should the domain owner know about?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The biggest mistake is treating email authentication as a checkbox.&lt;/p&gt;

&lt;p&gt;A modern business may have many legitimate sending systems.&lt;/p&gt;

&lt;p&gt;You need to understand the entire sending environment.&lt;/p&gt;

&lt;p&gt;Then authenticate it deliberately.&lt;/p&gt;

&lt;p&gt;Original GlitchGuard guide:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/blog/spf-dkim-dmarc-explained?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=email_authentication" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/spf-dkim-dmarc-explained?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=email_authentication&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check your SPF record:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/spf-checker" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/spf-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check your DKIM record:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/dkim-checker" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/dkim-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check your DMARC policy:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/dmarc-checker" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/dmarc-checker&lt;/a&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>security</category>
      <category>dns</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Robots.txt vs Noindex: A Practical Guide for Developers</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Wed, 22 Jul 2026 16:58:46 +0000</pubDate>
      <link>https://dev.to/glitchguard/robotstxt-vs-noindex-a-practical-guide-for-developers-2efl</link>
      <guid>https://dev.to/glitchguard/robotstxt-vs-noindex-a-practical-guide-for-developers-2efl</guid>
      <description>&lt;p&gt;&lt;code&gt;robots.txt&lt;/code&gt; and &lt;code&gt;noindex&lt;/code&gt; operate at different stages of the search-engine processing pipeline.&lt;/p&gt;

&lt;p&gt;Treating them as interchangeable can create URLs that remain visible without useful snippets, directives that crawlers cannot read, and important pages that disappear from crawling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplified crawl-to-index process
&lt;/h2&gt;

&lt;p&gt;A search engine generally needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Discover the URL.&lt;/li&gt;
&lt;li&gt;Check robots.txt.&lt;/li&gt;
&lt;li&gt;Fetch the page if crawling is allowed.&lt;/li&gt;
&lt;li&gt;Read the response status, headers, and HTML.&lt;/li&gt;
&lt;li&gt;Process robots directives.&lt;/li&gt;
&lt;li&gt;Evaluate canonical signals.&lt;/li&gt;
&lt;li&gt;Decide whether the URL is eligible for indexing.&lt;/li&gt;
&lt;li&gt;Consider the URL for search results.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;robots.txt&lt;/code&gt; operates before the page is fetched.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;noindex&lt;/code&gt; is processed after the page is fetched.&lt;/p&gt;

&lt;p&gt;That distinction explains why blocking a page can prevent its noindex instruction from being processed.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Robots.txt controls crawler access
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Disallow: /admin/
Disallow: /internal-search/

Sitemap: https://example.com/sitemap.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typical uses include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;administrative routes&lt;/li&gt;
&lt;li&gt;internal search pages&lt;/li&gt;
&lt;li&gt;crawl traps&lt;/li&gt;
&lt;li&gt;faceted navigation&lt;/li&gt;
&lt;li&gt;duplicate parameter combinations&lt;/li&gt;
&lt;li&gt;generated URL patterns&lt;/li&gt;
&lt;li&gt;low-value crawler paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Robots.txt is not an access-control mechanism.&lt;/p&gt;

&lt;p&gt;A disallowed route may still be publicly accessible.&lt;/p&gt;

&lt;p&gt;The URL may also remain discoverable through links, sitemaps, previous crawling, or browser activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Noindex controls search inclusion
&lt;/h2&gt;

&lt;p&gt;HTML implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"noindex, follow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HTTP-header implementation:&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;X-Robots-Tag: noindex
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The HTTP-header method can be useful for non-HTML resources such as certain PDFs or generated files.&lt;/p&gt;

&lt;p&gt;Common use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;checkout pages&lt;/li&gt;
&lt;li&gt;shopping carts&lt;/li&gt;
&lt;li&gt;account pages&lt;/li&gt;
&lt;li&gt;login routes&lt;/li&gt;
&lt;li&gt;thank-you pages&lt;/li&gt;
&lt;li&gt;internal search pages&lt;/li&gt;
&lt;li&gt;preview routes&lt;/li&gt;
&lt;li&gt;low-value utility pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The crawler must be able to fetch the resource before it can process the directive.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The blocked-noindex conflict
&lt;/h2&gt;

&lt;p&gt;Consider this robots.txt configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Disallow: /campaign-preview/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The HTML page contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"robots"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"noindex, follow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The crawler checks robots.txt before requesting the page.&lt;/p&gt;

&lt;p&gt;Because the URL is disallowed, the crawler may never fetch the HTML and may never discover the noindex instruction.&lt;/p&gt;

&lt;p&gt;For an accessible page that should not appear in search, a cleaner configuration is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;allow crawling&lt;/li&gt;
&lt;li&gt;return &lt;code&gt;noindex&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;remove the URL from the sitemap&lt;/li&gt;
&lt;li&gt;reduce unnecessary internal discovery&lt;/li&gt;
&lt;li&gt;verify the live response through Search Console&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Do not put unsupported noindex rules inside robots.txt
&lt;/h2&gt;

&lt;p&gt;Do not rely on this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Noindex: /example/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use a supported page-level robots meta tag or an &lt;code&gt;X-Robots-Tag&lt;/code&gt; response header.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Canonical tags solve duplicate selection
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/preferred-url"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A canonical tag helps consolidate duplicate or substantially similar URLs.&lt;/p&gt;

&lt;p&gt;It does not mean that the current page can never appear in search.&lt;/p&gt;

&lt;p&gt;Canonical signals may be evaluated alongside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;redirects&lt;/li&gt;
&lt;li&gt;internal links&lt;/li&gt;
&lt;li&gt;sitemap entries&lt;/li&gt;
&lt;li&gt;content similarity&lt;/li&gt;
&lt;li&gt;URL consistency&lt;/li&gt;
&lt;li&gt;external links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use a permanent redirect when the old URL no longer needs to remain independently accessible.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Redirects should be direct
&lt;/h2&gt;

&lt;p&gt;Avoid redirect chains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/old-a → /old-b → /old-c → /new
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer direct redirects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/old-a → /new
/old-b → /new
/old-c → /new
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;301&lt;/code&gt; or &lt;code&gt;308&lt;/code&gt; responses for permanent URL replacement.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Missing pages require real status codes
&lt;/h2&gt;

&lt;p&gt;A missing route should not return:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP 200&lt;/li&gt;
&lt;li&gt;homepage content&lt;/li&gt;
&lt;li&gt;homepage metadata&lt;/li&gt;
&lt;li&gt;canonical &lt;code&gt;/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That can create a soft 404.&lt;/p&gt;

&lt;p&gt;Return a genuine &lt;code&gt;404&lt;/code&gt; or &lt;code&gt;410&lt;/code&gt;, or redirect to a genuinely relevant replacement when one exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Private content requires authentication
&lt;/h2&gt;

&lt;p&gt;Neither robots.txt nor noindex protects sensitive information.&lt;/p&gt;

&lt;p&gt;Private routes should use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;server-side permission checks&lt;/li&gt;
&lt;li&gt;appropriate &lt;code&gt;401&lt;/code&gt; or &lt;code&gt;403&lt;/code&gt; responses&lt;/li&gt;
&lt;li&gt;secure session validation&lt;/li&gt;
&lt;li&gt;protection against unauthenticated HTML exposure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not expose confidential route names in robots.txt and assume they are secure.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Keep noindex URLs out of the sitemap
&lt;/h2&gt;

&lt;p&gt;Sitemaps should normally contain URLs that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;canonical&lt;/li&gt;
&lt;li&gt;public&lt;/li&gt;
&lt;li&gt;indexable&lt;/li&gt;
&lt;li&gt;returning successful responses&lt;/li&gt;
&lt;li&gt;intended to appear in search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;noindex pages&lt;/li&gt;
&lt;li&gt;redirects&lt;/li&gt;
&lt;li&gt;deleted pages&lt;/li&gt;
&lt;li&gt;soft 404s&lt;/li&gt;
&lt;li&gt;preview routes&lt;/li&gt;
&lt;li&gt;draft routes&lt;/li&gt;
&lt;li&gt;duplicate parameters&lt;/li&gt;
&lt;li&gt;non-canonical variants&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Recommended method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reduce crawling of URL patterns&lt;/td&gt;
&lt;td&gt;robots.txt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exclude an accessible page from search&lt;/td&gt;
&lt;td&gt;noindex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consolidate duplicate URLs&lt;/td&gt;
&lt;td&gt;canonical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permanently replace an old URL&lt;/td&gt;
&lt;td&gt;301 or 308 redirect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protect confidential content&lt;/td&gt;
&lt;td&gt;authentication and authorization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remove a missing resource&lt;/td&gt;
&lt;td&gt;404 or 410&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Audit checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Fetch the live production robots.txt file&lt;/li&gt;
&lt;li&gt;[ ] Review every Allow and Disallow rule&lt;/li&gt;
&lt;li&gt;[ ] Confirm the production sitemap URL&lt;/li&gt;
&lt;li&gt;[ ] Search shared layouts for inherited noindex tags&lt;/li&gt;
&lt;li&gt;[ ] Inspect page-level robots metadata&lt;/li&gt;
&lt;li&gt;[ ] Inspect &lt;code&gt;X-Robots-Tag&lt;/code&gt; response headers&lt;/li&gt;
&lt;li&gt;[ ] Confirm noindex pages remain crawlable&lt;/li&gt;
&lt;li&gt;[ ] Remove noindex pages from sitemaps&lt;/li&gt;
&lt;li&gt;[ ] Verify canonical consistency&lt;/li&gt;
&lt;li&gt;[ ] Test HTTP, HTTPS, www, and trailing-slash variants&lt;/li&gt;
&lt;li&gt;[ ] Test old URLs for direct redirects&lt;/li&gt;
&lt;li&gt;[ ] Test invalid routes for genuine 404 responses&lt;/li&gt;
&lt;li&gt;[ ] Confirm private pages require authentication&lt;/li&gt;
&lt;li&gt;[ ] Compare raw HTML with rendered HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is not to add every possible directive.&lt;/p&gt;

&lt;p&gt;The objective is to choose the directive that matches the actual requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the complete GlitchGuard guide
&lt;/h2&gt;

&lt;p&gt;The full guide includes detailed examples, comparison tables, common implementation mistakes, and a structured technical SEO audit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/blog/robots-txt-vs-noindex?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=robots_noindex" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/robots-txt-vs-noindex?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=robots_noindex&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test your robots.txt file
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/robots-txt-tester?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=robots_noindex" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/robots-txt-tester?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=robots_noindex&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your XML sitemap
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/tools/sitemap-checker?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=robots_noindex" rel="noopener noreferrer"&gt;https://getglitchguard.com/tools/sitemap-checker?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=robots_noindex&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>google</category>
      <category>security</category>
    </item>
    <item>
      <title>Why Mobile Pages Load Slowly: A Practical Performance</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Sat, 11 Jul 2026 19:07:19 +0000</pubDate>
      <link>https://dev.to/glitchguard/why-mobile-pages-load-slowly-a-practical-performance-4ji2</link>
      <guid>https://dev.to/glitchguard/why-mobile-pages-load-slowly-a-practical-performance-4ji2</guid>
      <description>&lt;h1&gt;
  
  
  Why Mobile Pages Load Slowly: A Practical Performance Checklist
&lt;/h1&gt;

&lt;p&gt;A page that performs well on a developer’s desktop can still be slow for real mobile users.&lt;/p&gt;

&lt;p&gt;Local testing may involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a fast processor&lt;/li&gt;
&lt;li&gt;strong Wi-Fi&lt;/li&gt;
&lt;li&gt;cached static assets&lt;/li&gt;
&lt;li&gt;short network distance&lt;/li&gt;
&lt;li&gt;an already-warmed application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A first-time mobile visitor may have none of those advantages.&lt;/p&gt;

&lt;p&gt;The following checklist focuses on the most common areas worth inspecting before attempting isolated micro-optimizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Test representative URLs
&lt;/h2&gt;

&lt;p&gt;Do not evaluate only the homepage.&lt;/p&gt;

&lt;p&gt;Test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;paid landing pages&lt;/li&gt;
&lt;li&gt;product pages&lt;/li&gt;
&lt;li&gt;collection pages&lt;/li&gt;
&lt;li&gt;service pages&lt;/li&gt;
&lt;li&gt;content pages&lt;/li&gt;
&lt;li&gt;forms and checkout&lt;/li&gt;
&lt;li&gt;routes with maps, video, reviews, or third-party widgets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use PageSpeed Insights for URL-level analysis and review field data when it is available.&lt;/p&gt;

&lt;p&gt;Separate laboratory diagnostics from real-user measurements. Laboratory data helps reproduce issues. Field data shows what actual users have experienced.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Identify the LCP element
&lt;/h2&gt;

&lt;p&gt;Largest Contentful Paint is commonly affected by the primary hero image, banner, heading block, or large content container.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether the resource is discovered early&lt;/li&gt;
&lt;li&gt;whether the image is oversized&lt;/li&gt;
&lt;li&gt;whether it is lazy-loaded incorrectly&lt;/li&gt;
&lt;li&gt;whether CSS or JavaScript delays rendering&lt;/li&gt;
&lt;li&gt;whether server response delays discovery&lt;/li&gt;
&lt;li&gt;whether a client-rendered component inserts it late&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Potential improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;resize the source image&lt;/li&gt;
&lt;li&gt;use a modern image format&lt;/li&gt;
&lt;li&gt;preload only genuinely critical resources&lt;/li&gt;
&lt;li&gt;avoid lazy-loading the primary LCP image&lt;/li&gt;
&lt;li&gt;reduce render-blocking dependencies&lt;/li&gt;
&lt;li&gt;return useful HTML early&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Audit responsive images
&lt;/h2&gt;

&lt;p&gt;A mobile viewport should not automatically download the same oversized image used by a large desktop display.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;srcset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sizes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;intrinsic image dimensions&lt;/li&gt;
&lt;li&gt;compression level&lt;/li&gt;
&lt;li&gt;format&lt;/li&gt;
&lt;li&gt;hidden background images&lt;/li&gt;
&lt;li&gt;below-the-fold lazy loading&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also set explicit width and height values to reduce layout instability.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Reduce JavaScript execution
&lt;/h2&gt;

&lt;p&gt;A page can be visually present but unresponsive because the main thread is busy.&lt;/p&gt;

&lt;p&gt;Inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bundle size&lt;/li&gt;
&lt;li&gt;unused JavaScript&lt;/li&gt;
&lt;li&gt;long tasks&lt;/li&gt;
&lt;li&gt;hydration cost&lt;/li&gt;
&lt;li&gt;duplicate dependencies&lt;/li&gt;
&lt;li&gt;page-builder output&lt;/li&gt;
&lt;li&gt;global scripts that are only required on specific routes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Potential improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code split large bundles&lt;/li&gt;
&lt;li&gt;remove unused packages&lt;/li&gt;
&lt;li&gt;defer non-critical modules&lt;/li&gt;
&lt;li&gt;yield during long tasks&lt;/li&gt;
&lt;li&gt;simplify expensive event handlers&lt;/li&gt;
&lt;li&gt;reduce unnecessary client rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Audit applications and plugins
&lt;/h2&gt;

&lt;p&gt;CMS plugins and ecommerce applications often inject their own scripts and styles.&lt;/p&gt;

&lt;p&gt;Typical examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reviews&lt;/li&gt;
&lt;li&gt;chat&lt;/li&gt;
&lt;li&gt;popups&lt;/li&gt;
&lt;li&gt;heatmaps&lt;/li&gt;
&lt;li&gt;social proof&lt;/li&gt;
&lt;li&gt;page builders&lt;/li&gt;
&lt;li&gt;product recommendations&lt;/li&gt;
&lt;li&gt;analytics integrations&lt;/li&gt;
&lt;li&gt;A/B testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remove unused integrations and verify that uninstalling them actually removes their storefront code.&lt;/p&gt;

&lt;p&gt;Measure before and after introducing new applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Review third-party scripts
&lt;/h2&gt;

&lt;p&gt;Third-party scripts can affect loading, responsiveness, network contention, and privacy controls.&lt;/p&gt;

&lt;p&gt;Audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;advertising pixels&lt;/li&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;tag managers&lt;/li&gt;
&lt;li&gt;maps&lt;/li&gt;
&lt;li&gt;video embeds&lt;/li&gt;
&lt;li&gt;chat widgets&lt;/li&gt;
&lt;li&gt;session recording&lt;/li&gt;
&lt;li&gt;consent platforms&lt;/li&gt;
&lt;li&gt;social embeds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Must this run on every page?&lt;/li&gt;
&lt;li&gt;Can it load after the primary content?&lt;/li&gt;
&lt;li&gt;Is an old tag still active?&lt;/li&gt;
&lt;li&gt;Is the same event being collected by multiple tools?&lt;/li&gt;
&lt;li&gt;Can a heavy embed be replaced by a lightweight placeholder?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Investigate server response
&lt;/h2&gt;

&lt;p&gt;A slow initial response delays the discovery of every page resource.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hosting capacity&lt;/li&gt;
&lt;li&gt;cache hit rate&lt;/li&gt;
&lt;li&gt;database performance&lt;/li&gt;
&lt;li&gt;middleware&lt;/li&gt;
&lt;li&gt;authentication checks&lt;/li&gt;
&lt;li&gt;redirect chains&lt;/li&gt;
&lt;li&gt;uncached dynamic rendering&lt;/li&gt;
&lt;li&gt;geographic distance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A CDN can help with static assets, but it does not automatically solve slow application code or database work.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Optimize fonts and CSS
&lt;/h2&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the number of font families&lt;/li&gt;
&lt;li&gt;the number of weights&lt;/li&gt;
&lt;li&gt;font file size&lt;/li&gt;
&lt;li&gt;render-blocking stylesheets&lt;/li&gt;
&lt;li&gt;unused theme or page-builder CSS&lt;/li&gt;
&lt;li&gt;icon libraries&lt;/li&gt;
&lt;li&gt;late font swaps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep the critical visual system small.&lt;/p&gt;

&lt;p&gt;Do not preload every font file. Preload only what is genuinely required during the initial render.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Check caching strategy
&lt;/h2&gt;

&lt;p&gt;Verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser caching for versioned assets&lt;/li&gt;
&lt;li&gt;page caching where safe&lt;/li&gt;
&lt;li&gt;CDN caching&lt;/li&gt;
&lt;li&gt;cache invalidation&lt;/li&gt;
&lt;li&gt;personalized route exclusions&lt;/li&gt;
&lt;li&gt;checkout and account behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid applying aggressive caching blindly to private, dynamic, or transactional pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Reduce layout instability
&lt;/h2&gt;

&lt;p&gt;Common CLS causes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;images without dimensions&lt;/li&gt;
&lt;li&gt;ads or banners inserted late&lt;/li&gt;
&lt;li&gt;cookie notices changing page height&lt;/li&gt;
&lt;li&gt;fonts changing text size&lt;/li&gt;
&lt;li&gt;dynamic widgets added above existing content&lt;/li&gt;
&lt;li&gt;sticky elements appearing after load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reserve space for dynamic elements and avoid inserting content above what the user is already viewing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test real landing pages, not only the homepage&lt;/li&gt;
&lt;li&gt;Inspect field and laboratory data separately&lt;/li&gt;
&lt;li&gt;Identify the LCP element&lt;/li&gt;
&lt;li&gt;Serve responsive, compressed images&lt;/li&gt;
&lt;li&gt;Remove unused JavaScript&lt;/li&gt;
&lt;li&gt;Break up long tasks&lt;/li&gt;
&lt;li&gt;Audit apps and plugins&lt;/li&gt;
&lt;li&gt;Reduce unnecessary third-party scripts&lt;/li&gt;
&lt;li&gt;Investigate server response&lt;/li&gt;
&lt;li&gt;Optimize fonts and CSS&lt;/li&gt;
&lt;li&gt;Configure caching carefully&lt;/li&gt;
&lt;li&gt;Reserve space for dynamic content&lt;/li&gt;
&lt;li&gt;Retest after every major change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not a perfect score.&lt;/p&gt;

&lt;p&gt;The goal is a page that becomes useful quickly and remains responsive for real visitors.&lt;/p&gt;

&lt;p&gt;Original GlitchGuard guide:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/blog/why-website-loads-slowly-on-mobile?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mobile_speed" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/why-website-loads-slowly-on-mobile?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mobile_speed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run a free website scan:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mobile_speed" rel="noopener noreferrer"&gt;https://getglitchguard.com/?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=mobile_speed&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>javascript</category>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Technical Checks When Business Emails Go to Spam</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Sat, 11 Jul 2026 17:20:26 +0000</pubDate>
      <link>https://dev.to/glitchguard/technical-checks-when-business-emails-go-to-spam-250c</link>
      <guid>https://dev.to/glitchguard/technical-checks-when-business-emails-go-to-spam-250c</guid>
      <description>&lt;p&gt;Business emails can land in spam for reasons that have nothing to do with the message body.&lt;/p&gt;

&lt;p&gt;Sometimes the problem is technical.&lt;/p&gt;

&lt;p&gt;A business may send normal replies, quotes, invoices, booking confirmations, support messages, or order notifications, but inbox providers may still treat the message as suspicious if the domain setup is weak.&lt;/p&gt;

&lt;p&gt;Here are practical technical checks to run when business emails are going to spam.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check SPF
&lt;/h2&gt;

&lt;p&gt;SPF helps define which servers are allowed to send email for a domain.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether an SPF record exists&lt;/li&gt;
&lt;li&gt;Whether the correct provider is included&lt;/li&gt;
&lt;li&gt;Whether there are duplicate SPF records&lt;/li&gt;
&lt;li&gt;Whether the record has syntax errors&lt;/li&gt;
&lt;li&gt;Whether old sending providers are still listed&lt;/li&gt;
&lt;li&gt;Whether the SPF lookup limit is exceeded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A broken SPF setup can make legitimate messages look suspicious.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Check DKIM
&lt;/h2&gt;

&lt;p&gt;DKIM helps prove that a message was not changed after being sent.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether DKIM is enabled in the email provider&lt;/li&gt;
&lt;li&gt;Whether the DKIM DNS record exists&lt;/li&gt;
&lt;li&gt;Whether the selector matches the provider setup&lt;/li&gt;
&lt;li&gt;Whether DKIM is passing&lt;/li&gt;
&lt;li&gt;Whether multiple sending services need separate DKIM records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DKIM is especially important for transactional emails, marketing emails, and business communication from custom domains.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check DMARC
&lt;/h2&gt;

&lt;p&gt;DMARC tells inbox providers how to treat emails that fail authentication checks.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether a DMARC record exists&lt;/li&gt;
&lt;li&gt;Whether the policy is set correctly&lt;/li&gt;
&lt;li&gt;Whether reporting is enabled&lt;/li&gt;
&lt;li&gt;Whether SPF and DKIM alignment works&lt;/li&gt;
&lt;li&gt;Whether the policy is too strict before setup is ready&lt;/li&gt;
&lt;li&gt;Whether unauthorized senders are using the domain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A missing DMARC record can reduce trust and make domain abuse harder to detect.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check MX records
&lt;/h2&gt;

&lt;p&gt;MX records show which servers handle email for the domain.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether MX records exist&lt;/li&gt;
&lt;li&gt;Whether they point to the correct provider&lt;/li&gt;
&lt;li&gt;Whether old providers are still present&lt;/li&gt;
&lt;li&gt;Whether priority values are correct&lt;/li&gt;
&lt;li&gt;Whether the email provider confirms the setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Incorrect MX records can cause receiving problems or inconsistent email behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Check website form emails
&lt;/h2&gt;

&lt;p&gt;Many websites send form notifications from the server or from a poorly configured sender address.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact form sender address&lt;/li&gt;
&lt;li&gt;Reply-to behavior&lt;/li&gt;
&lt;li&gt;SMTP setup&lt;/li&gt;
&lt;li&gt;Notification email delivery&lt;/li&gt;
&lt;li&gt;Customer confirmation email delivery&lt;/li&gt;
&lt;li&gt;Whether emails are sent from an authenticated domain&lt;/li&gt;
&lt;li&gt;Whether the website host is sending mail directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Form emails are often a hidden deliverability problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Check transactional email setup
&lt;/h2&gt;

&lt;p&gt;For ecommerce stores, SaaS platforms, and service businesses, transactional emails are critical.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Order confirmations&lt;/li&gt;
&lt;li&gt;Booking confirmations&lt;/li&gt;
&lt;li&gt;Password resets&lt;/li&gt;
&lt;li&gt;Account emails&lt;/li&gt;
&lt;li&gt;Invoices&lt;/li&gt;
&lt;li&gt;Support replies&lt;/li&gt;
&lt;li&gt;Payment receipts&lt;/li&gt;
&lt;li&gt;Delivery notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These emails should be sent through a trusted and authenticated provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Check domain reputation
&lt;/h2&gt;

&lt;p&gt;A domain can develop reputation issues over time.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blacklist status&lt;/li&gt;
&lt;li&gt;Spam complaint history&lt;/li&gt;
&lt;li&gt;Sending volume changes&lt;/li&gt;
&lt;li&gt;Bounce rates&lt;/li&gt;
&lt;li&gt;Old email campaigns&lt;/li&gt;
&lt;li&gt;Shared sending infrastructure&lt;/li&gt;
&lt;li&gt;Suspicious domain activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reputation problems can affect both marketing and normal business emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Check alignment between tools
&lt;/h2&gt;

&lt;p&gt;A business may use multiple tools to send emails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Workspace&lt;/li&gt;
&lt;li&gt;Microsoft 365&lt;/li&gt;
&lt;li&gt;Website forms&lt;/li&gt;
&lt;li&gt;Email marketing software&lt;/li&gt;
&lt;li&gt;Ecommerce platform&lt;/li&gt;
&lt;li&gt;CRM&lt;/li&gt;
&lt;li&gt;Helpdesk&lt;/li&gt;
&lt;li&gt;Transactional email provider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each tool may need proper authentication.&lt;/p&gt;

&lt;p&gt;A common problem is setting up email for one provider while another tool sends unauthenticated messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;If business emails are going to spam, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SPF&lt;/li&gt;
&lt;li&gt;DKIM&lt;/li&gt;
&lt;li&gt;DMARC&lt;/li&gt;
&lt;li&gt;MX records&lt;/li&gt;
&lt;li&gt;SMTP setup&lt;/li&gt;
&lt;li&gt;Form notifications&lt;/li&gt;
&lt;li&gt;Transactional emails&lt;/li&gt;
&lt;li&gt;Sending provider authentication&lt;/li&gt;
&lt;li&gt;Reply-to settings&lt;/li&gt;
&lt;li&gt;Blacklist status&lt;/li&gt;
&lt;li&gt;Domain reputation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Email deliverability is not only a copywriting issue.&lt;/p&gt;

&lt;p&gt;It is also a technical trust issue.&lt;/p&gt;

&lt;p&gt;Original GlitchGuard guide:&lt;br&gt;
&lt;a href="https://getglitchguard.com/blog/why-your-business-emails-go-to-spam" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/why-your-business-emails-go-to-spam&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run a free website scan:&lt;br&gt;
&lt;a href="https://getglitchguard.com/" rel="noopener noreferrer"&gt;https://getglitchguard.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>security</category>
      <category>dns</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Technical Checks for Ecommerce Stores Getting Traffic But No Sales</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Thu, 09 Jul 2026 09:59:44 +0000</pubDate>
      <link>https://dev.to/glitchguard/technical-checks-for-ecommerce-stores-getting-traffic-but-no-sales-3ll9</link>
      <guid>https://dev.to/glitchguard/technical-checks-for-ecommerce-stores-getting-traffic-but-no-sales-3ll9</guid>
      <description>&lt;p&gt;Getting traffic to an ecommerce store is only the first step.&lt;/p&gt;

&lt;p&gt;The store still has to convert visitors into buyers.&lt;/p&gt;

&lt;p&gt;When an ecommerce store gets traffic but no sales, the issue may not only be the ads, product, or audience. The problem may be hidden inside the website journey.&lt;/p&gt;

&lt;p&gt;Here are technical and conversion checks to run before spending more on traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check store speed
&lt;/h2&gt;

&lt;p&gt;Slow ecommerce pages can lose buyers before they see the product.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product page load time&lt;/li&gt;
&lt;li&gt;Mobile speed&lt;/li&gt;
&lt;li&gt;Image size&lt;/li&gt;
&lt;li&gt;Theme performance&lt;/li&gt;
&lt;li&gt;Third-party apps&lt;/li&gt;
&lt;li&gt;Tracking scripts&lt;/li&gt;
&lt;li&gt;Checkout page speed&lt;/li&gt;
&lt;li&gt;Core Web Vitals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ecommerce stores often become slow because of heavy images, too many plugins/apps, tracking scripts, and unoptimized themes.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Check mobile usability
&lt;/h2&gt;

&lt;p&gt;Many ecommerce visitors arrive on mobile.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add-to-cart button visibility&lt;/li&gt;
&lt;li&gt;Product image scaling&lt;/li&gt;
&lt;li&gt;Variant selection&lt;/li&gt;
&lt;li&gt;Tap targets&lt;/li&gt;
&lt;li&gt;Menu behavior&lt;/li&gt;
&lt;li&gt;Checkout flow&lt;/li&gt;
&lt;li&gt;Payment steps&lt;/li&gt;
&lt;li&gt;Delivery information&lt;/li&gt;
&lt;li&gt;Return policy visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A store can look good on desktop and still lose buyers on mobile.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check product page trust
&lt;/h2&gt;

&lt;p&gt;Product pages need to answer buyer doubts quickly.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product descriptions&lt;/li&gt;
&lt;li&gt;Product images&lt;/li&gt;
&lt;li&gt;Reviews&lt;/li&gt;
&lt;li&gt;Size/material/usage details&lt;/li&gt;
&lt;li&gt;Delivery information&lt;/li&gt;
&lt;li&gt;Return/refund policy&lt;/li&gt;
&lt;li&gt;Secure payment signals&lt;/li&gt;
&lt;li&gt;Contact/support options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A product page should help the buyer feel safe enough to continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check checkout friction
&lt;/h2&gt;

&lt;p&gt;Checkout issues are expensive because they happen close to the sale.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of checkout steps&lt;/li&gt;
&lt;li&gt;Unexpected fees&lt;/li&gt;
&lt;li&gt;Required account creation&lt;/li&gt;
&lt;li&gt;Coupon field behavior&lt;/li&gt;
&lt;li&gt;Payment method clarity&lt;/li&gt;
&lt;li&gt;Shipping timeline&lt;/li&gt;
&lt;li&gt;Error messages&lt;/li&gt;
&lt;li&gt;Mobile checkout&lt;/li&gt;
&lt;li&gt;Order confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If checkout feels risky, confusing, or too long, buyers may abandon the purchase.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Check tracking setup
&lt;/h2&gt;

&lt;p&gt;If ecommerce tracking is broken, the store owner may not know where buyers are dropping.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product view events&lt;/li&gt;
&lt;li&gt;Add-to-cart events&lt;/li&gt;
&lt;li&gt;Begin checkout events&lt;/li&gt;
&lt;li&gt;Purchase events&lt;/li&gt;
&lt;li&gt;Payment errors&lt;/li&gt;
&lt;li&gt;Abandoned checkout tracking&lt;/li&gt;
&lt;li&gt;Traffic source tracking&lt;/li&gt;
&lt;li&gt;Mobile vs desktop behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bad tracking can make optimization difficult because the real leak is hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Check message match
&lt;/h2&gt;

&lt;p&gt;If traffic comes from ads, the landing page should match the promise.&lt;/p&gt;

&lt;p&gt;Review whether the page matches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ad headline&lt;/li&gt;
&lt;li&gt;The product shown in the ad&lt;/li&gt;
&lt;li&gt;The offer&lt;/li&gt;
&lt;li&gt;The price expectation&lt;/li&gt;
&lt;li&gt;The customer intent&lt;/li&gt;
&lt;li&gt;The call-to-action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A mismatch between traffic source and landing page can reduce conversions.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Check trust and security basics
&lt;/h2&gt;

&lt;p&gt;Ecommerce buyers need safety signals.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;Valid SSL certificate&lt;/li&gt;
&lt;li&gt;Privacy policy&lt;/li&gt;
&lt;li&gt;Terms&lt;/li&gt;
&lt;li&gt;Return/refund policy&lt;/li&gt;
&lt;li&gt;Contact details&lt;/li&gt;
&lt;li&gt;Payment security&lt;/li&gt;
&lt;li&gt;Real business information&lt;/li&gt;
&lt;li&gt;Support options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Missing trust signals can create hesitation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;If an ecommerce store gets traffic but no sales, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store speed&lt;/li&gt;
&lt;li&gt;Mobile usability&lt;/li&gt;
&lt;li&gt;Product page quality&lt;/li&gt;
&lt;li&gt;Reviews and proof&lt;/li&gt;
&lt;li&gt;Trust signals&lt;/li&gt;
&lt;li&gt;Checkout flow&lt;/li&gt;
&lt;li&gt;Payment confidence&lt;/li&gt;
&lt;li&gt;Delivery clarity&lt;/li&gt;
&lt;li&gt;Tracking setup&lt;/li&gt;
&lt;li&gt;Technical SEO basics&lt;/li&gt;
&lt;li&gt;Email/domain trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More traffic does not fix a leaking store.&lt;/p&gt;

&lt;p&gt;It only sends more visitors into the same broken buying journey.&lt;/p&gt;

&lt;p&gt;Original GlitchGuard guide:&lt;br&gt;
&lt;a href="https://getglitchguard.com/blog/ecommerce-store-gets-traffic-but-no-sales" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/ecommerce-store-gets-traffic-but-no-sales&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run a free website scan:&lt;br&gt;
&lt;a href="https://getglitchguard.com/" rel="noopener noreferrer"&gt;https://getglitchguard.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>seo</category>
      <category>analytics</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Technical Checks for Google Ads Clicks With No Sales</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Thu, 09 Jul 2026 09:38:43 +0000</pubDate>
      <link>https://dev.to/glitchguard/technical-checks-for-google-ads-clicks-with-no-sales-2f3e</link>
      <guid>https://dev.to/glitchguard/technical-checks-for-google-ads-clicks-with-no-sales-2f3e</guid>
      <description>&lt;p&gt;Google Ads can bring visitors to a website, but the website still has to convert them.&lt;/p&gt;

&lt;p&gt;When a campaign gets clicks but no sales, the first reaction is often to blame the ads. Sometimes the campaign is the problem. But many times, the issue happens after the click.&lt;/p&gt;

&lt;p&gt;The landing page may be slow, unclear, untrusted, poorly tracked, or difficult to use on mobile.&lt;/p&gt;

&lt;p&gt;Here are technical and website checks to run before increasing the ad budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check landing page speed
&lt;/h2&gt;

&lt;p&gt;A slow landing page can lose visitors before they see the offer.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page load time&lt;/li&gt;
&lt;li&gt;Core Web Vitals&lt;/li&gt;
&lt;li&gt;Image size&lt;/li&gt;
&lt;li&gt;Third-party scripts&lt;/li&gt;
&lt;li&gt;Render-blocking resources&lt;/li&gt;
&lt;li&gt;Server response time&lt;/li&gt;
&lt;li&gt;Mobile speed&lt;/li&gt;
&lt;li&gt;Checkout or form page speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paid traffic is expensive. Slow pages make it more expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Check tracking setup
&lt;/h2&gt;

&lt;p&gt;If tracking is broken, campaign performance data may be misleading.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GA4 events&lt;/li&gt;
&lt;li&gt;Google Tag Manager setup&lt;/li&gt;
&lt;li&gt;Google Ads conversion actions&lt;/li&gt;
&lt;li&gt;Meta Pixel events&lt;/li&gt;
&lt;li&gt;Form submission tracking&lt;/li&gt;
&lt;li&gt;Checkout events&lt;/li&gt;
&lt;li&gt;Phone call tracking&lt;/li&gt;
&lt;li&gt;Thank-you page tracking&lt;/li&gt;
&lt;li&gt;Duplicate conversion events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bad tracking can make good campaigns look bad and bad campaigns look better than they are.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check message match
&lt;/h2&gt;

&lt;p&gt;The landing page should match the ad.&lt;/p&gt;

&lt;p&gt;Review whether the page matches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The keyword&lt;/li&gt;
&lt;li&gt;The ad headline&lt;/li&gt;
&lt;li&gt;The offer&lt;/li&gt;
&lt;li&gt;The user intent&lt;/li&gt;
&lt;li&gt;The call-to-action&lt;/li&gt;
&lt;li&gt;The product or service promise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the ad promises one thing and the page delivers another, visitors may leave quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check mobile usability
&lt;/h2&gt;

&lt;p&gt;Many ad clicks happen on mobile.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CTA visibility&lt;/li&gt;
&lt;li&gt;Tap targets&lt;/li&gt;
&lt;li&gt;Menu behavior&lt;/li&gt;
&lt;li&gt;Form usability&lt;/li&gt;
&lt;li&gt;Checkout flow&lt;/li&gt;
&lt;li&gt;Font size&lt;/li&gt;
&lt;li&gt;Image scaling&lt;/li&gt;
&lt;li&gt;Sticky buttons&lt;/li&gt;
&lt;li&gt;Page layout&lt;/li&gt;
&lt;li&gt;Trust signals on mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A landing page can look good on desktop and still lose customers on mobile.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Check trust signals
&lt;/h2&gt;

&lt;p&gt;Paid visitors often arrive cold. They need proof quickly.&lt;/p&gt;

&lt;p&gt;Review whether the page includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear contact details&lt;/li&gt;
&lt;li&gt;Real business identity&lt;/li&gt;
&lt;li&gt;Reviews or testimonials&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;Privacy policy&lt;/li&gt;
&lt;li&gt;Refund or service policy&lt;/li&gt;
&lt;li&gt;Payment trust signals&lt;/li&gt;
&lt;li&gt;Visible support options&lt;/li&gt;
&lt;li&gt;Real product or service photos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weak trust signals can create hesitation.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Check forms and checkout paths
&lt;/h2&gt;

&lt;p&gt;The visitor may want to take action but still fail because the conversion path is broken.&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Form submission&lt;/li&gt;
&lt;li&gt;Required fields&lt;/li&gt;
&lt;li&gt;Error messages&lt;/li&gt;
&lt;li&gt;Confirmation messages&lt;/li&gt;
&lt;li&gt;Checkout friction&lt;/li&gt;
&lt;li&gt;Payment steps&lt;/li&gt;
&lt;li&gt;Coupon fields&lt;/li&gt;
&lt;li&gt;Delivery/service information&lt;/li&gt;
&lt;li&gt;Booking flow&lt;/li&gt;
&lt;li&gt;Mobile checkout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues usually happen close to the conversion, which makes them especially costly.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Check analytics quality
&lt;/h2&gt;

&lt;p&gt;Do not only ask whether traffic is coming in.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which pages are visitors landing on?&lt;/li&gt;
&lt;li&gt;Where do they leave?&lt;/li&gt;
&lt;li&gt;Are events firing correctly?&lt;/li&gt;
&lt;li&gt;Are conversions being counted?&lt;/li&gt;
&lt;li&gt;Are users dropping at forms or checkout?&lt;/li&gt;
&lt;li&gt;Are mobile users behaving differently?&lt;/li&gt;
&lt;li&gt;Are paid visitors seeing the right page?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without analytics quality, optimization becomes guesswork.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;If Google Ads gets clicks but no sales, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Landing page speed&lt;/li&gt;
&lt;li&gt;Mobile usability&lt;/li&gt;
&lt;li&gt;Message match&lt;/li&gt;
&lt;li&gt;CTA clarity&lt;/li&gt;
&lt;li&gt;Tracking setup&lt;/li&gt;
&lt;li&gt;Analytics events&lt;/li&gt;
&lt;li&gt;Trust signals&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Checkout flow&lt;/li&gt;
&lt;li&gt;Security signals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The campaign may be doing its job.&lt;/p&gt;

&lt;p&gt;The website may be where the conversion is being lost.&lt;/p&gt;

&lt;p&gt;Original GlitchGuard guide:&lt;br&gt;
&lt;a href="https://getglitchguard.com/blog/google-ads-clicks-but-no-sales" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/google-ads-clicks-but-no-sales&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webperf</category>
      <category>analytics</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Why Google Is Not Indexing Your Pages: Technical Checks to Run First</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Wed, 08 Jul 2026 22:16:56 +0000</pubDate>
      <link>https://dev.to/glitchguard/why-google-is-not-indexing-your-pages-technical-checks-to-run-first-2hi0</link>
      <guid>https://dev.to/glitchguard/why-google-is-not-indexing-your-pages-technical-checks-to-run-first-2hi0</guid>
      <description>&lt;p&gt;A page cannot bring organic traffic if Google cannot discover, crawl, understand, or index it.&lt;/p&gt;

&lt;p&gt;Many website owners think indexing problems are always caused by poor content or weak backlinks. Sometimes that is true. But many indexing issues start with simple technical problems that quietly block important pages from appearing in Google Search.&lt;/p&gt;

&lt;p&gt;Before rewriting pages or publishing more content, it is useful to check the technical foundation first.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Check whether the page is discoverable
&lt;/h2&gt;

&lt;p&gt;Google needs a path to find the page.&lt;/p&gt;

&lt;p&gt;Check whether the page is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Included in the sitemap&lt;/li&gt;
&lt;li&gt;Linked from other pages&lt;/li&gt;
&lt;li&gt;Accessible from the main navigation or internal links&lt;/li&gt;
&lt;li&gt;Not hidden behind forms, scripts, or login walls&lt;/li&gt;
&lt;li&gt;Not orphaned from the rest of the website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a page has no internal links pointing to it, Google may struggle to discover or prioritize it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Review robots.txt
&lt;/h2&gt;

&lt;p&gt;The robots.txt file can tell search engines which parts of a website they are allowed or not allowed to crawl.&lt;/p&gt;

&lt;p&gt;Common problems include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blocking important directories&lt;/li&gt;
&lt;li&gt;Blocking CSS or JavaScript resources&lt;/li&gt;
&lt;li&gt;Blocking blog or product pages by mistake&lt;/li&gt;
&lt;li&gt;Using broad disallow rules&lt;/li&gt;
&lt;li&gt;Forgetting old staging rules after launch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A single wrong robots.txt rule can prevent important pages from being crawled.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check for noindex tags
&lt;/h2&gt;

&lt;p&gt;A noindex tag tells search engines not to include a page in search results.&lt;/p&gt;

&lt;p&gt;This is useful for some pages, but dangerous when applied by mistake.&lt;/p&gt;

&lt;p&gt;Check for noindex tags on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog posts&lt;/li&gt;
&lt;li&gt;Service pages&lt;/li&gt;
&lt;li&gt;Product pages&lt;/li&gt;
&lt;li&gt;Category pages&lt;/li&gt;
&lt;li&gt;Landing pages&lt;/li&gt;
&lt;li&gt;Homepage sections&lt;/li&gt;
&lt;li&gt;Important business pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Noindex tags are common after redesigns, migrations, or staging-to-live deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Review canonical tags
&lt;/h2&gt;

&lt;p&gt;Canonical tags help search engines understand the preferred version of a page.&lt;/p&gt;

&lt;p&gt;Canonical issues can happen when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A page points to the wrong URL&lt;/li&gt;
&lt;li&gt;Multiple pages canonicalize to one unrelated page&lt;/li&gt;
&lt;li&gt;HTTP and HTTPS versions conflict&lt;/li&gt;
&lt;li&gt;A page canonicalizes to a deleted or redirected URL&lt;/li&gt;
&lt;li&gt;Ecommerce filters generate duplicate canonical confusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the canonical tag points Google away from the page, the page may not be indexed as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Check sitemap quality
&lt;/h2&gt;

&lt;p&gt;A sitemap should help search engines find important URLs.&lt;/p&gt;

&lt;p&gt;Review whether the sitemap includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Important live pages&lt;/li&gt;
&lt;li&gt;Correct canonical URLs&lt;/li&gt;
&lt;li&gt;Updated lastmod dates&lt;/li&gt;
&lt;li&gt;No broken URLs&lt;/li&gt;
&lt;li&gt;No redirected URLs&lt;/li&gt;
&lt;li&gt;No noindex URLs&lt;/li&gt;
&lt;li&gt;No staging or test pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A sitemap with low-quality, redirected, blocked, or noindex URLs can create confusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Look for crawl errors
&lt;/h2&gt;

&lt;p&gt;Technical errors can stop Google from accessing a page.&lt;/p&gt;

&lt;p&gt;Check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;404 errors&lt;/li&gt;
&lt;li&gt;500 server errors&lt;/li&gt;
&lt;li&gt;Redirect loops&lt;/li&gt;
&lt;li&gt;Timeout errors&lt;/li&gt;
&lt;li&gt;DNS issues&lt;/li&gt;
&lt;li&gt;Blocked resources&lt;/li&gt;
&lt;li&gt;Soft 404 pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If Google repeatedly sees errors, it may delay or avoid indexing the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Review internal linking
&lt;/h2&gt;

&lt;p&gt;Internal links help search engines understand page importance.&lt;/p&gt;

&lt;p&gt;Pages that matter should not be buried.&lt;/p&gt;

&lt;p&gt;Check whether the page is linked from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Homepage&lt;/li&gt;
&lt;li&gt;Category pages&lt;/li&gt;
&lt;li&gt;Related blog posts&lt;/li&gt;
&lt;li&gt;Main service pages&lt;/li&gt;
&lt;li&gt;Footer or resource sections&lt;/li&gt;
&lt;li&gt;Relevant internal content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A page that has no strong internal links may be treated as less important.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Check content quality and uniqueness
&lt;/h2&gt;

&lt;p&gt;Technical access is not the only indexing factor.&lt;/p&gt;

&lt;p&gt;A page may be crawled but still not indexed if it looks thin, duplicated, low-value, or too similar to other pages.&lt;/p&gt;

&lt;p&gt;Review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the page useful?&lt;/li&gt;
&lt;li&gt;Does it answer a clear search intent?&lt;/li&gt;
&lt;li&gt;Is it too short?&lt;/li&gt;
&lt;li&gt;Is it copied from another page?&lt;/li&gt;
&lt;li&gt;Is it mostly boilerplate?&lt;/li&gt;
&lt;li&gt;Does it provide something different from similar pages?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technical fixes help, but the page still needs to deserve indexing.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Use Google Search Console
&lt;/h2&gt;

&lt;p&gt;Google Search Console can help identify indexing issues.&lt;/p&gt;

&lt;p&gt;Useful places to check include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page indexing report&lt;/li&gt;
&lt;li&gt;URL Inspection Tool&lt;/li&gt;
&lt;li&gt;Crawl stats&lt;/li&gt;
&lt;li&gt;Sitemap submission&lt;/li&gt;
&lt;li&gt;Manual actions&lt;/li&gt;
&lt;li&gt;Core Web Vitals&lt;/li&gt;
&lt;li&gt;Enhancements and structured data reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The URL Inspection Tool is especially useful because it can show whether Google can crawl the page and whether the page is indexed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final checklist
&lt;/h2&gt;

&lt;p&gt;If Google is not indexing your page, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitemap inclusion&lt;/li&gt;
&lt;li&gt;Internal links&lt;/li&gt;
&lt;li&gt;Robots.txt&lt;/li&gt;
&lt;li&gt;Noindex tags&lt;/li&gt;
&lt;li&gt;Canonical tags&lt;/li&gt;
&lt;li&gt;Redirects&lt;/li&gt;
&lt;li&gt;Server errors&lt;/li&gt;
&lt;li&gt;Crawlability&lt;/li&gt;
&lt;li&gt;Page quality&lt;/li&gt;
&lt;li&gt;Duplicate content&lt;/li&gt;
&lt;li&gt;Google Search Console status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Indexing problems are not always solved by publishing more content.&lt;/p&gt;

&lt;p&gt;Sometimes the first step is finding the technical issue that stops Google from trusting, crawling, or selecting the page.&lt;/p&gt;

&lt;p&gt;Original GlitchGuard guide:&lt;br&gt;
&lt;a href="https://getglitchguard.com/blog/why-google-is-not-indexing-your-pages" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/why-google-is-not-indexing-your-pages&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>google</category>
      <category>website</category>
      <category>devdiscuss</category>
    </item>
    <item>
      <title>Before You Spend More on Ads, Check the Website First</title>
      <dc:creator>GlitchGuard</dc:creator>
      <pubDate>Wed, 08 Jul 2026 21:44:19 +0000</pubDate>
      <link>https://dev.to/glitchguard/before-you-spend-more-on-ads-check-the-website-first-35p5</link>
      <guid>https://dev.to/glitchguard/before-you-spend-more-on-ads-check-the-website-first-35p5</guid>
      <description>&lt;p&gt;Many businesses blame the campaign when leads and sales do not come in.&lt;/p&gt;

&lt;p&gt;The ads are not working.&lt;br&gt;
The audience is wrong.&lt;br&gt;
The offer is weak.&lt;br&gt;
The budget is too small.&lt;br&gt;
The campaign needs more testing.&lt;/p&gt;

&lt;p&gt;Sometimes that is true.&lt;/p&gt;

&lt;p&gt;But many times, the ads are not the main problem. The website is.&lt;/p&gt;

&lt;p&gt;A business can pay for traffic, get visitors, and still lose customers because the website is not ready to convert them.&lt;/p&gt;

&lt;p&gt;That is one of the most expensive problems in digital marketing.&lt;/p&gt;

&lt;p&gt;Clicks are not customers.&lt;/p&gt;

&lt;p&gt;A click only means someone was interested enough to visit. It does not mean the page loaded fast enough. It does not mean the visitor trusted the business. It does not mean the call-to-action was clear. It does not mean the form worked. It does not mean the checkout was smooth. It does not mean conversion tracking was set up properly.&lt;/p&gt;

&lt;p&gt;This is why increasing ad spend too early can make the problem worse.&lt;/p&gt;

&lt;p&gt;If a website is leaking visitors, more traffic only sends more people into the same broken journey.&lt;/p&gt;

&lt;p&gt;Before spending more on ads, businesses should check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page speed&lt;/li&gt;
&lt;li&gt;Mobile experience&lt;/li&gt;
&lt;li&gt;CTA clarity&lt;/li&gt;
&lt;li&gt;Forms and checkout paths&lt;/li&gt;
&lt;li&gt;Trust signals&lt;/li&gt;
&lt;li&gt;Security signals&lt;/li&gt;
&lt;li&gt;Tracking and analytics&lt;/li&gt;
&lt;li&gt;Technical SEO basics&lt;/li&gt;
&lt;li&gt;Email/domain trust&lt;/li&gt;
&lt;li&gt;Landing page relevance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For ecommerce stores, this may show up as traffic but no sales.&lt;/p&gt;

&lt;p&gt;For local businesses, it may show up as visits but no calls, bookings, or enquiries.&lt;/p&gt;

&lt;p&gt;For service businesses, it may show up as clicks but no qualified leads.&lt;/p&gt;

&lt;p&gt;For marketers, it may show up as poor campaign performance even when the campaign itself is not the root issue.&lt;/p&gt;

&lt;p&gt;The website is not just a digital brochure. It is part of the sales process.&lt;/p&gt;

&lt;p&gt;If the website is slow, confusing, untrusted, poorly tracked, or hard to use on mobile, customers can leave before the business even knows what happened.&lt;/p&gt;

&lt;p&gt;The smarter question is not only:&lt;/p&gt;

&lt;p&gt;“Are we getting traffic?”&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;p&gt;“Is our website ready to convert the traffic we are paying for?”&lt;/p&gt;

&lt;p&gt;GlitchGuard helps businesses find hidden website issues affecting traffic, leads, sales, trust, ad performance, email deliverability, and conversions.&lt;/p&gt;

&lt;p&gt;Before spending more on ads, run a free website scan:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getglitchguard.com/" rel="noopener noreferrer"&gt;https://getglitchguard.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a deeper checklist, read the full GlitchGuard guide:&lt;br&gt;
&lt;a href="https://getglitchguard.com/blog/website-audit-checklist-before-spending-more-on-ads" rel="noopener noreferrer"&gt;https://getglitchguard.com/blog/website-audit-checklist-before-spending-more-on-ads&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
