Sitewide Technical SEO Audit: samndan.com
Meirowitz & Wasserberg, LLP — Full Domain Analysis
Audit Date: March 6, 2026
Scope: Sitewide — ALL pages (no topic restrictions)
Primary Data Source: Screaming Frog SEO Spider 18.5 (full-audit profile, unlimited depth)
Supplemental: Browser-based CWV, security header checks, canonical verification
Crawl Stats: 5,085 URLs discovered | 612 HTML pages (200 status) | 3,030 internal URLs | 2,055 external URLs
Overall Technical Health Score: 42/100
Crawlability .......... ████████░░ 8/10 (15%)
Indexability .......... ███░░░░░░░ 3/10 (15%) ← Railway.app canonical crisis
Response Codes ........ ████████░░ 8/10 (10%)
Internal Links ........ ██████░░░░ 6/10 (15%)
On-Page Elements ...... ██████░░░░ 6/10 (10%)
Structured Data ....... ███░░░░░░░ 3/10 (10%) ← 96% validation error rate
Performance ........... ███░░░░░░░ 3/10 (10%) ← 30MB images, slow TTFB
Security .............. ██░░░░░░░░ 2/10 (5%) ← ALL headers missing
International SEO ..... █░░░░░░░░░ 1/10 (10%) ← Zero hreflang, 404 Spanish pages
Five Critical Findings
-
150 pages have canonical tags pointing to Railway.app staging domain — Google may be de-indexing production pages in favor of samndan-production.up.railway.app. Affects /contact/, /case-results/, /video/, and /es/ sections.
-
ALL 7 security headers are missing — No HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, or Permissions-Policy. Grade F security posture. Server also leaks PHP version and Railway platform details.
-
716 images exceed 100KB; top 10 are 10-30 MB each — Uncompressed JPGs uploaded April 2025. The top 10 alone total ~223 MB. Devastating for page speed and Core Web Vitals.
-
589 of 612 pages (96.2%) have structured data validation errors — Template-level schema issue affecting nearly every page on the site.
-
Zero hreflang implementation despite ~40+ Spanish URLs — No language alternate tags, no x-default. Spanish mesothelioma page (/es/mesotelioma/) returns 404.
1. Crawlability (Score: 8/10)
Robots.txt Review
| Check |
Status |
Notes |
| robots.txt exists |
Pass |
Clean, permissive |
| Sitemap declared |
Pass |
6 sub-sitemaps referenced |
| Key pages blocked |
Pass |
No important content blocked |
| Crawl-delay set |
Pass |
None set (good) |
XML Sitemap
| Check |
Status |
Notes |
| Sitemap accessible |
Pass |
6 sub-sitemaps |
| URLs in sitemap |
658 |
|
| Orphan sitemap URLs |
0 |
All sitemap URLs reachable by crawler |
| URLs not in sitemap |
0 |
All crawled pages are in sitemap |
| Sitemap/crawl alignment |
Perfect |
100% match |
Crawl Budget Analysis
| Factor |
Count |
Impact |
| Thin content pages (<300 words) |
130 (21.2%) |
Medium — mostly /video/ pages |
| Internal redirects |
0 chains, 0 loops |
None (clean) |
| Duplicate content |
0 exact, 0 near |
None |
| Parameter URLs |
Minimal |
Low |
| Noindexed pages |
8 (7 sitemaps + 1 contact page) |
Normal |
| Crawl depth issues |
0 |
All pages reachable at shallow depth |
Assessment: Crawlability is strong. The crawler accessed all 612 HTML pages without obstruction. The sitemap is perfectly aligned with crawled content. The one deduction is for the 130 thin-content pages consuming crawl budget with minimal value.
2. Indexability (Score: 3/10)
CRITICAL: Canonical Tag Crisis
| Canonical Status |
Count |
% |
| Self-referencing (correct) |
457 |
74.5% |
| Pointing to railway.app |
150 |
24.5% |
| Case-sensitivity redirects |
6 |
1% |
| Missing canonical |
2 |
<1% |
150 pages have their canonical tag pointing to samndan-production.up.railway.app instead of www.samndan.com. This tells Google to treat the Railway staging environment as the authoritative version, potentially de-indexing production pages.
Affected sections:
| Section |
Affected Pages |
Impact |
| /video/ pages |
~100+ |
Medium — low-value pages |
| /contact/ (all locations) |
17 |
High — conversion pages |
| /es/contacto/ |
12 |
Medium |
| /case-results/ |
6 |
Critical — trust/E-E-A-T pages |
| /mass-torts/ (1 page) |
1 |
Low |
Root cause: WordPress Site URL or Yoast SEO settings were updated for most pages but not all. Pages last saved/published while the site was on Railway retained the staging canonical. The leak also appears in structured data (BreadcrumbList, primaryimage schemas).
Other Indexability Issues
| Issue |
Count |
Severity |
| Case-sensitivity URL variants |
6 pairs |
Medium — e.g., /Mesothelioma/ vs /mesothelioma/ |
| Missing canonical tags |
2 pages |
Low |
| noindex applied correctly |
8 pages |
N/A (intentional) |
Pages missing canonical:
- https://www.samndan.com/mesothelioma/contact/ (also noindexed)
- https://www.samndan.com/wp-content/uploads/2021/11/2Israel-Monte-Jackson-AG-Letter_w.o.-Exhibits.pdf
3. Response Codes & Redirects (Score: 8/10)
Status Code Distribution (Internal URLs)
| Code |
Count |
Assessment |
| 200 |
612 |
Healthy |
| 301 |
~30 internal |
Normal |
| 302 |
~5 internal |
Should audit |
| 404 |
3 |
Low — 2 malformed URLs |
| 5xx |
0 |
Clean |
Internal 404s
| URL |
Cause |
/nyc-injury/car-accident-lawyer/drunk-driving/href= |
Malformed href in content — has literal "href=" appended |
/?page_id=63782 |
Old WordPress draft/deleted page linked internally |
/fort-lauderdale-inj/fort-lauderdale-injury/motorcycle-accident-lawyer/ury/bicycle-accident-lawyer/ |
Malformed URL — broken link in content |
External Broken Links (52 URLs)
External 404s from government and news sites (cdc.gov, ilga.gov, nfsi.org, etc.). These should be updated to working URLs or removed.
Redirect Analysis
| Type |
Count |
Status |
| Internal redirect chains |
0 |
Clean |
| Internal redirect loops |
0 |
Clean |
| 302 (temporary) redirects |
96 total |
Mostly external (YouTube, Google Maps, Facebook mobile redirects) |
| Non-www double redirect |
Present |
http://samndan.com → https://samndan.com → https://www.samndan.com (2 hops) |
Assessment: Internal response codes are very clean — only 3 internal 404s, no chains, no loops. The non-www double redirect is a minor issue. External broken links need periodic cleanup.
4. Internal Link Architecture (Score: 6/10)
Link Distribution
| Metric |
Value |
| Total internal HTML pages |
612 |
| Pages without outlinks |
0 |
| Pages with high crawl depth |
0 |
| Max inlinks to a single page |
5,172 |
| Min inlinks to a page |
5 |
Top 10 Most Linked Pages
| Inlinks |
URL |
Section |
| 5,172 |
/construction-accident-lawyer/ |
PI |
| 4,359 |
/resources/ |
Blog |
| 4,307 |
/case-results/ |
Trust |
| 4,085 |
/attorney/ |
About |
| 3,972 |
/nyc-injury/ |
PI |
| 3,669 |
/nyc-injury/premises-liability-lawyer/slip-and-falls/ |
PI |
| 3,582 |
/nyc-injury/premises-liability-lawyer/ |
PI |
| 3,486 |
/resources/benefits-of-workers-compensation/ |
Blog |
| 3,479 |
/nyc-injury/motorcycle-accident-lawyer/ |
PI |
| 3,395 |
/chicago-injury/chicago-sexual-abuse-lawyer/ |
PI |
Key observation: The top 10 most linked pages are ALL PI (personal injury) pages or general sections. No mesothelioma page appears in the top 10 most linked, despite mesothelioma being the firm's highest-value practice area.
Bottom 10 Least Linked (Orphan Risk)
| Inlinks |
URL |
Type |
| 5 |
/ritawantee-persaud-car-accident/ |
Case page |
| 5 |
/site-map/ |
Utility |
| 5 |
/video/page/11/ |
Pagination |
| 5 |
/video/page/12/ |
Pagination |
| 5 |
/colapso-do-condominio-em-surfside-florida-champlain-towers-south/ |
Portuguese page |
| 5 |
/israel-jackson-death/ |
Case page |
| 6 |
/surfside-florida-condominium-collapse-champlain-towers-south/ |
Case page |
Link Architecture Issues
-
Flat distribution confirmed sitewide — The previous meso-only audit found 17-22 links per page with no hub-spoke differentiation. The full crawl confirms this pattern across ALL 612 pages.
-
PI pages dominate link equity — Construction accident lawyer gets 5,172 inlinks while mesothelioma hub gets far fewer, despite mesothelioma being the highest-value practice area ($500K+ case value vs. $50K PI).
-
No crawl depth issues — All pages are reachable within a reasonable number of clicks from the homepage.
5. On-Page Elements (Score: 6/10)
| Metric |
Value |
Target |
Status |
| Pages with titles |
612/612 |
100% |
Pass |
| Missing titles |
0 |
0 |
Pass |
| Duplicate titles |
27 (14 groups) |
0 |
Medium |
| Avg length |
63 chars |
50-60 |
Slightly long |
| Over 60 chars (truncation risk) |
292 (47.7%) |
<20% |
High |
| Under 30 chars |
0 |
0 |
Pass |
Duplicate title causes: Case-sensitivity URL variants (e.g., /Mesothelioma/ vs /mesothelioma/), resource/video pages sharing titles with blog counterparts.
| Metric |
Value |
Target |
Status |
| Pages with meta descriptions |
581/612 |
100% |
Medium |
| Missing |
31 |
0 |
Medium |
| Duplicate |
10 (5 groups) |
0 |
Low |
| Avg length |
141 chars |
120-155 |
Good |
| Over 160 chars (truncation) |
83 (13.5%) |
<10% |
Medium |
| Under 70 chars (too short) |
32 |
<10 |
Medium |
Missing meta descriptions: Concentrated in /resources/ blog posts, /attorney/ bio pages, /video/ index pages, and Spanish attorney pages.
| Metric |
Value |
Target |
Status |
| Pages with H1 |
611/612 |
100% |
Near-pass |
| Missing H1 |
1 |
0 |
Low |
| Duplicate H1 |
49 (19 groups) |
0 |
Medium |
Missing H1: /mass-torts/afff-firefighting-foam-lawsuit/
Duplicate H1 causes: Pagination sharing H1 ("Resources" x5, "Video Resources" x12), case-sensitivity URL variants.
Image Optimization
| Metric |
Count |
Severity |
| Images missing alt text |
79 |
Medium |
| Images over 100KB |
716 |
Critical |
| Images over 1MB |
~50+ |
Critical |
| Images over 10MB |
10 |
Critical |
Top 5 oversized images:
| Size |
Filename |
| 30.5 MB |
businesswoman-shaking-hand-of-partner.jpg |
| 29.3 MB |
concerned-passengers-assisting-elderly-man.jpg |
| 27.6 MB |
chinese-woman-using-mobile-phone-while-driving.jpg |
| 25.1 MB |
surgery-team-operating.jpg |
| 24.5 MB |
insurance-broker-helping-man-with-neck-brace.jpg |
All uploaded April 2025 as uncompressed JPGs. The top 10 total ~223 MB. These must be converted to WebP and properly compressed.
6. Structured Data (Score: 3/10)
Schema Coverage
| Metric |
Value |
| Pages with schema |
612/612 (100%) |
| Pages missing schema |
0 |
| Pages with validation errors |
589 (96.2%) |
Schema Types Deployed
| Schema Type |
Usage |
| BreadcrumbList |
Sitewide |
| WebPage, WebSite |
Sitewide |
| LegalService |
Practice area pages |
| MedicalCondition |
Mesothelioma pages |
| FAQPage |
Select pages (FL, NJ, PA geo) |
| VideoObject |
Video pages |
| Person |
Attorney pages |
| Organization |
Sitewide |
| AggregateRating |
Select pages |
| Article, CreativeWork |
Blog posts |
| PostalAddress, GeoCoordinates |
Location pages |
Validation Issues
96.2% of pages have schema validation errors. The common pattern is 1-2 errors + 0-10 warnings per page, suggesting a template-level issue rather than per-page problems.
Likely root causes:
- Missing required properties in LegalService schema
- Incorrect or missing fields in BreadcrumbList
- Schema references pointing to railway.app (on 150 affected pages)
- Spanish pages with inLanguage: "en-US" instead of "es"
Missing Schema Opportunities
| Page Type |
Current Schema |
Recommended Addition |
| Attorney bio pages |
Person |
Attorney (specialized) |
| Blog posts with FAQ sections |
Article |
FAQPage overlay |
| Case result pages |
None specific |
LegalCase or monetary claim data |
| Video pages |
VideoObject |
Transcript text for SEO |
| Mesothelioma pages (most) |
MedicalCondition |
FAQPage, HowTo |
Server Response Times
| URL |
TTFB |
Total Load |
HTML Size |
| / (homepage) |
1,035ms |
1,227ms |
751 KB |
| /mesothelioma/ |
976ms |
1,087ms |
447 KB |
| /nyc-mesothelioma-lawyer/ |
835ms |
970ms |
415 KB |
| /bronx-injury/ |
885ms |
1,045ms |
442 KB |
All pages exceed Google's 800ms TTFB threshold. The site runs on Railway.app (us-east4) behind Cloudflare, but Cloudflare is NOT caching HTML (cf-cache-status: DYNAMIC on all page loads).
Core Web Vitals
Note: PageSpeed Insights API quota was exceeded during testing. The following is based on TTFB measurements and page weight analysis. Full Lighthouse scores require manual testing or a PSI API key.
| Metric |
Estimated Status |
Evidence |
| LCP |
Likely Poor |
TTFB alone is 835ms-1,035ms before any rendering begins; combined with 10-30MB images, LCP will be severely impacted |
| CLS |
Unknown |
Requires Lighthouse; Elementor pages often have CLS issues from dynamic loading |
| INP |
Unknown |
Requires Lighthouse |
| FCP |
Likely Poor |
TTFB + server rendering time puts FCP well above 1.8s target |
Page Weight Issues
| Issue |
Impact |
| Homepage HTML: 751 KB (uncompressed) |
Very large — indicates heavy Elementor markup |
| 716 images over 100KB |
Massive page weight contributor |
| Top 10 images: 10-30 MB each |
Single-image page loads of 10MB+ |
| No WebP/AVIF detected |
All images served as JPG/PNG |
Infrastructure
| Component |
Status |
| CDN |
Cloudflare (active, but not caching HTML) |
| Hosting |
Railway.app (us-east4) |
| CMS |
WordPress 6.9 + Elementor 3.34.1 |
| PHP |
8.3.30 |
| HTTP version |
HTTP/1.1 (HTTP/2 not detected) |
| Caching |
max-age=14400 (4 hours) on HTML |
8. Security & HTTPS (Score: 2/10)
HTTPS Status
| Check |
Status |
| SSL certificate |
Active (Cloudflare universal SSL) |
| HTTP → HTTPS redirect |
Pass (301 redirect) |
| Non-www → www redirect |
Warning — double redirect: http://samndan.com → https://samndan.com → https://www.samndan.com |
| Mixed content |
Pass — no mixed content detected |
| Header |
Status |
Risk |
| Strict-Transport-Security (HSTS) |
MISSING |
High — browser can be downgraded to HTTP |
| Content-Security-Policy (CSP) |
MISSING |
High — no XSS protection |
| X-Frame-Options |
MISSING |
Medium — vulnerable to clickjacking |
| X-Content-Type-Options |
MISSING |
Medium — MIME sniffing risk |
| X-XSS-Protection |
MISSING |
Low — deprecated but still useful |
| Referrer-Policy |
MISSING |
Low — referrer data leakage |
| Permissions-Policy |
MISSING |
Low — browser features unrestricted |
Grade: F — All 7 standard security headers are absent.
| Header |
Value |
Risk |
| x-powered-by |
PHP/8.3.30 |
Medium — reveals server technology |
| x-railway-edge |
railway/us-east4-eqdc4a |
Medium — reveals hosting platform |
| x-railway-request-id |
[per-request] |
Low — debugging info exposed |
| x-pingback |
/xmlrpc.php |
Medium — WordPress attack surface |
Recommendations
- Enable HSTS via Cloudflare (one toggle in dashboard)
- Add security headers via Cloudflare Transform Rules or WordPress plugin
- Remove x-powered-by header (php.ini:
expose_php = Off)
- Disable XML-RPC (WordPress plugin or .htaccess)
- Suppress Railway headers in production
9. International SEO (Score: 1/10)
Hreflang Implementation
| Check |
Status |
| Hreflang tags present |
NO — zero implementation |
| x-default tag |
MISSING |
| html lang attribute |
en-US on English pages |
| html lang on Spanish pages |
en-US (incorrect — should be "es") |
| Spanish schema inLanguage |
"en-US" (incorrect) |
Spanish Content Status
| Finding |
Details |
| Spanish URLs (/es/) |
~40+ pages exist |
| /es/mesotelioma/ |
Returns 404 — page removed or never published |
| /es/contacto/ pages |
Active but canonical points to railway.app |
| Spanish attorney pages |
Active, missing meta descriptions |
| Language alternate tags |
None on any page |
URL Structure for Language Variants
English: www.samndan.com/{page}/
Spanish: www.samndan.com/es/{page}/
Portuguese: 1 page found (/colapso-do-condominio-em-surfside-florida-champlain-towers-south/)
The /es/ subfolder approach is acceptable, but without hreflang tags, Google cannot properly associate English and Spanish page pairs. The result is:
- Google may show English pages to Spanish searchers (and vice versa)
- Spanish pages compete with English pages for the same keywords
- No language consolidation of ranking signals
Content Quality Overview
Word Count Distribution
| Range |
Pages |
% |
| <300 words (thin) |
130 |
21.2% |
| 300-1,000 |
148 |
24.2% |
| 1,000-2,000 |
196 |
32.0% |
| 2,000-3,000 |
104 |
17.0% |
| 3,000+ |
34 |
5.6% |
Thin content breakdown:
- ~85 are /video/ pages (video embeds with minimal text)
- ~12 are /video/ pagination pages
- Remainder: /in-the-news/, /disclaimer/, /site-map/, some attorney pages
Duplicate Content
| Type |
Count |
| Exact duplicates |
0 |
| Near duplicates |
0 |
| Case-sensitivity variants |
6 URL pairs |
No content duplication issues detected by the crawler.
Priority Action Plan
| # |
Issue |
Affected Pages |
Fix |
| 1 |
Railway.app canonical leak |
150 pages |
Update WordPress Site URL in wp-config.php; re-save all affected pages in WP admin; or use Yoast bulk canonical override. Verify with site:samndan-production.up.railway.app in Google. |
| 2 |
Oversized images (10-30 MB) |
10+ pages |
Compress top 10 images from 10-30 MB to <200 KB each. Install ShortPixel or Imagify for bulk optimization. Convert to WebP. |
| 3 |
Malformed internal href attributes |
2 pages |
Fix /nyc-injury/car-accident-lawyer/drunk-driving/href= and /fort-lauderdale-inj/... broken links in page content |
| 4 |
Staging domain in schema markup |
150 pages |
Fixing canonical (item 1) should also fix schema references to railway.app |
HIGH — Fix Within 1 Week (Week 2)
| # |
Issue |
Affected Pages |
Fix |
| 5 |
Add ALL 7 security headers |
Sitewide |
Configure via Cloudflare Transform Rules: HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy |
| 6 |
Remove information disclosure headers |
Sitewide |
Suppress x-powered-by (PHP), x-railway-edge, x-pingback headers |
| 7 |
Bulk image compression |
716 images |
Install image optimization plugin; compress all images >100KB; serve WebP |
| 8 |
Fix schema validation errors |
589 pages |
Audit template-level schema in Yoast/Schema Pro; fix required properties in LegalService, BreadcrumbList templates |
| 9 |
Improve TTFB |
Sitewide |
Enable Cloudflare HTML caching (currently DYNAMIC); evaluate Railway.app performance; consider server-side caching plugin (WP Super Cache, W3TC) |
| 10 |
Fix non-www double redirect |
Sitewide |
Add http://samndan.com → https://www.samndan.com direct rule (skip intermediate https://samndan.com hop) |
MEDIUM — Fix Within 1 Month (Week 3-4)
| # |
Issue |
Affected Pages |
Fix |
| 11 |
Add hreflang tags |
All English/Spanish pairs |
Implement via Yoast or WPML; add x-default to English versions |
| 12 |
Fix Spanish page lang attributes |
~40 pages |
Set <html lang="es"> and schema inLanguage: "es" |
| 13 |
Audit /es/mesotelioma/ 404 |
1 page |
Either create the Spanish meso page or remove sitemap reference |
| 14 |
Add missing meta descriptions |
31 pages |
Write descriptions for /resources/, /attorney/, /video/ pages |
| 15 |
Fix duplicate titles |
27 pages |
Resolve case-sensitivity URL variants via 301 redirects |
| 16 |
Fix duplicate H1s |
49 pages |
Differentiate H1s on paginated pages; redirect case-sensitivity variants |
| 17 |
Add missing image alt text |
79 images |
Write descriptive alt text for all decorative and informational images |
| 18 |
Clean up external broken links |
52 URLs |
Update or remove links to dead .gov and news sites |
| 19 |
Add video transcripts |
~85 /video/ pages |
Add transcript text to thin video pages (also improves accessibility) |
| 20 |
Fix title tag truncation |
292 pages |
Trim titles over 60 characters to prevent SERP truncation |
LOW — Optimize Next Quarter
| # |
Issue |
Scope |
Fix |
| 21 |
Enable HTTP/2 |
Sitewide |
Cloudflare should serve HTTP/2 by default; verify Railway backend supports it |
| 22 |
Reduce HTML page weight |
Sitewide |
Audit Elementor markup; homepage HTML alone is 751 KB |
| 23 |
Add Attorney schema |
/attorney/ pages |
Upgrade from generic Person to Attorney structured data |
| 24 |
Add FAQPage schema |
Pages with FAQ content |
Hub, NYC, veterans pages have FAQ content but no FAQPage schema |
| 25 |
Audit Portuguese page |
1 page |
/colapso-do-condominio-em-surfside-florida-champlain-towers-south/ — decide keep/redirect |
| 26 |
Internal link rebalancing |
Sitewide |
Shift link equity toward mesothelioma pages; current top 10 most-linked are all PI pages |
Implementation Roadmap
Week 1: Emergency Fixes
Week 3-4: On-Page & International
Month 2+: Optimization
Appendix: Crawl Configuration
| Setting |
Value |
| Spider |
Screaming Frog SEO Spider 18.5 |
| Profile |
full-audit |
| Max depth |
Unlimited |
| Max pages |
10,000 |
| Render JS |
No |
| Respect robots.txt |
Yes |
| Export format |
CSV |
| Total URLs discovered |
5,085 |
| Internal URLs |
3,030 |
| External URLs |
2,055 |
| HTML pages (200) |
612 |
| Crawl duration |
724 seconds (12 min) |
| CSV exports |
44 files |
Comparison: Previous Audit vs. This Audit
| Dimension |
Meso-Only Audit (Mar 5) |
Sitewide Audit (Mar 6) |
Change |
| Scope |
22 meso pages |
612 HTML pages (all) |
28x wider |
| Data source |
Browser checks |
Screaming Frog crawl |
Ground truth |
| Canonical issues found |
2 pages (case-results) |
150 pages |
75x more |
| Image issues found |
Not audited |
716 oversized, 79 missing alt |
New finding |
| Schema errors found |
Not audited |
589 pages (96.2%) |
New finding |
| Security headers |
Not fully audited |
ALL 7 missing |
New finding |
| Hreflang |
Known missing |
Confirmed zero + /es/mesotelioma/ 404 |
Worse than expected |
| Overall score |
5.5/10 (estimated) |
42/100 (data-backed) |
Precise measurement |
The sitewide crawl reveals the canonical crisis is 75x worse than the meso-only audit detected. What appeared to be a 2-page issue is actually a 150-page issue affecting entire site sections.
Generated by SEO Conductor — samndan.com Sitewide Technical SEO Audit, March 2026
Data Source: Screaming Frog SEO Spider 18.5 (full-audit profile)