Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

WordPress does not require the human-readable title of each post to be unique. To prevent duplicate titles, first determine whether the collision is a post title, URL slug, or SEO title tag; then use an editorial checker or add a save-time validation rule with WordPress’s post_exists() function. A different URL slug does not prove that two post titles are unique.

Identify what is actually duplicated

“Duplicate title” can describe three different problems. The remedy depends on which value is repeated.

What is duplicated? Where it appears Appropriate remedy
Post title The title shown in the WordPress editor and usually on the page Warn or block editors with a title check
URL slug The post_name portion of the permalink Review permalink and slug-generation behavior
SEO title The metadata or HTML title used for search-result snippets Edit the SEO title field or investigate the SEO plugin’s output

Ask what the report actually found: two WordPress records with the same title, two URLs, multiple <title> elements on one page, or repeated SEO-title text across pages. A support discussion about Yoast treats SEO-title customization as separate from duplicate post records: WordPress.org Support: Duplicate post titles.

Why a “-2” URL does not solve duplicate titles

WordPress core’s wp_unique_post_slug() generates a unique URL slug in applicable workflows and can append a numeric suffix such as -2. It operates on post_name, not on the human-readable title, so two posts can both be titled “Company News” while using different slugs. The function’s reference is at WordPress Developer Resources: wp_unique_post_slug().

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The same reference documents that slug uniqueness checks are not performed while a post remains in draft or pending status. Consequently, neither a slug suffix nor a draft’s current slug is a reliable title-uniqueness rule.

Choose an enforcement approach

Approach Best for What to verify before relying on it
Editor plugin Teams that need an in-editor warning without maintaining code Post types covered, statuses queried, warning versus blocking behavior, editor support, WordPress-version compatibility, and intentional exemptions
Custom validation Sites with imports, APIs, custom publishing rules, or a need to define exact behavior Which post types and statuses count, how edits exclude the current record, and which save or publish boundary is enforced
Duplicate-post workflow Creating a draft copy as a starting point Reviewing and changing the copied title before publication; cloning content is not a uniqueness check

Use an editor plugin for a straightforward warning

The WordPress.org listing for Unique Title Checker describes support for posts, pages, and custom post types and exposes the unique_title_checker_arguments filter for changing the query arguments used to find matching titles.

Treat the listing as a starting point rather than a guarantee for every installation. Check its current compatibility with your WordPress release, the editor your team uses, the statuses it considers duplicates, and whether it warns or blocks. Test an intentional title reuse case before enabling it on production.

Add a custom duplicate-title check

WordPress core provides post_exists(), which searches for an existing post by title and can also receive content, date, post type, and status. It returns the matching post ID or 0 when no match is found. See the function reference at WordPress Developer Resources: post_exists().

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Define the rule before writing code

  • Decide whether the rule covers posts only or also pages and custom post types.
  • Decide whether drafts, pending items, private items, and published items count.
  • Decide whether an editor may intentionally reuse a title in a different section or content type.
  • When editing an existing post, exclude that post’s own ID from the duplicate result.
  • Apply the check at the boundary that matters: editorial save, publish, import, REST request, or another custom workflow.

Core lookup example

This example shows the lookup building block. The surrounding save or import handler must enforce the result according to your site’s rule.

$match_id = post_exists(
    $title,
    '',                 // optional content
    '',                 // optional date
    'post',             // post type to check
    'publish'           // status to check
);

if ($match_id && (int) $match_id !== (int) $current_post_id) {
    // Warn or stop the operation according to your publishing policy.
}

Changing the post type or status arguments changes what “duplicate” means. Calling the function without deciding those values can produce a check that is too broad or too narrow for the editorial workflow.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Handle drafts, imports, and copied posts deliberately

Draft and pending content

Do not infer title uniqueness from the slug of a draft or pending post. The core slug function explicitly omits uniqueness checks in those statuses, and slug uniqueness is separate from title uniqueness in any case.

Imports and APIs

A title check that runs only in the block editor can be bypassed by an importer, REST client, scheduled task, or custom integration. If duplicate titles must never reach publication, put equivalent validation at each publishing path or centralize the rule in the site’s publishing layer.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Duplicate-post plugins

Yoast Duplicate Post is designed to clone content or create a new draft based on an existing post. It is not documented as a title-uniqueness checker. After copying, review the draft title and change it when your policy requires unique values.

Diagnose duplicate titles reported by an SEO audit

  1. Open the affected URLs and compare their WordPress post records and visible headings.
  2. Check whether the repeated text is the post title, an SEO title-field value, or the rendered HTML <title>.
  3. If the records are distinct but only SEO titles repeat, edit the SEO title templates or per-page SEO title fields in the SEO plugin.
  4. If the records themselves share a title and unique titles are required, implement an editor or custom validation rule.
  5. If only URL slugs differ by a suffix, leave the slug behavior alone unless the permalink itself is incorrect; it does not address title duplication.

Test the rule before enforcing it

  • Create two new items with the same title in the same post type and status; confirm the expected warning or block.
  • Edit an existing item without changing its title; confirm it does not flag itself.
  • Try the same title in a post type that should be allowed or disallowed by policy.
  • Repeat the test with draft, pending, and published statuses if those statuses differ for your site.
  • Repeat through every publishing path your team uses, including imports and APIs.
  • Verify that a title warning does not accidentally prevent saving unrelated edits when reuse is intentional.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.