Skip to content

Instantly share code, notes, and snippets.

@amboutwe
Last active July 12, 2024 15:17
Show Gist options
  • Save amboutwe/2aa7dcc9a38986e11fac68c7306cc091 to your computer and use it in GitHub Desktop.
Save amboutwe/2aa7dcc9a38986e11fac68c7306cc091 to your computer and use it in GitHub Desktop.
Code snippets for the Yoast SEO canonical output
<?php
/********* DO NOT COPY THE PARTS ABOVE THIS LINE *********/
/* Change the canonical link for the shop page
* Credit: Scott Weiss of somethumb.com
* Yoast Doc: https://developer.yoast.com/features/seo-tags/canonical-urls/api/
* Last Tested: Jan 25 2017 using Yoast SEO 6.0 on WordPress 4.9.1
*/
add_filter( 'wpseo_canonical', 'yoast_seo_canonical_change_woocom_shop', 10, 1 );
function yoast_seo_canonical_change_woocom_shop( $canonical ) {
if ( !is_shop() ) {
return $canonical;
}
return get_permalink( woocommerce_get_page_id( 'shop' ) );
}
<?php
/********* DO NOT COPY THE PARTS ABOVE THIS LINE *********/
/* Remove Yoast SEO Canonical From All Pages
* Credit: Yoast Team
* Yoast Doc: https://developer.yoast.com/features/seo-tags/canonical-urls/api/
* Last Tested: Jun 16 2017 using Yoast SEO 4.9 on WordPress 4.8
*/
add_filter( 'wpseo_canonical', '__return_false' );
<?php
/********* DO NOT COPY THE PARTS ABOVE THIS LINE *********/
/* Remove Yoast SEO Canonical From Individual or Multiple Items
* Credit: Yoast Team
* Yoast Doc: https://developer.yoast.com/features/seo-tags/canonical-urls/api/
* Last Tested: Jun 16 2017 using Yoast SEO 4.9 on WordPress 4.8
*********
* DIFFERENT POST TYPES
* Post: Change 123456 to the post ID
* Page: Change is_single to is_page and 123456 to the page ID
* Custom Post Type: Change is_single to is_singular and 123456 to the 'post_type_slug'
Example: is_singular( 'cpt_slug' )
*********
* MULTIPLE ITEMS
* Multiple of the same type can use an array.
Example: is_single( array( 123456, 1234567, 12345678 ) )
* Multiple of different types can repeat the if statement
*/
add_filter( 'wpseo_canonical', 'yoast_remove_canonical_items' );
function yoast_remove_canonical_items( $canonical ) {
if ( is_single ( 123456 ) ) {
return false;
}
/* Use a second if statement here when needed */
return $canonical; /* Do not remove this line */
}
<?php
/********* DO NOT COPY THE PARTS ABOVE THIS LINE *********/
/* Remove Yoast SEO Canonical From Search Pages Only
* Credit: Yoast Team
* Yoast Doc: https://developer.yoast.com/features/seo-tags/canonical-urls/api/
* Last Tested: Jun 16 2017 using Yoast SEO 4.9 on WordPress 4.8
*/
add_filter( 'wpseo_canonical', 'yoast_remove_canonical_search' );
function yoast_remove_canonical_search( $canonical ) {
if( is_search() ) {
return false;
} else {
return $canonical;
}
}
<?php
/********* DO NOT COPY THE PARTS ABOVE THIS LINE *********/
/* Add trailing slash to all Yoast SEO canonicals
* Credit: Unknown
* Yoast Doc: https://developer.yoast.com/features/seo-tags/canonical-urls/api/
* Last Tested: Oct 25 2019 using Yoast SEO 12.3 on WordPress 5.2.4
*/
add_filter( 'wpseo_canonical', 'yoast_seo_canonical_slash_add' );
function yoast_seo_canonical_slash_add( $canonical_url ) {
return trailingslashit( $canonical_url );
}
<?php
/********* DO NOT COPY THE PARTS ABOVE THIS LINE *********/
/* Remove trailing slash from all Yoast SEO canonicals
* Credit: Unknown
* Yoast Doc: https://developer.yoast.com/features/seo-tags/canonical-urls/api/
* Last Tested: Oct 25 2019 using Yoast SEO 12.3 on WordPress 5.2.4
*/
add_filter( 'wpseo_canonical', 'yoast_seo_canonical_slash_remove' );
function yoast_seo_canonical_slash_remove( $canonical_url ) {
return untrailingslashit( $canonical_url );
}
@zawhtutwin
Copy link

If you want to remove canonical tag from the requests with url parameters. You can use this.

function custom_remove_canonical_with_get_params( $canonical ) {
    // Check if there are any GET parameters in the URL
    if ( ! empty( $_GET ) ) {
        // If there are GET parameters, return the current URL without any canonical tag
        return false;
    }

    // If there are no GET parameters, return the original canonical URL
    return $canonical;
}
add_filter( 'wpseo_canonical', 'custom_remove_canonical_with_get_params' );

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment