An SEO audit tool has just told you that your site has “duplicate content”, sometimes with an alarming count beside it. You have never copied a page in your life. So where did it come from, and is Google going to hold it against you?
Almost always, WordPress duplicate content is not text you wrote twice. It is the same page reachable at more than one address: through an archive, an image page, a tracking link or a different version of your domain. That is normal for any content management system, and it is not a penalty. Google simply picks one address to show and ignores the rest. Your job is to make sure it picks the one you want, and the main tool for that is the canonical URL. Copying a page on purpose is a separate subject, covered in our post on how to duplicate a page in WordPress safely.
Where WordPress duplicate content comes from
None of these is a fault in WordPress. They are side effects of features that are useful to visitors. It helps to know them so an audit report stops looking mysterious. If the wider SEO side is new to you, our WordPress SEO basics post sets the scene, and this check is one of many listed in our guide to managing a WordPress website.
Attachment pages
For years, every image or file you uploaded got its own page, showing just that image with a title. On a site with hundreds of images this meant hundreds of near-empty pages. Recent versions of WordPress switch attachment pages off on new installations, so links go straight to the file, but older sites can still have them. Both Rank Math and Yoast SEO offer a setting to redirect attachment pages to the file itself or to the post the file belongs to. If yours is switched off, consider turning it on.
Archives
The same post appears in full or as an excerpt on its category page, its tag pages, the date archive for that month, the author archive and the blog’s main page. When themes show full posts on archives rather than excerpts, the overlap is larger. This is expected and search engines handle it well, as long as each single post carries a canonical tag pointing to itself. The quality of the archive pages themselves is a different question, which our post on category and tag pages and SEO covers.
Two archive types are often not needed on a small business site. If only one person writes the blog, the author archive repeats the main blog list exactly. Date archives rarely help anyone. Both main SEO plugins can switch off author or date archives, or mark them noindex; check the archive settings in your plugin.
Addresses with extra parameters
A link shared in a newsletter might end in “?utm_source=newsletter”. A comment reply link can add “?replytocom=” with a number. Some plugins add their own parameters for sorting or filtering. Each variation is technically a different address showing the same page. The canonical tag tells search engines which plain address is the real one.
www, non-www, http and https
Your site could in theory load at four versions of its address: with and without “www”, and over http or https. WordPress usually redirects visitors to the address set in Settings → General, and a properly configured host forces https as well. Check this yourself: type each of the four versions into your browser and make sure they all end up at one address. Our redirect checker tool shows each step of the redirect if you want to see exactly what happens.
Paginated comments and pages
If Settings → Discussion is set to break comments into pages, a busy post gains extra addresses for each comment page. Long posts split with the Page Break block do something similar. Neither is usually a problem, but it is worth knowing why a crawler reports them.
How canonical URLs work in WordPress
A canonical tag is a line in the page’s code that says, in effect, “the main address for this content is this one”. WordPress adds a canonical tag to single posts and pages on its own. SEO plugins extend this to archives and other page types, and let you change it page by page.
To see what a page is declaring, open it, view the page source and search for “canonical”. You should see a line with rel=”canonical” and the page’s own clean address. If it points somewhere unexpected, such as a staging domain or a different page, that needs fixing.
Setting a custom canonical URL in WordPress
Occasionally you want one page to point its canonical at another, for example when the same article is published on your site and on a partner’s, or when two very similar landing pages exist for advertising.
- Open the page in the editor and find your SEO plugin’s panel.
- In Rank Math, open the Advanced tab; in Yoast SEO, open the Advanced section. Both have a field for the canonical URL.
- Paste the full address of the page you want treated as the main one, then update.
- Check the page source to confirm the new canonical appears once.
Leave this field empty on almost every page. An empty field means the plugin uses the page’s own address, which is correct. A wrong canonical can quietly keep a good page out of search results, so only set one deliberately and write down why.
Google treats the canonical tag as a strong hint rather than an order. If your internal links, sitemap and redirects all point at one address, Google is far more likely to agree with your choice.
Checking what Google actually chose
Google Search Console shows you whether Google agrees with your canonicals.
- Use the URL Inspection tool on a page. It shows the canonical you declared and the one Google selected. If they differ, Google is treating another address as the main version.
- In the Pages report under Indexing, look at the reasons pages are not indexed. Statuses such as “Alternate page with proper canonical tag” are usually fine: they mean the duplicate was spotted and the main version is indexed. “Duplicate, Google chose different canonical than user” is the one worth investigating.
When Google picks a different page, the cause is usually that the two pages are nearly identical, or that more of your own links point at the other version. Either make the pages clearly different, or redirect one into the other.
WordPress duplicate content that needs more than a canonical tag
- A public staging or old development site. A full copy of your site on a test address can be indexed alongside the real one. Protect it with a password or block indexing on it, and our guide to staging sites has safer habits for test copies.
- Two pages written for the same purpose. If you have both “Our Services” and “What We Do” saying the same thing, combine them into one and use a 301 redirect from the old address. Our post on how to redirect an old page in WordPress explains the steps.
- Location pages with only the town name changed. A canonical tag will not rescue pages that exist only to repeat the same text. Either write genuinely different content for each area, or keep one page that lists the areas you serve.
- Text copied from a supplier or manufacturer. Product descriptions used word for word on many sites are not a penalty, but your page has no reason to be chosen over theirs. Rewrite the parts that matter to your customers.
Frequently asked questions
Will Google penalise my site for duplicate content?
Not for the ordinary duplicates WordPress creates. Google groups the addresses showing the same content and picks one to show. Problems arise only when duplication is deliberate and deceptive, such as many copied pages made to manipulate search, or when Google picks an address you did not want.
Should I set the canonical of every archive page to the homepage?
No. That tells search engines each archive is really the homepage, which is not true and is likely to be ignored. Leave archive canonicals pointing to themselves, and use noindex for archive types you do not want in search results.
Does the URL of an image file count as duplicate content?
The file itself is just an image, so it is not a duplicate of any page. The problem was only ever the separate attachment page WordPress could create around each image. Redirecting those attachment pages to the file or parent post removes the issue.
My audit tool still shows duplicates after I fixed the canonicals. Why?
Many audit tools report pages with similar content even when a correct canonical tag is in place, because they compare text rather than reading canonicals the way Google does. Check what Google selected using URL Inspection. If Google agrees with your canonical, the audit warning can be ignored.
When URL Inspection keeps reporting that Google picked a different canonical from yours, the reason is usually in the links, redirects or plugin settings rather than on the page itself. Our WordPress support team can look through those with you and explain what each one is telling Google.
Next in this series: Social Share Image in WordPress: Fix Link Previews