{"id":352399,"date":"2026-08-21T08:30:48","date_gmt":"2026-08-21T08:30:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hublo-duplicate-content-auditor\/"},"modified":"2026-08-22T04:45:01","modified_gmt":"2026-08-22T04:45:01","slug":"hublo-duplicate-content-auditor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hublo-duplicate-content-auditor\/","author":23547152,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"HUBLO Duplicate Content Auditor","header_author":"HUBLO","header_description":"Find near-duplicate and overlapping posts on your site, see which one should be the canonical version, compare them section by section, and export a merge and redirect plan. Read-only: it plans, you decide.","assets_banners_color":"f0f2f7","last_updated":"2026-08-22 04:45:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/hublo-wp.com\/free-plugins\/duplicate-content-auditor\/","header_author_uri":"https:\/\/hublo-wp.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":72,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"hublowp","date":"2026-08-22 04:45:01"}},"upgrade_notice":{"1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3659898,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3659898,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3659898,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3659898,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3659898,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3659930,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=hublo-duplicate-content-auditor&tab=duplicates\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":false},\"login\":true,\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"hublo-duplicate-content-auditor\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n$hdca_seed = array(\\n  array('t' => 'The complete guide to content consolidation (2019)', 's' => 'hdca-demo-consolidation-guide-2019', 'c' => '<h2>Why duplicate pages happen<\\\/h2>\\n\\nEvery site that has been publishing for a few years accumulates pages that quietly compete with each other. Two guides on the same subject, written eighteen months apart by different people, both ranking, neither winning.\\n\\nThe cost is not obvious from the dashboard. Search engines have to choose between the two, internal links get split across both, and the version that happens to win is often the older one that nobody has updated.\\n\\n<h2>Running the audit<\\\/h2>\\n\\nStart by listing the pages that cover the same ground. Compare them section by section rather than as whole documents, because the useful question is not which page is better overall but which paragraphs exist in only one of them.\\n\\n<h2>Choosing the canonical version<\\\/h2>\\n\\nOnce you know which version should survive, the retired URL needs to point at it with a permanent redirect. Skipping that step throws away whatever authority the old URL had accumulated.\\n\\n<h2>Measuring the result<\\\/h2>\\n\\nGive the change a month before judging it. Consolidation tends to look worse before it looks better, because the merged page has to re-establish itself while the redirect settles.'),\\n  array('t' => 'Content consolidation: the complete guide', 's' => 'hdca-demo-consolidation-reposted', 'c' => '<h2>Why duplicate pages happen<\\\/h2>\\n\\nEvery site that has been publishing for a few years accumulates pages that quietly compete with each other. Two guides on the same subject, written eighteen months apart by different people, both ranking, neither winning.\\n\\nThe cost is not obvious from the dashboard. Search engines have to choose between the two, internal links get split across both, and the version that happens to win is often the older one that nobody has updated.\\n\\n<h2>Running the audit<\\\/h2>\\n\\nStart by listing the pages that cover the same ground. Compare them section by section rather than as whole documents, because the useful question is not which page is better overall but which paragraphs exist in only one of them.\\n\\n<h2>Choosing the canonical version<\\\/h2>\\n\\nOnce you know which version should survive, the retired URL needs to point at it with a permanent redirect. Skipping that step throws away whatever authority the old URL had accumulated.\\n\\n<h2>Measuring the result<\\\/h2>\\n\\nGive the change a month before judging it. Consolidation tends to look worse before it looks better, because the merged page has to re-establish itself while the redirect settles.'),\\n  array('t' => 'The complete guide to content consolidation (2023 rewrite)', 's' => 'hdca-demo-consolidation-guide-2023', 'c' => '<h2>Why duplicate pages happen<\\\/h2>\\n\\nEvery site that has been publishing for a few years accumulates pages that quietly compete with each other. Two guides on the same subject, written eighteen months apart by different people, both ranking, neither winning.\\n\\nThe cost is not obvious from the dashboard. Search engines have to choose between the two, internal links get split across both, and the version that happens to win is often the older one that nobody has updated.\\n\\n<h2>Running the audit<\\\/h2>\\n\\nStart by listing the pages that cover the same ground. Compare them section by section rather than as whole documents, because the useful question is not which page is better overall but which paragraphs exist in only one of them.\\n\\n<h2>Choosing the canonical version<\\\/h2>\\n\\nOnce you know which version should survive, the retired URL needs to point at it with a permanent redirect. Skipping that step throws away whatever authority the old URL had accumulated.\\n\\n<h2>Tooling<\\\/h2>\\n\\nSpreadsheets work for twenty pages and stop working somewhere around two hundred. At that point you want the comparison done for you, with the differences surfaced rather than the similarities.\\n\\n<h2>Working with a team<\\\/h2>\\n\\nAgree who owns the decision before you start. Content consolidation stalls more often over ownership than over technique.'),\\n  array('t' => 'Content consolidation playbook for editorial teams', 's' => 'hdca-demo-consolidation-playbook', 'c' => '<h2>Before you start<\\\/h2>\\n\\nAgree who owns the decision before you start. Content consolidation stalls more often over ownership than over technique.\\n\\n<h2>Running the audit<\\\/h2>\\n\\nStart by listing the pages that cover the same ground. Compare them section by section rather than as whole documents, because the useful question is not which page is better overall but which paragraphs exist in only one of them.\\n\\n<h2>Choosing the canonical version<\\\/h2>\\n\\nOnce you know which version should survive, the retired URL needs to point at it with a permanent redirect. Skipping that step throws away whatever authority the old URL had accumulated.\\n\\n<h2>Tooling<\\\/h2>\\n\\nSpreadsheets work for twenty pages and stop working somewhere around two hundred. At that point you want the comparison done for you, with the differences surfaced rather than the similarities.'),\\n  array('t' => 'Five content audit tools compared', 's' => 'hdca-demo-audit-tools-roundup', 'c' => '<h2>What we looked at<\\\/h2>\\n\\nPublishing calendars create their own duplication. An annual round-up rewritten each January will overlap heavily with last year\\\\'s, and only some of those overlaps are worth resolving.\\n\\n<h2>Choosing the canonical version<\\\/h2>\\n\\nOnce you know which version should survive, the retired URL needs to point at it with a permanent redirect. Skipping that step throws away whatever authority the old URL had accumulated.\\n\\n<h2>Verdict<\\\/h2>\\n\\nNone of the options handled unspaced scripts well, which mattered more than the feature lists suggested. Everything else was a wash.'),\\n  array('t' => 'Thin content is not duplicate content', 's' => 'hdca-demo-thin-vs-duplicate', 'c' => '<h2>A different problem<\\\/h2>\\n\\nThin pages and duplicate pages get confused constantly, and the remedies point in opposite directions. A thin page needs more; a duplicate page needs less of it somewhere else.\\n\\n<h2>How to tell them apart<\\\/h2>\\n\\nLook at whether another page on the same site already answers the question. If nothing does, the page is thin and wants expanding. If something does, you have an overlap and one of them should give way.\\n\\n<h2>What to do first<\\\/h2>\\n\\nResolve overlaps before expanding anything. Expanding a page that duplicates another one makes the duplication worse and the decision harder to reverse later on.'),\\n  array('t' => '\\u30b3\\u30f3\\u30c6\\u30f3\\u30c4\\u7d71\\u5408\\u306e\\u9032\\u3081\\u304b\\u305f\\uff082019\\u5e74\\u7248\\uff09', 's' => 'hdca-demo-ja-consolidation-2019', 'c' => '<h2>\\u91cd\\u8907\\u30b3\\u30f3\\u30c6\\u30f3\\u30c4\\u304c\\u751f\\u307e\\u308c\\u308b\\u7406\\u7531<\\\/h2>\\n\\n\\u6570\\u5e74\\u306b\\u308f\\u305f\\u3063\\u3066\\u8a18\\u4e8b\\u3092\\u516c\\u958b\\u3057\\u3066\\u3044\\u308b\\u30b5\\u30a4\\u30c8\\u3067\\u306f\\u3001\\u540c\\u3058\\u4e3b\\u984c\\u3092\\u6271\\u3046\\u30da\\u30fc\\u30b8\\u304c\\u3044\\u3064\\u306e\\u307e\\u306b\\u304b\\u8907\\u6570\\u5b58\\u5728\\u3059\\u308b\\u3088\\u3046\\u306b\\u306a\\u308b\\u3002\\u66f8\\u304d\\u624b\\u304c\\u9055\\u3048\\u3070\\u69cb\\u6210\\u3082\\u5909\\u308f\\u308b\\u305f\\u3081\\u3001\\u3069\\u3061\\u3089\\u3082\\u4e2d\\u9014\\u534a\\u7aef\\u306b\\u8a55\\u4fa1\\u3055\\u308c\\u308b\\u72b6\\u614b\\u304c\\u7d9a\\u304d\\u3084\\u3059\\u3044\\u3002\\n\\n<h2>\\u76e3\\u67fb\\u306e\\u9032\\u3081\\u304b\\u305f<\\\/h2>\\n\\n\\u307e\\u305a\\u540c\\u3058\\u8a71\\u984c\\u3092\\u6271\\u3046\\u30da\\u30fc\\u30b8\\u3092\\u6d17\\u3044\\u51fa\\u3057\\u3001\\u6587\\u66f8\\u5168\\u4f53\\u3067\\u306f\\u306a\\u304f\\u898b\\u51fa\\u3057\\u5358\\u4f4d\\u3067\\u6bd4\\u8f03\\u3059\\u308b\\u3002\\u91cd\\u8981\\u306a\\u306e\\u306f\\u300c\\u3069\\u3061\\u3089\\u304c\\u512a\\u308c\\u3066\\u3044\\u308b\\u304b\\u300d\\u3067\\u306f\\u306a\\u304f\\u3001\\u300c\\u7247\\u65b9\\u306b\\u3057\\u304b\\u306a\\u3044\\u6bb5\\u843d\\u306f\\u3069\\u308c\\u304b\\u300d\\u3067\\u3042\\u308b\\u3002\\n\\n<h2>\\u7d71\\u5408\\u5f8c\\u306e\\u8a08\\u6e2c<\\\/h2>\\n\\n\\u7d71\\u5408\\u306e\\u52b9\\u679c\\u306f\\u4e00\\u304b\\u6708\\u307b\\u3069\\u69d8\\u5b50\\u3092\\u898b\\u3066\\u304b\\u3089\\u5224\\u65ad\\u3059\\u308b\\u3002\\u30ea\\u30c0\\u30a4\\u30ec\\u30af\\u30c8\\u304c\\u5b89\\u5b9a\\u3059\\u308b\\u307e\\u3067\\u306f\\u4e00\\u6642\\u7684\\u306b\\u6570\\u5024\\u304c\\u4e0b\\u304c\\u308b\\u3053\\u3068\\u304c\\u3042\\u308b\\u3002'),\\n  array('t' => '\\u30b3\\u30f3\\u30c6\\u30f3\\u30c4\\u7d71\\u5408\\u306e\\u9032\\u3081\\u304b\\u305f\\uff082023\\u5e74\\u6539\\u8a02\\uff09', 's' => 'hdca-demo-ja-consolidation-2023', 'c' => '<h2>\\u91cd\\u8907\\u30b3\\u30f3\\u30c6\\u30f3\\u30c4\\u304c\\u751f\\u307e\\u308c\\u308b\\u7406\\u7531<\\\/h2>\\n\\n\\u6570\\u5e74\\u306b\\u308f\\u305f\\u3063\\u3066\\u8a18\\u4e8b\\u3092\\u516c\\u958b\\u3057\\u3066\\u3044\\u308b\\u30b5\\u30a4\\u30c8\\u3067\\u306f\\u3001\\u540c\\u3058\\u4e3b\\u984c\\u3092\\u6271\\u3046\\u30da\\u30fc\\u30b8\\u304c\\u3044\\u3064\\u306e\\u307e\\u306b\\u304b\\u8907\\u6570\\u5b58\\u5728\\u3059\\u308b\\u3088\\u3046\\u306b\\u306a\\u308b\\u3002\\u66f8\\u304d\\u624b\\u304c\\u9055\\u3048\\u3070\\u69cb\\u6210\\u3082\\u5909\\u308f\\u308b\\u305f\\u3081\\u3001\\u3069\\u3061\\u3089\\u3082\\u4e2d\\u9014\\u534a\\u7aef\\u306b\\u8a55\\u4fa1\\u3055\\u308c\\u308b\\u72b6\\u614b\\u304c\\u7d9a\\u304d\\u3084\\u3059\\u3044\\u3002\\n\\n<h2>\\u76e3\\u67fb\\u306e\\u9032\\u3081\\u304b\\u305f<\\\/h2>\\n\\n\\u307e\\u305a\\u540c\\u3058\\u8a71\\u984c\\u3092\\u6271\\u3046\\u30da\\u30fc\\u30b8\\u3092\\u6d17\\u3044\\u51fa\\u3057\\u3001\\u6587\\u66f8\\u5168\\u4f53\\u3067\\u306f\\u306a\\u304f\\u898b\\u51fa\\u3057\\u5358\\u4f4d\\u3067\\u6bd4\\u8f03\\u3059\\u308b\\u3002\\u91cd\\u8981\\u306a\\u306e\\u306f\\u300c\\u3069\\u3061\\u3089\\u304c\\u512a\\u308c\\u3066\\u3044\\u308b\\u304b\\u300d\\u3067\\u306f\\u306a\\u304f\\u3001\\u300c\\u7247\\u65b9\\u306b\\u3057\\u304b\\u306a\\u3044\\u6bb5\\u843d\\u306f\\u3069\\u308c\\u304b\\u300d\\u3067\\u3042\\u308b\\u3002\\n\\n<h2>\\u7d71\\u5408\\u5f8c\\u306e\\u8a08\\u6e2c<\\\/h2>\\n\\n\\u7d71\\u5408\\u306e\\u52b9\\u679c\\u306f\\u4e00\\u304b\\u6708\\u307b\\u3069\\u69d8\\u5b50\\u3092\\u898b\\u3066\\u304b\\u3089\\u5224\\u65ad\\u3059\\u308b\\u3002\\u30ea\\u30c0\\u30a4\\u30ec\\u30af\\u30c8\\u304c\\u5b89\\u5b9a\\u3059\\u308b\\u307e\\u3067\\u306f\\u4e00\\u6642\\u7684\\u306b\\u6570\\u5024\\u304c\\u4e0b\\u304c\\u308b\\u3053\\u3068\\u304c\\u3042\\u308b\\u3002\\n\\n<h2>\\u30c4\\u30fc\\u30eb\\u306b\\u3064\\u3044\\u3066<\\\/h2>\\n\\n\\u4e8c\\u5341\\u30da\\u30fc\\u30b8\\u7a0b\\u5ea6\\u306a\\u3089\\u8868\\u8a08\\u7b97\\u30bd\\u30d5\\u30c8\\u3067\\u8db3\\u308a\\u308b\\u304c\\u3001\\u4e8c\\u767e\\u30da\\u30fc\\u30b8\\u3092\\u8d85\\u3048\\u308b\\u3068\\u7834\\u7dbb\\u3059\\u308b\\u3002\\u305d\\u306e\\u898f\\u6a21\\u306b\\u306a\\u3063\\u305f\\u3089\\u6bd4\\u8f03\\u305d\\u306e\\u3082\\u306e\\u3092\\u81ea\\u52d5\\u5316\\u3057\\u305f\\u3044\\u3002'),\\n);\\n\\nforeach ( $hdca_seed as $i => $row ) {\\n    if ( get_page_by_path( $row['s'], OBJECT, 'post' ) ) { continue; }\\n    wp_insert_post( array(\\n        'post_title'   => $row['t'],\\n        'post_name'    => $row['s'],\\n        'post_content' => $row['c'],\\n        'post_status'  => 'publish',\\n        'post_type'    => 'post',\\n        \\\/\\\/ Spread the dates so the canonical suggestion has a real signal to\\n        \\\/\\\/ weigh rather than seven posts published in the same second.\\n        'post_date'    => gmdate( 'Y-m-d H:i:s', strtotime( \\\"-\\\" . ( 400 - $i * 47 ) . \\\" days\\\" ) ),\\n    ) );\\n}\\n\\n\\\/\\\/ Drive the scan server-side. The admin screen does this over admin-ajax from\\n\\\/\\\/ JavaScript, which a blueprint cannot click, so the preview would otherwise\\n\\\/\\\/ open on an empty table and teach the visitor the wrong thing.\\nif ( class_exists( 'HDCA_Scanner' ) ) {\\n    HDCA_Scanner::start();\\n    $guard = 0;\\n    do {\\n        $state = HDCA_Scanner::step();\\n    } while ( empty( $state['finished'] ) && ++$guard < 400 );\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3659898,"resolution":"1","location":"assets","locale":"","width":2520,"height":2778},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3659898,"resolution":"2","location":"assets","locale":"","width":2520,"height":1562},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3659898,"resolution":"3","location":"assets","locale":"","width":2556,"height":850},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3659898,"resolution":"4","location":"assets","locale":"","width":2556,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3659898,"resolution":"5","location":"assets","locale":"","width":2400,"height":445},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3659898,"resolution":"6","location":"assets","locale":"","width":2520,"height":3270},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3659898,"resolution":"7","location":"assets","locale":"","width":2520,"height":1884},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3659898,"resolution":"8","location":"assets","locale":"","width":2400,"height":235},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3659898,"resolution":"9","location":"assets","locale":"","width":2520,"height":2376}},"screenshots":{"1":"How many of your posts overlap, and how badly \u2014 before you open a single pair.","2":"Every overlapping pair, ranked by similarity and banded near identical, strong or partial.","3":"The canonical suggestion shows its working: length, age, comment activity, inbound internal links, featured image and slug quality, scored side by side so you can disagree with it.","4":"The sections that exist only in the version you are about to retire \u2014 the question worth answering before any merge.","5":"The redirect the retired post would need: source path, target path, status code \u2014 shown before anything is created.","6":"Japanese, Chinese and Korean posts are compared with character shingles instead of word shingles, so unspaced scripts match properly instead of producing noise.","7":"Post types, similarity threshold, minimum word count and exclusions \u2014 set the scope before the scan, not after.","8":"Export the duplicate report and the redirect plan as CSV, in a shape other redirect plugins can import. Nothing is applied to your site by this plugin.","9":"Where this plugin finishes \u2014 an exported plan \u2014 and what the separate Pro plugin would do with it."}},"plugin_section":[],"plugin_tags":[19795,17013,23268,727,186],"plugin_category":[55],"plugin_contributors":[276791],"plugin_business_model":[],"class_list":["post-352399","plugin","type-plugin","status-publish","hentry","plugin_tags-content-audit","plugin_tags-duplicate-content","plugin_tags-merge-posts","plugin_tags-redirect","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-hublowp","plugin_committers-hublowp"],"banners":{"banner":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/banner-772x250.png?rev=3659898","banner_2x":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/banner-1544x500.png?rev=3659898","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/icon.svg?rev=3659898","icon":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/icon.svg?rev=3659898","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-1.png?rev=3659898","caption":"How many of your posts overlap, and how badly \u2014 before you open a single pair."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-2.png?rev=3659898","caption":"Every overlapping pair, ranked by similarity and banded near identical, strong or partial."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-3.png?rev=3659898","caption":"The canonical suggestion shows its working: length, age, comment activity, inbound internal links, featured image and slug quality, scored side by side so you can disagree with it."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-4.png?rev=3659898","caption":"The sections that exist only in the version you are about to retire \u2014 the question worth answering before any merge."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-5.png?rev=3659898","caption":"The redirect the retired post would need: source path, target path, status code \u2014 shown before anything is created."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-6.png?rev=3659898","caption":"Japanese, Chinese and Korean posts are compared with character shingles instead of word shingles, so unspaced scripts match properly instead of producing noise."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-7.png?rev=3659898","caption":"Post types, similarity threshold, minimum word count and exclusions \u2014 set the scope before the scan, not after."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-8.png?rev=3659898","caption":"Export the duplicate report and the redirect plan as CSV, in a shape other redirect plugins can import. Nothing is applied to your site by this plugin."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-9.png?rev=3659898","caption":"Where this plugin finishes \u2014 an exported plan \u2014 and what the separate Pro plugin would do with it."}],"raw_content":"<!--section=description-->\n<p>Sites that publish for years end up competing with themselves: the 2019 guide\nand the 2023 rewrite, the category page and the pillar post, three\nnear-identical round-ups. You know they are in there. What you do not know is\nwhich one to keep, and what you would quietly lose by deleting the other.<\/p>\n\n<p>This plugin answers both, and changes nothing until you say so.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><strong>Scan.<\/strong> Every post is compared against every other post that could\nplausibly match it.<\/li>\n<li><strong>Compare.<\/strong> For each overlapping pair: which version is stronger, on what\nevidence, and what only the other one contains.<\/li>\n<li><strong>Plan.<\/strong> A merge and redirect plan you can export and act on \u2014 by hand,\nwith a redirect plugin you already use, or with Pro.<\/li>\n<\/ol>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li><strong>Every overlapping pair, ranked.<\/strong> Sorted by how much they overlap, banded\nnear identical, strong or partial.<\/li>\n<li><strong>A canonical suggestion that shows its working.<\/strong> Content length,\npublication date, comment activity, inbound internal links, featured image and\nslug quality are scored side by side, so you can see why one version was\nsuggested \u2014 and disagree.<\/li>\n<li><strong>What you would lose.<\/strong> The question before any merge is what only the\nother version has. The audit lists exactly those sections.<\/li>\n<li><strong>A redirect plan before anything is created.<\/strong> Source path, target path,\nstatus code.<\/li>\n<li><strong>CSV export.<\/strong> The duplicate report and the redirect plan, in a shape other\nredirect plugins can import.<\/li>\n<\/ul>\n\n<p>Similarity detection that assumes spaces between words fails badly on\nJapanese, Chinese and Korean. This plugin detects the script and switches from\nword shingles to character shingles, so CJK content is compared properly\ninstead of producing noise.<\/p>\n\n<h4>What it will not do<\/h4>\n\n<ul>\n<li><strong>Read-only.<\/strong> It never merges, deletes, rewrites, trashes or redirects\nanything. Every destructive step stays with you.<\/li>\n<li><strong>Nothing leaves your server.<\/strong> No external service is contacted, no\nanalytics, no telemetry.<\/li>\n<li><strong>No account, no API key.<\/strong> Install it and use it.<\/li>\n<li><strong>Tidy.<\/strong> Scan data lives in three tables of its own, which are removed when\nyou uninstall.<\/li>\n<\/ul>\n\n<h4>This plugin, and the Pro plugin<\/h4>\n\n<p>Free is a complete job: find the overlap, understand it, decide, export the\nplan. It is not a trial \u2014 nothing expires and no feature stops working. A\nseparate Pro plugin, distributed outside WordPress.org and not bundled here,\ncarries the plan out.<\/p>\n\n<p><strong>This plugin, free, does all of the analysis:<\/strong><\/p>\n\n<ul>\n<li>Finds every overlapping pair and ranks them<\/li>\n<li>Shows why one version is suggested, signal by signal<\/li>\n<li>Shows what only the other version contains<\/li>\n<li>Previews the merge and the redirect<\/li>\n<li>Exports the whole plan as CSV<\/li>\n<\/ul>\n\n<p><strong>Pro carries the plan out<\/strong>, inside WordPress:<\/p>\n\n<ul>\n<li>Performs the merge<\/li>\n<li>Creates the 301 redirects<\/li>\n<li>Rewrites internal links pointing at the retired post<\/li>\n<li>Revision backup, rollback and conflict detection<\/li>\n<\/ul>\n\n<p>Matches are banded \u2014 near identical, strong overlap, partial overlap \u2014\nbecause a bare percentage is harder to act on than a category.<\/p>\n\n<h4>Try it without installing<\/h4>\n\n<p>A WordPress Playground blueprint ships with this plugin. When the directory\noffers a Live Preview for it, that preview boots a temporary WordPress in your\nbrowser, seeded with posts that overlap on purpose, and opens straight on the\nresults. Nothing is installed on your own site.<\/p>\n\n<p>Full documentation, worked examples and the Free\/Pro comparison:\nhttps:\/\/hublo-wp.com\/free-plugins\/duplicate-content-auditor\/<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not contact any external service on its own. Nothing is sent\nfrom your site in the background.<\/p>\n\n<p>The \"Upgrade to Pro\" button is an ordinary link. If <strong>you<\/strong> click it, your\nbrowser opens https:\/\/hublo-wp.com\/buy\/duplicate-content-auditor, operated by\nHUBLO. While the Pro edition is on sale, that address takes you to Stripe's\nhosted checkout, where Stripe takes the payment; this plugin never sees or\nhandles card details. The link carries no query\nstring: your site address, your email address, your installation identifier\nand your scan results are never appended to it and never leave your site.\nNothing happens until you click.<\/p>\n\n<p>The Pro edition is a separate plugin distributed outside WordPress.org. This\nplugin never downloads it, never installs it and never updates it. It fetches\nno executable code from anywhere. After purchase you download the Pro ZIP in\nyour browser and install it yourself via Plugins &gt; Add New &gt; Upload Plugin.<\/p>\n\n<ul>\n<li>Purchase service: https:\/\/hublo-wp.com\/buy\/duplicate-content-auditor - operated by HUBLO<\/li>\n<li>Payment processing: Stripe - https:\/\/stripe.com\/privacy<\/li>\n<li>Terms: https:\/\/hublo-wp.com\/terms\/<\/li>\n<li>Privacy: https:\/\/hublo-wp.com\/hublo-privacy-policy\/<\/li>\n<li>Refunds: https:\/\/hublo-wp.com\/refund-policy\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install from the Plugins screen, or upload the folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate it.<\/li>\n<li>Open <strong>Duplicate Audit<\/strong> in the admin menu.<\/li>\n<li>Set your post types and similarity threshold, then press <strong>Scan for duplicates<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20delete%2C%20merge%20or%20redirect%20anything%3F\"><h3>Does it delete, merge or redirect anything?<\/h3><\/dt>\n<dd><p>No. It never writes to your content. It produces a plan and exports it; acting\non the plan is your decision, with your tools.<\/p><\/dd>\n<dt id=\"what%20similarity%20threshold%20should%20i%20use%3F\"><h3>What similarity threshold should I use?<\/h3><\/dt>\n<dd><p>60% is a sensible default. Raise it if you are seeing loose matches that are\nnot really duplicates; lower it if you suspect overlap the audit is not\ncatching.<\/p><\/dd>\n<dt id=\"why%20are%20short%20posts%20matching%20each%20other%3F\"><h3>Why are short posts matching each other?<\/h3><\/dt>\n<dd><p>Very short texts share phrasing by coincidence. Set a minimum word count in\nSettings \u2014 100 words removes most false matches.<\/p><\/dd>\n<dt id=\"how%20does%20it%20stay%20fast%20on%20a%20large%20site%3F\"><h3>How does it stay fast on a large site?<\/h3><\/dt>\n<dd><p>Comparing every post against every other post grows quadratically. Instead\neach post gets a fixed-length fingerprint, and only posts whose fingerprints\ncollide are compared in full.<\/p><\/dd>\n<dt id=\"is%20the%20canonical%20suggestion%20authoritative%3F\"><h3>Is the canonical suggestion authoritative?<\/h3><\/dt>\n<dd><p>No, and it does not pretend to be. The scoring table is shown in full\nprecisely so you can see the reasoning and override it.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20japanese%2C%20chinese%20or%20korean%20content%3F\"><h3>Does it work on Japanese, Chinese or Korean content?<\/h3><\/dt>\n<dd><p>Yes. Similarity detection that assumes spaces between words fails on unspaced\nscripts, so the plugin detects the script and switches to character shingles.<\/p><\/dd>\n<dt id=\"does%20it%20need%20an%20account%20or%20an%20api%20key%3F\"><h3>Does it need an account or an API key?<\/h3><\/dt>\n<dd><p>No. Nothing leaves your server, and there is nothing to sign up for.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20uninstall%20it%3F\"><h3>What happens if I uninstall it?<\/h3><\/dt>\n<dd><p>Its three tables and its options are removed. Your content is untouched,\nbecause it was never modified in the first place.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<li>Near-duplicate detection with CJK-aware shingling.<\/li>\n<li>Canonical suggestion with visible scoring, section comparison, redirect plan and CSV export.<\/li>\n<\/ul>","raw_excerpt":"Find the posts competing with each other, see which should win, and what you would lose by retiring the other.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/352399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=352399"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hublowp"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=352399"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=352399"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=352399"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=352399"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=352399"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=352399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}