DateSweep bulk-updates the published and/or modified dates of your WordPress content — posts, pages, custom post types and comments. This is the complete manual. Applies to DateSweep 2.6.x (free) and DateSweep Pro 1.4.x.
On this page
1. What DateSweep does
DateSweep bulk-updates the published date and/or modified date of your WordPress content — posts, pages, custom post types and comments. New dates are drawn randomly within a range you choose, so the result looks like natural editing activity rather than one suspicious timestamp on everything.
What it never does: touch your content. Titles, text, excerpts, custom fields, settings — nothing changes except the date columns you asked for.
2. Installation
- In WordPress, go to Plugins → Add Plugin, search for “DateSweep”, click Install and Activate (or upload the zip via Upload Plugin).
- Find it under Tools → DateSweep.
- Pro: upload
datesweep-pro.zipvia Upload Plugin and activate it alongside the free plugin. Pro features appear inside the same screens.
3. Core concepts
| Concept | Meaning |
|---|---|
| Published date | When the item was first published (post_date). Shown on most posts, used in feeds and archives. |
| Modified date | When the item was last edited (post_modified). Many themes show “Last updated…”; search engines read it from your sitemap and structured data. |
| Both dates (set equal) | Sets published = modified to one new date. Typical for pre-launch passes where history doesn’t matter. |
| Range | Every selected item gets its own random date inside this window — e.g. “Last month” spreads your content naturally across the last 30 days. Never in the future. |
| Safety guard | On by default: a modified date is never set earlier than the item’s published date. |
| Run | One execution of Update Dates. Runs process in batches of 100, show a progress bar, and are snapshotted for Undo. |
4. Walkthrough: your first sweep
- Open Tools → DateSweep. Tabs across the top: All content, one per post type, Comments.
- Choose the range — e.g. Last month.
- Optionally narrow the selection: filter by taxonomy (categories, tags, custom taxonomies; AND/OR), pick specific items (hierarchical types like pages), or include statuses (published only by default; add drafts, pending, private).
- Choose the date field: modified (recommended), published, or both set equal.
- Click Preview (dry run) — a table shows each item’s current dates and a sample new date. Nothing is written. (Free: first 10 items; Pro: 100.)
- Click Update Dates, confirm the item count, and watch the progress bar.
- Changed your mind? Recent runs (bottom of the page) → Undo restores the exact previous dates. (Free: most recent run; Pro: last 10 runs.)
5. Typical scenarios
5.1 Pre-launch freshness pass (site built from an old template)
All content tab → range Last month (or Last 3 months for a bigger site) → statuses: add Drafts if the template has unpublished leftovers → field: Both dates (set equal) → Preview → Update. The whole site now reads as recently created. Consider following with the Comments tab if demo/imported comments exist.
5.2 After an import or migration
Imports often stamp every post with the same date, or shift everything by a timezone. Pick the affected post type, set a range matching the site’s real history (e.g. Last 6 months), field Published date (or both), and run. Comments next, so none predate their posts.
5.3 Refreshing reviewed content (SEO maintenance)
You’ve genuinely reviewed/updated a batch of older articles. Select their category, range Last 15 days, field Modified date. Their “last updated” dates now reflect the work, spread naturally. Pro tip: age targeting (only items not modified in the last N months) makes sure genuinely fresh content is skipped.
5.4 Recurring freshness (Pro)
Tools → DateSweep Schedule: enable, choose frequency (daily/weekly/monthly), content scope, range, field, and — recommended — age targeting (e.g. only items not modified in the last 6 months). Every scheduled run is snapshotted and appears in Recent runs, undoable like any manual run. Save & Run Now executes immediately.
6. Pro features in detail
- 10-run undo history — every run restorable, not just the last one.
- 100-row dry-run previews.
- Scheduler — see 5.4.
- Age targeting — available on every tab and in the scheduler; skips recently edited items so real work is never overwritten.
- ACF date fields — if Advanced Custom Fields is active and the post type has date / date-time fields, an “ACF date fields” option appears. Checked fields get new dates in the same range, in ACF’s own storage formats. Only fields that already have a value are touched, and ACF changes are included in Undo.
- IndexNow — enable on the Schedule page. After every run, the affected URLs are submitted to IndexNow (Bing, Yandex, Seznam and others re-crawl within minutes instead of weeks). The verification key file is served automatically at
yoursite.com/<key>.txt— no file management. Requires a publicly reachable site.
7. Troubleshooting
| Symptom | Explanation / fix |
|---|---|
| “No items match the selected filters.” | Your filter combination (taxonomy, statuses, age targeting) excludes everything. Loosen a filter. |
| “The job expired or was already finished.” | A run was left mid-way for over an hour (e.g. laptop closed). Just start again — completed batches were already saved and snapshotted. |
| Dates changed in wp-admin but not on the site | Page cache or CDN still serves old HTML. Clear your caching plugin / CDN cache. |
| Visitor-facing date didn’t change although wp-admin shows it | Your theme prints a date from a custom field, not the WordPress date. If it’s an ACF field, use Pro’s ACF integration. |
| Undo says fewer items than expected | Undo counts posts/comments; companion data (ACF fields) is restored with them, not counted separately. |
| IndexNow shows response 4xx/429 | The site (or the key file) isn’t publicly reachable — normal on localhost/staging. It resolves on the live site. |
| Scheduled run didn’t fire at the exact minute | WP-Cron runs when the site gets traffic. On quiet sites, add a real cron hitting wp-cron.php — any host can set this up. |
8. For developers
All extension points, stable since 2.4.
Actions
dsw_post_dates_updated( $post_id, $new_date, $field )— after each post is updateddsw_post_dates_restored( $post_id, $dates )— after an undo restores a postdsw_form_rows( $active_tab )— render extra form rowsdsw_batch_processed( $ids, $job )— after each batch (also fires for scheduled runs)dsw_restore_snapshot( $type, $object_id, $data )— restore custom snapshot types
Filters
dsw_collected_post_ids( $ids, $query_args )— adjust the selectiondsw_new_timestamp( $timestamp, $id, $from, $to, $field )— shape the date distributiondsw_job_data( $job, $target )— attach data to a job from the formdsw_preview_limit( 10 )— dry-run row capdsw_keep_runs( 1 )— undo history length
Snapshots live in {prefix}dsw_snapshots; jobs are transients (dsw_job_*, 1-hour TTL). Uninstalling removes the table and all options.
9. A note on SEO honesty
DateSweep is a tool for making dates truthful and presentable — after rebuilds, imports and real content maintenance. Refreshing dates with zero content changes, on a schedule, purely to game recency is a pattern search engines are aware of; at best it does nothing, at worst it erodes their trust in all your dates. The features are designed to keep you on the right side of that line (age targeting, real-edit protection) — use them.
Support: the WordPress.org forum (free) · priority support via your DateSweep Pro account.