This guide starts where the diagnosis ends. If you have not yet confirmed that two of your posts are genuinely competing (same query, same intent, and the numbers to show it), read the guide to finding keyword cannibalization in WordPress first. Plenty of pairs that look like keyword cannibalization (or “cannibalisation”) are better left alone, and the fixes below are much easier to do than to undo.
The running example is a personal-finance blog with two posts on one search: /what-are-sinking-funds/ and /sinking-funds-2024/. Other examples come from a recipe blog, a local plumber, an outdoor-gear shop and a SaaS help centre, because the right fix depends on the pair, not the niche. All the numbers are illustrative.
First, decide which fix fits
There are six fixes, and choosing between them takes three questions. The first is about search intent: would a reader typing the query be equally happy with either page?
| Fix | Use it when | Example |
|---|---|---|
| Merge + 301 | Same intent, and the weaker post has sections worth keeping; its URL then gets a 301 redirect | “Sinking funds” and “Sinking funds 2024” on a finance blog |
| 301 only | Same intent, and the weaker post adds nothing the winner lacks | A help-centre article and the rewrite that replaced it |
| Re-target | The overlap is real but each post could own a different search | Classic banana bread vs. banana bread made with oil |
| De-optimise | The weaker page should exist but borrows the stronger page’s wording | A plumber’s job write-up titled like the service page |
| Canonical | Both URLs must stay live and are near-duplicates, so a canonical tag names the main one | A printable version of a fountain-pen buying guide |
| Noindex | The page is useful to visitors but should never appear in search, so it gets a noindex rule | A thin tag archive that outranks the post it lists |
A seventh option is always on the table: leave it. If the two pages appear together on page one and earn more clicks between them than either did alone, nothing is broken.
Choosing the winning URL
The winner is the URL that will survive. It is not always the better-written post: you can move words from one post to another in an afternoon, but you cannot move a URL’s history without a redirect. Score both URLs on these, in roughly this order; most of the numbers come from Google Search Console.
| Signal | /what-are-sinking-funds/ | /sinking-funds-2024/ | Where to find it |
|---|---|---|---|
| Links from other sites | 14 linking sites | 3 linking sites | Search Console → Links → External links → Top linked pages |
| Clicks, all queries | 1,840 | 960 | Performance → Pages tab |
| Internal links in content | 11 | 6 | A crawler, or Links → Internal links |
| URL | Evergreen | Has a year in it | Read it |
| Content | Older, thinner | Newer, has a printable list | Read both |
Here the older URL wins on everything except content, and content is the easiest thing to move. So /what-are-sinking-funds/ survives and inherits the printable list. A URL with a year in it should almost never win, because next year you will be back here.
Two numbers are worth noting before you change anything, because you will need them later: the clicks, impressions and average position of both URLs for the query over the last three months. Export the Pages tab with the query filter applied and keep the file.
How to merge two posts well
A good merge is an edit, not a paste. The aim is one post that a reader of either original would find better than the one they used to land on.
- Keep a copy of the losing post. Open it in the editor, select all, and paste it into a new draft called “ARCHIVE: Sinking funds 2024”. WordPress keeps revisions too, but a draft is easier to read side by side.
- List what only the loser has. Go through it heading by heading and mark each section “covered by the winner”, “better than the winner’s version” or “not in the winner”. In the example: the printable list of 25 sinking-fund categories is new; the definition is weaker than the winner’s; a section on high-yield savings accounts belongs in a different post entirely.
- Bring across the unique and better parts, rewritten to fit. Match the winner’s voice and heading levels. Re-use the images from the media library rather than uploading copies, and check their alt text still makes sense in the new spot.
- Drop what is duplicated or off-topic. If a section answers a different question, it is a candidate for its own post or for a post you already have; it does not need to survive the merge.
- Make the title and H1 match the shared intent. Keep the winner’s slug. If the winner’s title was narrower than the merged post now is, widen it.
- Update the date honestly. If the post has changed substantially, update the “last updated” date and, if your theme shows it, a line on what changed. Google’s helpful content guidance specifically asks whether sites change dates to look fresh when the content has not substantially changed, and its guidance on byline dates says dates should describe when the page itself was published or updated.
- Publish the winner, then deal with the loser. Set the losing post to Draft (or move it to the bin) and add the redirect straight away, as in the next section. Without the redirect, its URL starts returning a 404 and every link to it becomes a broken link.
If you bin the losing post and later create a new post with the same title, WordPress may give the new one a “-2” slug, or the old one may still hold its slug in the bin. Empty it from the bin only once the redirect is working, and never re-use the old slug for something unrelated.
Setting the 301 redirect in WordPress
A 301 redirect tells browsers and search engines the old URL has moved for good. Google’s documentation on redirects and Google Search says it uses a permanent redirect as a signal that the target should be canonical, and that a temporary one does not send that signal. It recommends server-side permanent redirects where possible. In 2016 Google’s Gary Illyes also said that 30x redirects no longer lose PageRank, which settled a long-running worry about redirects “leaking” value.
Use one of these, not several. Two redirect systems on one site make it hard to know which rule fired.
Option 1: the Redirection plugin (free)
Redirection is free, has over two million active installs according to its WordPress.org listing, and can also watch for changed permalinks and add redirects for you.
- Install and activate it, then go to Tools → Redirection and finish the short setup.
- On the Redirects screen, use the Add new redirection form. In Source URL, enter the old path:
/sinking-funds-2024/. - In Target URL, enter the winner’s full address.
- Click the cog icon to open the advanced options and check that When matched redirects with HTTP code 301. Then add the redirect.
Field names are from Redirection’s own documentation on creating redirects.
Option 2: Rank Math (free)
- Go to Rank Math SEO → Dashboard → Modules and switch on Redirections. Rank Math’s documentation notes the module needs its Advanced mode.
- Go to Rank Math SEO → Redirections and click Add New.
- Enter the old path under Source URLs, the winner under Destination URL, choose 301 as the Redirection Type, and save.
Those steps follow Rank Math’s guide to setting up redirections.
Option 3: Yoast SEO Premium
The redirect manager is not in free Yoast SEO; Yoast lists it under Premium, Yoast SEO AI+ and Yoast WooCommerce SEO on its redirect manager page. In Premium, when you delete a post it asks what to do with the old URL, which is a useful safety net.
- Go to Yoast SEO → Redirects.
- Choose 301 Moved Permanently as the Redirect Type, enter the old path under Old URL and the winner under New URL.
- Click Add redirect.
The labels are from Yoast’s help article on redirecting a post or page in Yoast SEO Premium. If you are weighing up Yoast Premium partly for this, our comparison of Silotree and Yoast covers what each does for internal links, which is a separate job from redirects.
Test it
Open the old URL in a private window: you should land on the winner. To see the status code itself, run this from a terminal.
curl -sI https://example.com/sinking-funds-2024/ | grep -iE '^(HTTP|location)'
# Expected:
# HTTP/2 301
# location: https://example.com/what-are-sinking-funds/Redirects on the server: Apache and Nginx
Redirects in the web server run before WordPress loads, so they are slightly faster and keep working even if a plugin is switched off. The trade-off is that they live in a file rather than a screen, so they are easier to forget. Google’s redirects page includes Apache and Nginx examples; the versions below are adapted for a single WordPress post. Take a copy of the file before you edit it.
# In .htaccess, ABOVE the "# BEGIN WordPress" block.
# One line per old URL. The optional slash catches both /old and /old/.
RewriteEngine On
RewriteRule ^sinking-funds-2024/?$ https://example.com/what-are-sinking-funds/ [R=301,L]# In the server { } block for your site, before the WordPress
# "location / { try_files ... }" block. Reload Nginx afterwards.
location ~ ^/sinking-funds-2024/?$ {
return 301 https://example.com/what-are-sinking-funds/;
}Many managed WordPress hosts also have a redirects screen in their own dashboard, which writes the same kind of rule for you. Whichever you use, keep a list of every redirect you add, with the date and the reason, in the same spreadsheet you use to track the fix.
Re-target, canonical, noindex or leave it
Re-target one post to a different search
A recipe blog has “Easy banana bread” and “Banana bread with oil”. Both show for banana bread recipe and they take turns. But people do search for the oil version specifically, and for dairy-free banana bread. So instead of merging, re-target:
- Retitle it “Dairy-free banana bread (made with oil)” and change the H1 to match.
- Rewrite the first paragraph so it answers the new search in the first two sentences.
- Edit the slug only if the old one is actively misleading, and if you do, add a 301 from the old slug.
- Link from the classic recipe to the oil version where a reader might want it (“no butter in the house?”), and back.
De-optimise the page that should not be ranking
A local plumber’s blog post “Boiler repair in Leeds: a job we did in Headingley” keeps outranking the “Boiler repair in Leeds” service page. The post should exist; it just should not compete. Change its title to something like “How we fixed a leaking combi boiler in Headingley”, take the service phrase out of its H1 and opening line, and add a sentence that links to the service page. Then make sure other posts link to the service page, not the case study, when they mention boiler repairs.
Canonical: when both URLs have to stay live
A canonical tag says “this page is a copy; the main version is over there”. It suits near-duplicates that must stay available, like a hobby site’s printable version of its fountain-pen buying guide. Google describes rel="canonical" in its canonicalisation guidance as a strong signal, listed after redirects, rather than a rule it must follow. It is not meant for two different articles on the same topic.
- Yoast SEO: edit the copy, open the Yoast SEO panel, go to Advanced, and paste the main page’s full URL into Canonical URL (per Yoast’s canonical URL help page).
- Rank Math: edit the copy, open the Rank Math panel’s Advanced tab, and fill in Canonical URL (per its Advanced tab documentation).
A few weeks later, check the copy in Search Console’s URL Inspection tool. It shows both the “User-declared canonical” and the “Google-selected canonical”. If they differ, Google has overruled you, usually because the pages are less alike than you thought.
Noindex: useful to visitors, never in search
Noindex keeps a page live for visitors but out of results. It suits thin tag archives and similar pages. Google’s page on blocking indexing with noindex notes two catches: the page must not be blocked in robots.txt, or Google never sees the tag; and it can take months for Google to revisit a page. Google also says it does not recommend noindex as a way to choose between two pages on one site; use a canonical or a redirect for that.
- Rank Math: in the post’s Advanced tab, tick No Index under Robots Meta, or set a whole taxonomy at Rank Math SEO → Titles & Meta, as its guide to noindexing URLs describes.
- Yoast SEO: in the post’s Yoast panel under Advanced, set the option that allows search engines to show the content in search results to No; for all tags at once, use Yoast SEO → Settings → Categories & tags.
Point internal links straight at the winner
The redirect keeps old links working. It does not make them good links. Every internal link to /sinking-funds-2024/ now sends readers and crawlers through an extra hop, and if the winner ever moves, those links become a redirect chain. Google says in its crawling documentation that Googlebot generally follows up to 10 redirect hops, so a short chain still works; its site-move guide still asks you to update as many links as possible to the new URLs, for users and to reduce server load. Your own links are the ones you can always update.
Three ways to find and fix them, from simplest to fastest:
- Search your posts. In Posts → All Posts, search for the old slug,
sinking-funds-2024. The admin search looks in post content as well as titles. Open each result and change the link. Do the same under Pages, and check your menus and widgets, which are not post content. - Crawl the site. The free internal link checker reports every internal link that goes through a redirect, with the page it is on.
- Replace them in bulk with WP-CLI. If you have command-line access, one command rewrites every link in post content. Always run the dry run first, and back up the database: this edits the database directly, so there is no WordPress revision to roll back to. It also does not reach content stored by page builders outside
post_content.
# 1. Preview: lists how many replacements would be made. Writes nothing.
wp search-replace 'example.com/sinking-funds-2024/' \
'example.com/what-are-sinking-funds/' wp_posts \
--include-columns=post_content --dry-run
# 2. Back up the database, then run it for real.
wp db export before-relink.sql
wp search-replace 'example.com/sinking-funds-2024/' \
'example.com/what-are-sinking-funds/' wp_posts \
--include-columns=post_contentWhile you are in each post, look at the link text too. If the old post was linked as “sinking funds for 2024”, the words may need updating as well as the address. The guide to choosing anchor text for internal links covers what makes good link wording. And the pairs that were never merged (the re-targeted and de-optimised ones) need the same care: each phrase should point at the page that owns it.
What to do about backlinks
Links from other sites to the old URL keep working through the redirect, and since the 2016 statement above there is no reason to think they lose value on the way. Three things are still worth doing.
- Keep the redirect for good. Google’s site-move guidance says to keep redirects for as long as possible, generally at least a year, and to consider keeping them indefinitely for users. For one post, there is no reason ever to remove it.
- Ask your best linkers to update. In Search Console, open Links → External links → Top linked pages, find the old URL, and see which sites link to it. Google describes the Links report as a sample, so it will not be complete. If one or two are sites you know, a short email asking them to update the link is reasonable. It is optional; do not spend days on it.
- Never redirect to something unrelated. If the old post had strong links but there is no close match, redirecting to your home page helps nobody — Google tends to treat that as a soft 404. Re-target or keep the post instead.
Measuring the result, and how long to wait
Note the date of the change, then leave it alone. Measuring after a week tells you almost nothing, because Google has to recrawl the old URL, the winner and the pages that link to them. Google’s page on asking it to recrawl says crawling can take anywhere from a few days to a few weeks. You can request indexing of the winner with URL Inspection, but it does not guarantee anything faster.
How long to wait
Nobody has published good data on how long a merge takes to settle, so treat any precise timeline you read (including this one) as a rule of thumb. The closest thing Google documents is site moves, which it says can take a few weeks or more for medium-sized sites, with temporary ranking fluctuation along the way. One post is a much smaller change, but the same mechanics apply. A reasonable plan: look once at four weeks to catch anything broken, and judge the result at eight to twelve.
How to compare in Search Console
- In Performance → Search results, add a Query filter for the search (or a regex that covers its variations).
- Open the date filter, choose Compare, and set two equal periods: the 28 days before the change, and 28 days starting two weeks after it, so the crawl has had time to happen.
- Open the Pages tab. The old URL’s impressions should fall towards zero and the winner’s should rise. What matters is the total clicks for the query across both, and the winner’s position.
- Remove the query filter and add a Page filter for the winner. Check it has not lost the other searches it used to get.
- For a seasonal topic (holiday budgets, summer travel, Christmas recipes), compare with the same weeks last year instead, or you will be measuring the season.
| Item | 28 days before | 28 days, from 2 weeks after | Change |
|---|---|---|---|
| Clicks, both URLs | 118 | 163 | +38% |
| Impressions, both URLs | 3,790 | 4,120 | +9% |
| Winner’s average position | 14.3 | 9.6 | 4.7 places higher |
| Old URL’s impressions | 1,690 | 40 | fading out |
If the result is flat or worse after twelve weeks, look at the winner before you look at the redirect. A merge removes the competition; it does not make a post the best answer to the search. Undoing a redirect after Google has processed it causes a second round of churn, so it is rarely worth reversing.
The whole job, as a checklist
- Confirm the pair is a real problem
Same query, same intent, and numbers that show them taking turns or both sitting low.
- Pick the winner by URL history, not prose
Links from other sites, clicks, internal links, an evergreen URL.
- Export the baseline
Clicks, impressions and position for both URLs on the query, last three months.
- Merge as an edit
Unique and better sections only, rewritten to fit; honest updated date.
- 301 the loser and test it
One redirect system; check the status code with curl or a private window.
- Repoint internal links and their wording
Straight to the winner, no hops.
- Measure at four weeks, judge at eight to twelve
Equal periods, query filter, Pages tab; year-on-year for seasonal topics.
This is one step of a larger tidy-up: the internal link audit checklist puts it in order with broken links, orphans and redirects, and the guide to internal linking strategy explains why a site’s links should agree about which page owns each topic. For a first list of candidate pairs, try the free keyword cannibalization checker.
Where Silotree fits
Silotree handles the link side of this job. It detects competing posts from your Google Search Console queries, suggests which post should win, and repoints your internal links to the winner in one click. After a merge, links that go through the new redirect can be fixed in one click too, on every plan, and those fixes add no new links. The merge and the redirect themselves stay with you, in WordPress or on your server, using the steps above.
- Redirects and Google Search — Google Search Central
- “30x redirects don’t lose PageRank anymore” (July 2016) — Gary Illyes, Google
- How HTTP status codes, and network and DNS errors affect Google Search — Google Search Central
- Site moves with URL changes — Google Search Central
- How to specify a canonical URL with rel="canonical" and other methods — Google Search Central
- Block search indexing with noindex — Google Search Central
- Creating helpful, reliable, people-first content — Google Search Central
- Influencing your byline dates in Google Search — Google Search Central
- Ask Google to recrawl your URLs — Google Search Central
- URL Inspection tool — Search Console Help
- Links report — Search Console Help
- Redirection plugin — WordPress.org
- Create & manage redirects — Redirection
- Setting up redirections — Rank Math
- Advanced tab in the Rank Math meta box — Rank Math
- How to noindex URLs with Rank Math — Rank Math
- Redirect manager — Yoast
- How to redirect a post or page in Yoast SEO Premium — Yoast
- How to change the canonical URL in Yoast SEO — Yoast
Questions people ask
Should I use a 301 or a 302 when merging posts?
A 301 (or 308). Google treats a permanent redirect as a signal that the target should be the canonical URL, while a temporary one does not send that signal. Only use a 302 if you genuinely expect to bring the old post back.
How long should I keep the redirect in place?
As long as you can. Google’s site-move guidance says at least a year, and suggests considering keeping redirects indefinitely for people who still follow old links. A redirect costs almost nothing to keep, while removing it turns every old link into a 404.
Will I lose rankings when I merge two posts?
Possibly for a while. Rankings can wobble while Google recrawls both URLs and processes the redirect, and the merged page can lose some long-tail searches the old post was getting. There is no published data on how often merges pay off, so nobody can promise a gain; that is why you should measure against a baseline.
Can I just add a canonical tag instead of redirecting?
Only if both pages must stay available to readers and are near-duplicates. A canonical is a signal Google can override, and it is meant for duplicate content. For two different articles on the same topic, merging and redirecting is clearer for readers and for search engines.
Do I need to update internal links if the redirect already works?
Yes. Every link through a redirect adds a hop for readers and crawlers, and a later move can turn it into a chain. Updating the links to point straight at the winner is quick, and it is the clearest signal you send about which page you mean.
Should I change the published date on the merged post?
Change the last-updated date if you have substantially changed the content, and say what changed if your theme shows it. Do not refresh the date on an unchanged post; Google’s helpful-content guidance specifically asks whether sites do that to look fresh.
