PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | modules/canonical-urls.php +92 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,92 @@
1 +<?php
2 +/**
3 + * Module Name: Canonical URLs
4 + * Module Description: Add canonical URL tags to archive pages to prevent duplicate content in search engines.
5 + * Sort Order: 36
6 + * First Introduced: 15.6
7 + * Requires Connection: No
8 + * Requires User Connection: No
9 + * Auto Activate: No
10 + * Module Tags: Traffic
11 + * Feature: Traffic
12 + * Additional Search Queries: canonical, seo, duplicate content, woocommerce, archive
13 + *
14 + * @package automattic/jetpack
15 + */
16 +
17 +if ( ! defined( 'ABSPATH' ) ) {
18 + exit( 0 );
19 +}
20 +
21 +// Disable canonical URL output when a conflicting SEO plugin is active.
22 +add_filter( 'jetpack_disable_canonical_urls', 'jetpack_canonical_urls_check_conflicts' );
23 +
24 +/**
25 + * Can be used to prevent the Canonical URLs module from outputting canonical tags.
26 + *
27 + * @module canonical-urls
28 + *
29 + * @since 15.6
30 + *
31 + * @param bool $disabled Whether canonical URL output is disabled. Defaults to false.
32 + */
33 +if ( ! apply_filters( 'jetpack_disable_canonical_urls', false ) ) {
34 + require_once __DIR__ . '/canonical-urls/class-jetpack-canonical-urls-resolver.php';
35 + add_action( 'wp_head', 'jetpack_canonical_urls_output_tag' );
36 +}
37 +
38 +/**
39 + * Check if a conflicting SEO plugin is active and disable canonical URL output.
40 + *
41 + * @since 15.6
42 + *
43 + * @param bool $disabled Whether canonical URL output is already disabled.
44 + * @return bool Whether canonical URL output should be disabled.
45 + */
46 +function jetpack_canonical_urls_check_conflicts( $disabled ) {
47 + if ( $disabled ) {
48 + return $disabled;
49 + }
50 +
51 + $conflicting_plugins = array(
52 + 'wordpress-seo/wp-seo.php',
53 + 'wordpress-seo-premium/wp-seo-premium.php',
54 + 'all-in-one-seo-pack/all_in_one_seo_pack.php',
55 + 'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
56 + 'seo-by-rank-math/rank-math.php',
57 + 'autodescription/autodescription.php',
58 + 'slim-seo/slim-seo.php',
59 + 'wp-seopress/seopress.php',
60 + 'wp-seopress-pro/seopress-pro.php',
61 + 'seo-key/seo-key.php',
62 + 'seo-key-pro/seo-key.php',
63 + );
64 +
65 + foreach ( $conflicting_plugins as $plugin ) {
66 + if ( Jetpack::is_plugin_active( $plugin ) ) {
67 + return true;
68 + }
69 + }
70 +
71 + return $disabled;
72 +}
73 +
74 +/**
75 + * Output the canonical link tag for non-singular pages.
76 + *
77 + * WordPress core handles singular posts/pages via rel_canonical(),
78 + * so this function only outputs canonical tags for archive pages.
79 + *
80 + * @since 15.6
81 + */
82 +function jetpack_canonical_urls_output_tag() {
83 + if ( is_singular() ) {
84 + return;
85 + }
86 +
87 + $url = Jetpack_Canonical_Urls_Resolver::get_canonical_url();
88 +
89 + if ( ! empty( $url ) ) {
90 + echo '<link rel="canonical" href="' . esc_url( $url ) . '" />' . "\n";
91 + }
92 +}