Canonical URLs are those URLs that are alternatives to the original page.
By default, WordPress redirects URLs to the canonical page.
You are going to see:
What are the canonical URLs? What are the canonical URLs?
WordPress redirects the incoming links to the proper URL based on the site URL.
Search engines consider the link www.somedomain.com
and somedomain.com
to be two different URLs when they both go to the same location.
This SEO enhancement prevents penalties for duplicate content by redirecting all incoming links to one or the other.
Prevents redirection for feeds, trackbacks, searches, and admin URLs. Does not redirect on non-pretty-permalink-supporting IIS 7+, page/post previews, WP admin, Trackbacks, robots.txt, searches, or on POST requests.
We will also attempt to find the correct link when a user enters a URL that does not exist based on the exact WordPress query. Will instead try to parse the URL or query in an attempt to figure out the correct page to go to.
Advertisement
What is the issue with canonical URLs? What is the issue with canonical URLs?
I don’t think this is an issue. But, in most cases, we don’t want such redirection.
Let’s check it with a simple example, Suppose, We have a fresh WordPress setup.
If I visit the page
Here, My domain name is http://localhost/dev.new/ and I have just added the /s
.
WordPress redirects the above URL to
https://maheshwaghmare.com/plugins/sample-data/
This is because WordPress handles this in action template_redirect
and the function redirect_canonical
which is @since 2.3.0.
Advertisement
Solutions to avoid canonical redirections Solutions to avoid canonical redirections
I have found two ways to fix this issue (maybe 🙂 )`.
Solution 1: Avoid redirection with template_redirect
action Solution 1: Avoid redirection with template_redirect
action
If you don’t want such automatic redirection then you can remove the redirect_canonical
action.
E.g.
remove_action( 'template_redirect', 'redirect_canonical' );
Note: The above code affects all your currently existing post types. If you want to disable it for a specific situation then you can go with Solution 2.
Advertisement
Solution 2: Avoid redirection with redirect_canonical filter Solution 2: Avoid redirection with redirect_canonical filter
Since WordPress 2.3.0 version we have a filter redirect_canonical
.
Completely disable its redirection with the filter.
add_filter( 'redirect_canonical', '__return_false' );
Or
To check the specific request or redirect and enable or disable it. The filter redirect_canonical
accepts 2 parameters.
$redirect_url
– It is a redirect URL.$requested_url
– It is a requested URL.
We can use:
add_filter( 'redirect_canonical', 'prefix_debug_redirection', 10, 2 ); function prefix_debug_redirection( $redirect_url = '', $requested_url = '' ) { /* // Do something if REDIRECT url match. if( '/mylink/' === $redirect_url ) { return ''; } // Do something if REQUEST url match. if( '/mylink/' === $requested_url ) { return ''; } */ return $redirect_url; }