How to Duplicate a Page in WordPress
Copying blocks moves the content but loses the template, featured image and custom fields. Use a duplication plugin, a code snippet or a reusable pattern depending on what you actually need.
Pick the method by what you need to keep. Copying blocks takes seconds and keeps only the content. A duplication plugin keeps everything — template, featured image, custom fields, builder data. A pattern is right when you will reuse the layout many times rather than copy one page once.
Method 1: copy all blocks
For a straightforward content page:
- Open the page in the editor.
- Open the options menu (three dots, top right) and choose Copy all blocks.
- Create a new page and paste.
What comes across: all block content and its settings.
What does not: the page template, featured image, parent and order under Page Attributes, custom fields, SEO title and description, and anything a page builder stored in post meta.
That gap is the reason so many "why does my duplicate look different" questions exist.
Method 2: a duplication plugin
The practical default. Install a post-duplication plugin and a Duplicate or Clone link appears in the row actions on the Pages and Posts lists.
Configure it once:
- copy status as draft, so a half-edited copy never goes live by accident;
- copy the featured image, taxonomies and custom fields;
- add a suffix like " (copy)" to the title so the two are distinguishable in the list;
- restrict the capability to editors and above.
This is also the only method that reliably handles Elementor, Divi and similar builders, because it copies post meta wholesale.
Method 3: a code snippet
If you would rather not add a plugin, add a duplicate action in a small custom plugin:
<?php
add_filter('page_row_actions', 'ts_duplicate_link', 10, 2);
add_filter('post_row_actions', 'ts_duplicate_link', 10, 2);
function ts_duplicate_link(array $actions, WP_Post $post): array
{
if (! current_user_can('edit_posts')) {
return $actions;
}
$url = wp_nonce_url(
admin_url('admin-post.php?action=ts_duplicate&post='.$post->ID),
'ts_duplicate_'.$post->ID
);
$actions['duplicate'] = '<a href="'.esc_url($url).'">Duplicate</a>';
return $actions;
}
add_action('admin_post_ts_duplicate', function () {
$id = (int) ($_GET['post'] ?? 0);
if (! $id || ! current_user_can('edit_posts') || ! wp_verify_nonce($_GET['_wpnonce'] ?? '', 'ts_duplicate_'.$id)) {
wp_die('Not allowed.');
}
$original = get_post($id);
$new_id = wp_insert_post([
'post_title' => $original->post_title.' (copy)',
'post_content' => $original->post_content,
'post_excerpt' => $original->post_excerpt,
'post_type' => $original->post_type,
'post_status' => 'draft',
'post_parent' => $original->post_parent,
'menu_order' => $original->menu_order,
]);
foreach (get_post_meta($id) as $key => $values) {
if (in_array($key, ['_edit_lock', '_edit_last'], true)) {
continue;
}
foreach ($values as $value) {
add_post_meta($new_id, $key, maybe_unserialize($value));
}
}
wp_safe_redirect(admin_url('post.php?action=edit&post='.$new_id));
exit;
});
Put this in a plugin file rather than the theme, so it survives a theme change. The nonce and capability checks are not optional — without them the endpoint lets anyone create posts.
Method 4: a synced pattern, for repeated layouts
If the goal is "use this layout on twenty pages", duplication is the wrong tool. Select the blocks, open the options menu and choose Create pattern.
- A synced pattern updates everywhere when you edit it — right for a call-to-action block that must stay identical.
- An unsynced pattern inserts a copy you then edit freely — right for a page section you customise each time.
Patterns live under Appearance → Editor → Patterns in a block theme. Background on the model is in what is a WordPress block theme.
Duplicating a whole site rather than a page
If you actually want a copy of the site — for staging or a redesign — that is a migration, not a duplication. Use your host's staging feature, or follow how to migrate a WordPress site, and take a backup first, per how to back up a WordPress site.
After duplicating
- Give the copy its own slug and title before publishing.
- Check the featured image, template and page attributes carried over.
- Update internal links inside the copy that still point at the original.
- Leave it as a draft until it is genuinely a different page; two near-identical published pages compete with each other, as why a site is not showing in Google explains.
Frequently asked
- It copies the content only. The template, featured image, page attributes, custom fields and SEO metadata stay behind, which is why a copied page often looks different from the original.
- Only if both versions are published and indexable. Keep the copy as a draft while you work on it, and make sure the final version has its own slug and title.
- Yes, and a duplication plugin is the reliable way. Builders store layout in post meta, which manual block copying does not carry across.