Skip to content

Exclude rel=nofollow links from prefetch/prerender - #1142

Merged
swissspidy merged 3 commits into
trunkfrom
fix/woocommerce-add-to-cart-preloading
Apr 16, 2024
Merged

Exclude rel=nofollow links from prefetch/prerender#1142
swissspidy merged 3 commits into
trunkfrom
fix/woocommerce-add-to-cart-preloading

Conversation

@westonruter

@westonruter westonruter commented Apr 15, 2024

Copy link
Copy Markdown
Member

Summary

WooCommerce has rel=nofollow on its Add to Cart buttons (which are often links instead of button elements). These links are not idempotent and they must be excluded from prefech/prerender.

Fixes #1140

Before After
image image

Relevant technical choices

Alternatively this could have excluded URLs that include the add-to-cart query parameter. However, this would seem to be overly-specific to WooCommerce. The issue WICG/nav-speculation#309 was opened by @tunetheweb to consider whether rel=nofollow links should be excluded by default as well, so that is what this PR is going with now as well.

Eventually there may need to be a filter in addition to plsr_speculation_rules_href_exclude_paths which applies on the entire speculation rules array so that a plugin can add exclusions which are not URL-specific.

Before

{
  "prerender": [
    {
      "source": "document",
      "where": {
        "and": [
          {
            "href_matches": "/*"
          },
          {
            "not": {
              "href_matches": [
                "/wp-login.php",
                "/wp-admin/*"
              ]
            }
          },
          {
            "not": {
              "selector_matches": ".no-prerender"
            }
          }
        ]
      },
      "eagerness": "moderate"
    }
  ]
}

After

{
  "prerender": [
    {
      "source": "document",
      "where": {
        "and": [
          {
            "href_matches": "/*"
          },
          {
            "not": {
              "href_matches": [
                "/wp-login.php",
                "/wp-admin/*"
              ]
            }
          },
          {
            "not": {
              "selector_matches": "a[rel=nofollow]"
            }
          },
          {
            "not": {
              "selector_matches": ".no-prerender"
            }
          }
        ]
      },
      "eagerness": "moderate"
    }
  ]
}
@westonruter westonruter added [Type] Bug An existing feature is broken [Plugin] Speculative Loading Issues for the Speculative Loading plugin (formerly Speculation Rules) labels Apr 15, 2024
@westonruter westonruter added this to the speculation-rules n.e.x.t milestone Apr 15, 2024
@westonruter
westonruter requested a review from felixarntz as a code owner April 15, 2024 21:22
@github-actions

github-actions Bot commented Apr 15, 2024

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: westonruter <westonruter@git.wordpress.org>
Co-authored-by: adamsilverstein <adamsilverstein@git.wordpress.org>
Co-authored-by: tunetheweb <tunetheweb@git.wordpress.org>
Co-authored-by: swissspidy <swissspidy@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Comment thread plugins/speculation-rules/helper.php Outdated

@adamsilverstein adamsilverstein left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, one small doc typo/suggestion. Also, the tests are complaining about your changes.

@westonruter
westonruter force-pushed the fix/woocommerce-add-to-cart-preloading branch from 7936258 to 7ce9672 Compare April 15, 2024 21:39
Co-authored-by: Adam Silverstein <adamjs@google.com>

@tunetheweb tunetheweb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with one suggestion.

Comment thread plugins/speculation-rules/helper.php Outdated
Co-authored-by: Barry Pollard <barrypollard@google.com>
@swissspidy
swissspidy merged commit 41f9b49 into trunk Apr 16, 2024
@swissspidy
swissspidy deleted the fix/woocommerce-add-to-cart-preloading branch April 16, 2024 06:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Plugin] Speculative Loading Issues for the Speculative Loading plugin (formerly Speculation Rules) [Type] Bug An existing feature is broken

4 participants