Your SPF, DKIM, and DMARC can be perfect. Your content can be clean. But if your links look suspicious, Gmail and Outlook will still send you to spam.
URL patterns are one of the most overlooked spam triggers. Spam filters analyze link structure, domain reputation, redirect chains, and anchor text mismatches to catch phishing attempts—and legitimate emails get caught in the crossfire.
7 URL patterns that trigger spam filters
1) Link text doesn't match the destination
If your anchor text says "View Dashboard" but the URL points tohttps://click.tracking-domain.com/xyz123, spam filters flag it as potential phishing.
- Bad:
<a href="https://tracker.io/abc">https://yourapp.com</a> - Better:
<a href="https://yourapp.com/dashboard">View Dashboard</a>
Fix: If you use click tracking, make sure your tracking domain is properly authenticated (SPF/DKIM) and has sender reputation. Better: use first-party tracking domains that match your sending domain.
2) Long, obfuscated query strings
URLs with 10+ query parameters or base64-encoded strings look like tracking spam or malware delivery.
https://app.com/verify?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c&utm_source=email&utm_medium=transactional&utm_campaign=verification&ref=abc123&session=xyz789https://app.com/verify/abc1233) Shortened URLs (bit.ly, tinyurl, etc.)
Link shorteners are a phishing staple. Filters penalize them heavily because they hide the destination.
- Avoid:
bit.ly/abc123 - Use:
https://yourapp.com/reset-password
Exception: First-party short domains (e.g., go.yourcompany.com) with proper DNS authentication can work if you control the reputation. But default to full URLs in transactional emails.
4) Multiple redirects before landing
Click tracking that chains through 2-3 redirect hops (tracking server → CDN → final destination) looks like malware delivery infrastructure.
Gmail's Safe Browsing actively follows redirect chains. If any hop hits a flagged domain or times out, the email gets penalized.
- User clicks link in email
- Single 302 redirect to authenticated tracking domain
- Direct 302 to final destination (same domain as sender, if possible)
Limit: 1 redirect. Ideally: zero redirects for critical emails.
5) IP addresses instead of domains
URLs with raw IP addresses scream "temporary infrastructure" and trigger instant spam flags.
- Never:
http://192.168.1.100/verify - Always:
https://app.yourcompany.com/verify
Legitimate companies use domains. Phishers and spammers use IPs. Filters know this.
6) Mixed HTTP and HTTPS links
If some links use http:// and others use https://, it suggests poor infrastructure hygiene—a spam signal.
Password reset and verification emails with http:// CTAs are especially problematic—they look like phishing attempts.
7) Suspicious TLDs (.xyz, .top, .click)
Certain TLDs are heavily abused by spammers. Filters apply domain reputation penalties based on TLD alone.
High-risk TLDs:
.xyz.top.click.link.info.online
Safer choices for transactional email:
.com.org.io(tech-friendly).co- Country-specific TLDs if relevant (.uk, .de, .ca)
.com for your sending domain. It's worth the deliverability gain.Safe URL checklist for transactional emails
Before shipping any transactional email, audit your URLs:
- ✅ HTTPS everywhere — no mixed protocols
- ✅ Full domain names — never raw IPs
- ✅ Anchor text matches intent — "Reset Password" should point to
/reset-password - ✅ Short, clean paths — avoid 200+ character query strings
- ✅ Zero or one redirect — no multi-hop tracking chains
- ✅ Trusted TLD — stick with
.com,.org, or.io - ✅ First-party tracking domains — if using click tracking, use subdomains of your main domain
Click tracking alternatives that don't hurt deliverability
If you need to track clicks without sacrificing inbox placement, use:
Server-side attribution
Log the user's click server-side after they land, instead of routing through a third-party tracker.
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const destination = searchParams.get('url');
const emailId = searchParams.get('eid');
// Log click event server-side
await analytics.track({
event: 'email_click',
emailId,
timestamp: Date.now(),
});
// Redirect to destination
return Response.redirect(destination, 302);
}UTM parameters (minimal)
Use only essential UTM params. Avoid stacking 5+ query strings.
https://app.com/dashboard?utm_source=email&utm_campaign=welcomePixel tracking for opens
Use transparent 1x1 images for open tracking instead of URL-based tracking. Less invasive, lower spam risk.
<img src="https://yourdomain.com/track/open?eid=abc123" width="1" height="1" alt="" />Testing your URLs before launch
Run these checks before deploying new email templates:
- Google Safe Browsing: Check your URLs at
transparencyreport.google.com/safe-browsing - VirusTotal: Scan your domain at
virustotal.com - Redirect test: Manually click links and count hops
- HTML inspection: View source and check all
hrefattributes match expectations - Spam test: Send to
mail-tester.comorglockapps.comand check URL warnings
http://, IP addresses, or suspicious TLDs.What to do if your URLs are already flagged
If Gmail or Outlook is flagging your emails due to suspicious URLs:
- Audit all links immediately: Check every email template for the seven patterns above
- Switch to clean URLs: Remove tracking redirects, shorten query strings, enforce HTTPS
- Submit domains for review: Use Gmail Postmaster Tools and Microsoft SNDS to monitor reputation
- Throttle sends: Reduce volume while reputation recovers (see Email Throttling & Send Cadence)
- Set up FBLs: Monitor spam complaints from users (see Feedback Loops & Complaint Monitoring)
Expect 1-2 weeks for reputation to stabilize after cleaning up URLs. During that time, focus on high-engagement sends (password resets, order confirmations) to rebuild trust signals.
Production-ready URL patterns (copy/paste examples)
Safe URL patterns for common transactional email flows:
Password reset
https://app.yourcompany.com/reset-password/{token}Email verification
https://app.yourcompany.com/verify/{token}Magic link
https://app.yourcompany.com/auth/magic/{token}Unsubscribe
https://app.yourcompany.com/unsubscribe/{userId}https:// + your primary domain + clear path + minimal token. No query strings, no redirects, no third-party domains.The simple rule
If your URL wouldn't pass the "would I click this if I received it from a stranger?" test, spam filters won't trust it either.
Clean, predictable URLs from authenticated domains win. Tracking hacks and clever redirect chains lose.
Your transactional emails deserve to reach the inbox. Don't let sloppy URL hygiene sabotage your deliverability.