Duplicate posts accumulate from failed imports, copy-paste publishing, or migration errors. Left uncleaned, they create duplicate content SEO problems and confuse your editorial workflow. Here is how to find and remove them safely.
Before You Start: Backup
Always back up your database before running any bulk delete operation. Use UpdraftPlus or your hosting control panel to create a backup. If you delete the wrong content, you need a recovery option.
Method 1: Delete Duplicate Posts Plugin
Install Delete Duplicate Posts from WordPress.org. Go to Tools → Delete Duplicate Posts. Configure the detection method:
- Title only — finds posts with identical titles (may produce false positives)
- Content only — finds posts with identical body content
- Title + Content — strictest matching, fewest false positives
Select the post type (Posts, Pages, Products). Click “Find Duplicates” to preview results before deleting. Review the list carefully. Choose “Move to Trash” rather than permanent delete for your first run — you can restore false positives from trash.
Prefer to have someone handle the setup? Describe what you need and get a free estimate — no obligation.
Method 2: WP-CLI Command
For developers comfortable with command line, WP-CLI provides more control:
wp post list --post_type=post --format=csv --fields=ID,post_title
This lists all posts with IDs and titles. Sort the output to identify duplicates. Review, then delete confirmed duplicates with wp post delete [ID] –force.
Method 3: Direct Database Query
In phpMyAdmin or your database tool, run a query on wp_posts grouping by post_title where count is greater than 1 — this shows all titles appearing more than once. Use this to identify duplicates before deleting through the WordPress admin.
This shows all post titles appearing more than once. Use this to identify duplicates before deleting through the WordPress admin.
After Cleanup: Redirect Old URLs
If deleted duplicate posts had indexed URLs, set up 301 redirects to the canonical version. Use the Redirection plugin to map deleted URLs to the correct posts. This prevents 404 errors from search engines following the now-deleted duplicate URLs.