# Command: `websites:cleanup-duplicates`

**Description**: Find and clean up duplicate websites (including IDN Unicode/Punycode duplicates)
**Status**: completed
**Started**: 2026-07-10 16:09:00 | **Ended**: 2026-07-10 16:09:01 | **Duration**: 1s
**Jobs**: 0 dispatched / 0 completed / 0 failed

---

## Command Output

16:09:00 [INFO] Lock acquired for command: websites:cleanup-duplicates

16:09:00 [INFO] 🔍 Starting duplicate website cleanup...

16:09:00 [INFO] Found 1 group(s) of duplicate websites.

16:09:00 [INFO] (dry-run — no data is changed; shows the re-key + merge + keeper-canonicalize plan)

16:09:00 [INFO] <fg=yellow\>Duplicate group for: https://adlogger.org</\>

16:09:00 [INFO] <fg=green\>KEEP: ID 3cfc1c33-d85c-456e-8fcb-31cba35e16b8, www.adlogger.org (type LINK, status LIVE)</\>

16:09:00 [INFO] <fg=red\>DELETE: ID 3f145f93-5828-402a-b852-856ed442282b, adlogger.org (type LINK, status LIVE)</\>

16:09:00 [WARNING] ⚠️ Keeper and losers already share the canonical domain\_name. If websites:canonicalize-hosts already ran, data filed under the old variant may be missed.

16:09:00 [INFO] ↳ mongo:uptime\_keywords: 1 doc(s) would reassign

16:09:01 [INFO] ↳ keeper canonicalize: domain\_name adlogger.org→adlogger.org, url/hostname/tld → canonical

16:09:01 [INFO] 📊 Cleanup complete:

16:09:01 [INFO] ✅ Groups processed: 0

16:09:01 [INFO] ⏭  Groups skipped (re-key/keeper failures): 0

16:09:01 [INFO] ❗ Groups aborted (unexpected error): 0

16:09:01 [INFO] 🔄 Domain-keyed docs re-keyed onto keepers: 0

16:09:01 [INFO] 🧹 Logical duplicates merged: 0

16:09:01 [INFO] ✅ Losers deleted: 0

16:09:01 [INFO] ⏭  Losers skipped (reassign failures): 0

16:09:01 [INFO] 🔤 Keepers canonicalized: 0

16:09:01 [INFO] Dry run — no changes written. Take a mongodump of the at-risk collections + a mysqldump of 'websites', then re-run without --dry-run to apply.

16:09:01 [INFO] Lock released for websites:cleanup-duplicates

---

## Jobs (0)

*No jobs dispatched*

*Exported at 2026-08-27T06:39:07+00:00*
