đ¸ď¸ Site Diff Engine - Whole-Site Change Detection
Pricing
Pay per event
đ¸ď¸ Site Diff Engine - Whole-Site Change Detection
đ¸ď¸ Crawls an entire site and diffs it run over run: pages ADDED, REMOVED, CHANGED (structural vs body) or UNCHANGED. â Canonical URL handling collapses /page, /page/ and ?utm_source=x into one page, and flags near-duplicate templated pages within a run.
Pricing
Pay per event
Rating
0.0
(0)
Developer
mohamed alaya
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Site Diff Engine
Most "change monitors" watch one page. This one watches a whole site and tells you what actually moved between two runs â pages that appeared, pages that vanished, and pages whose content or SEO surface really changed. Timestamps, tokens and view counters never trigger a false alert, and neither does a trailing slash.
How it works
- Discover every page via
sitemap.xml/sitemap_index.xml, same-site link-following, or both (crawlMode: "auto"), capped bymaxPages. - Canonicalize every URL so
/page,/page/,/page/index.htmland/page?utm_source=x&ref=yall collapse to the exact same page identity â a page's own<link rel="canonical">wins when present. This is the single most important correctness detail: without it, every run reports phantom adds and removes. - Fingerprint each page's cleaned main content (nav/ads/footers stripped, then timestamps, CSRF tokens, session ids and view counters stripped) separately from its title / H1 / meta description â so a copy edit and an SEO-relevant change never look the same.
- Diff this run's site snapshot against the last one:
ADDED,REMOVED,CHANGED(changeCategory:STRUCTURAL,BODYorBOTH),UNCHANGED. - Flag near-duplicates within the same run â thin category pages, boilerplate legal pages, auto-generated tag pages â via word-shingle Jaccard similarity.
The first run on a site only records a baseline (status: "BASELINE") â it never reports the
whole site as "changed" just because nothing existed before.
Input
{"startUrl": "https://example.com/","maxPages": 200,"crawlMode": "auto","urlExcludePatterns": ["/(cart|checkout|login)(/|$)"],"onlyChanges": true}
Output
One dataset row per page:
| field | meaning |
|---|---|
status | BASELINE ¡ ADDED ¡ REMOVED ¡ CHANGED ¡ UNCHANGED |
changeCategory | STRUCTURAL (title/H1/meta), BODY, BOTH, or null |
title / h1 / metaDescription | current values (null for REMOVED) |
previousTitle / previousH1 / previousMetaDescription | prior run's values |
nearDuplicateOf | canonical URLs of pages this one is near-identical to |
SUMMARY in the key-value store gives run-level counts (added/removed/changed/unchanged,
structural vs body change counts, near-duplicate page count).
Honest limits
- No JavaScript rendering. Pages that build their body client-side (SPA shells) will fingerprint as near-empty. Server-rendered and static sites work well.
- State is deliberately lean. Only fingerprints and the small structural fields (title/H1/
meta) are persisted between runs, not full page bodies â so a
CHANGEDbody row tells you a page changed, not a word-level diff of what changed. - Near-duplicate detection is O(n²) over the pages in one run. Fine at the
maxPagesscale this Actor targets; keepmaxPagessane on very large sites. robots.txtis not consulted. UseurlExcludePatternsto keep the crawl off pages you don't want touched.- Canonicalization is URL-rule +
<link rel="canonical">based. Sites with exotic session-based URL schemes (path-embedded session ids, etc.) may needurlExcludePatternsto avoid crawl explosion.
Schedule it
Run daily or weekly depending on how often the site changes. Point it at the same
stateStoreName every run so the diff has something to compare against.