Question

Does anyone know how to modify the Wordpress canonical links to add a custom URL parameter?

I have a Wordpress site with a page that queries a separate (non-Wordpress) database. I passed the URL parameter "pubID" to display individual books and it is working OK.

Example: http://www.uglyducklingpresse.org/catalog/browse/item/?pubID=63

But the individual book pages are not showing up properly in Google - the ?pubID parameter is stripped out.

I think maybe this is because all the item pages have the same auto-generated "canonical" URL link tag in the source - one with the "pubID" parameter stripped out.

Example: link rel='canonical' href='http://www.uglyducklingpresse.org/catalog/browse/item/'

Is there a way to perhaps edit .htaccess to add a custom URL parameter to Wordpress, so that the parameter is not stripped out by permalinks and the "canonical" links?

Or maybe there's another solution ... Thank you for any ideas!

Was it helpful?

Solution

You should be able to replace Wordpress's rel_canonical action function with your own function in which (when your conditions are meet) you create a canonical link appending the query string variable. The following should work, although you'll probably need to change the conditions to meet your needs.

remove_action('wp_head', 'rel_canonical');
add_action('wp_head', 'my_rel_canonical');

function my_rel_canonical() {
    if (is_page('item') && isset($_GET['pubID'])) {
        global $post;
        $link = get_permalink($post->ID) . '?pubID=' . absint($_GET['pubID']);
        echo "<link rel='canonical' href='$link' />\n";
    } else {
        rel_canonical();
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top