{"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-10-24T02:04:16","modified_gmt":"2026-10-24T02:04:16","slug":"hublo-duplicate-content-auditor","status":"publish","type":"plugin","link":"https:\/\/me.wordpress.org\/plugins\/hublo-duplicate-content-auditor\/","author":23547152,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Duplicate Content Finder","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-10-24 02:04:16","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":258,"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","revision":3659929},"1.0.1":{"tag":"1.0.1","author":"hublowp","date":"2026-10-24 02:04:16","revision":3762650}},"upgrade_notice":{"1.0.1":"<p>Listing and metadata update only. No functional change.<\/p>","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":3762651,"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","1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3762649,"resolution":"1","location":"assets","locale":"","width":2520,"height":1562},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3762649,"resolution":"2","location":"assets","locale":"","width":2556,"height":850},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3762649,"resolution":"3","location":"assets","locale":"","width":2556,"height":1000},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3762649,"resolution":"4","location":"assets","locale":"","width":2400,"height":445},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3762649,"resolution":"5","location":"assets","locale":"","width":2400,"height":235},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3762649,"resolution":"6","location":"assets","locale":"","width":2520,"height":1884},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3762649,"resolution":"7","location":"assets","locale":"","width":2520,"height":2778},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3762649,"resolution":"8","location":"assets","locale":"","width":2520,"height":3270},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3659898,"resolution":"9","location":"assets","locale":"","width":2520,"height":2376}},"screenshots":{"1":"Find duplicate and overlapping posts: every pair ranked by similarity, banded near identical, strong or partial, with the suggested post to keep.","2":"See which post should stay and why: length, age, comment activity, inbound internal links, featured image and slug quality, scored side by side so you can disagree.","3":"See what you would lose: the sections that exist only in the version you are about to retire.","4":"Preview the redirect the retired post would need \u2014 source path, target path, status code \u2014 before anything is created.","5":"Export the duplicate report and the redirect plan as CSV for the redirect plugin you already use. Nothing is applied to your site.","6":"Set the scan scope: post types, similarity threshold, minimum word count and exclusions.","7":"The audit at a glance: how many posts overlap, and how many pairs are near identical.","8":"Japanese, Chinese and Korean posts are compared with character shingles, so unspaced scripts match properly.","9":"Where this plugin finishes \u2014 an exported plan \u2014 and what the separate Pro plugin would do with it."}},"plugin_section":[],"plugin_tags":[6363,127657,19795,17013,186],"plugin_category":[55],"plugin_contributors":[276791],"plugin_business_model":[],"class_list":["post-352399","plugin","type-plugin","status-publish","hentry","plugin_tags-canonical","plugin_tags-content-analysis","plugin_tags-content-audit","plugin_tags-duplicate-content","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=3762649","caption":"Find duplicate and overlapping posts: every pair ranked by similarity, banded near identical, strong or partial, with the suggested post to keep."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-2.png?rev=3762649","caption":"See which post should stay and why: length, age, comment activity, inbound internal links, featured image and slug quality, scored side by side so you can disagree."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-3.png?rev=3762649","caption":"See what you would lose: the sections that exist only in the version you are about to retire."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-4.png?rev=3762649","caption":"Preview the redirect the retired post would need \u2014 source path, target path, status code \u2014 before anything is created."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-5.png?rev=3762649","caption":"Export the duplicate report and the redirect plan as CSV for the redirect plugin you already use. Nothing is applied to your site."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-6.png?rev=3762649","caption":"Set the scan scope: post types, similarity threshold, minimum word count and exclusions."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-7.png?rev=3762649","caption":"The audit at a glance: how many posts overlap, and how many pairs are near identical."},{"src":"https:\/\/ps.w.org\/hublo-duplicate-content-auditor\/assets\/screenshot-8.png?rev=3762649","caption":"Japanese, Chinese and Korean posts are compared with character shingles, so unspaced scripts match properly."},{"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>Find duplicate and overlapping WordPress posts before they compete with each\nother in search: the 2019 guide and the 2023 rewrite, the category page and the\npillar post, three near-identical round-ups.<\/p>\n\n<p>Run one scan and the plugin finds every overlapping pair, shows which version\nis stronger and why, lists the content that exists only in the weaker one, and\nbuilds a merge and redirect plan you can export. It changes nothing on your\nsite automatically \u2014 the decision stays yours.<\/p>\n\n<h4>What it finds<\/h4>\n\n<ul>\n<li><strong>Every overlapping pair, ranked.<\/strong> Sorted by similarity and banded near\nidentical, strong overlap or partial overlap, because a category is easier to\nact on than a bare percentage.<\/li>\n<li><strong>Duplicate content in any language.<\/strong> Japanese, Chinese and Korean posts are\ncompared with character shingles instead of word shingles, so unspaced scripts\nmatch properly instead of producing noise.<\/li>\n<\/ul>\n\n<h4>What you see after scanning<\/h4>\n\n<ul>\n<li><strong>Which post should stay, and why.<\/strong> Content length, publication date,\ncomment activity, inbound internal links, featured image and slug quality are\nscored side by side, so you can see the reasoning behind the canonical\nsuggestion \u2014 and disagree with it.<\/li>\n<li><strong>What you would lose.<\/strong> The sections that exist only in the version you are\nabout to retire: the question worth answering before any merge.<\/li>\n<li><strong>A redirect plan before anything is created.<\/strong> Source path, target path and\nstatus code for each retired post.<\/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<h4>Why it is different<\/h4>\n\n<p>Spotting two similar posts is the easy part. A content audit becomes useful\nwhen it tells you which version to keep and what merging would cost, and this\nplugin is built around that decision rather than a similarity score alone.<\/p>\n\n<h4>Safe by design<\/h4>\n\n<ul>\n<li><strong>Read-only.<\/strong> It never merges, deletes, rewrites, trashes or redirects\nanything.<\/li>\n<li><strong>Nothing leaves your server.<\/strong> No external service, no analytics, no\ntelemetry.<\/li>\n<li><strong>No account, no API key.<\/strong> Install it and scan.<\/li>\n<li><strong>Tidy.<\/strong> Scan data lives in three tables of its own, removed on uninstall.<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><strong>Scan.<\/strong> Each post gets a fixed-length fingerprint, and only posts whose\nfingerprints collide are compared in full \u2014 so large sites stay fast.<\/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> Export the merge and redirect plan and act on it by hand, with a\nredirect plugin you already use, or with Pro.<\/li>\n<\/ol>\n\n<h4>Free, and the separate Pro plugin<\/h4>\n\n<p>Free is a complete job: find the overlap, compare, decide, export the plan.\nIt is not a trial \u2014 nothing expires and no feature stops working.<\/p>\n\n<p>A separate Pro plugin, distributed outside WordPress.org and not bundled here,\ncarries the plan out inside WordPress: it performs the merge, creates the 301\nredirects, rewrites internal links pointing at the retired post, and keeps a\nrevision backup with rollback.<\/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 and worked examples:\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=\"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%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=\"why%20does%20the%20admin%20screen%20say%20%22hublo%20duplicate%20content%20auditor%22%3F\"><h3>Why does the admin screen say \"HUBLO Duplicate Content Auditor\"?<\/h3><\/dt>\n<dd><p>That is the plugin's original name. The directory listing now uses a\ndescriptive name; the plugin, its settings and its data are the same.<\/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.1<\/h4>\n\n<ul>\n<li>Listing update: the plugin is now listed as \"Duplicate Content Finder\", with a clearer description, tags and screenshot order. No functional change.<\/li>\n<\/ul>\n\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 overlapping WordPress posts, see which one should stay, what you'd lose, and export a merge and redirect plan.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/352399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=352399"}],"author":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hublowp"}],"wp:attachment":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=352399"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=352399"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=352399"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=352399"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=352399"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=352399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}