Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exclude rel=nofollow links from prefetch/prerender #1142

Merged
merged 3 commits into from
Apr 16, 2024

Conversation

westonruter
Copy link
Member

@westonruter westonruter commented Apr 15, 2024

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
Copy link

github-actions bot commented Apr 15, 2024

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.

Copy link
Member

@adamsilverstein adamsilverstein left a comment

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>
Copy link
Contributor

@tunetheweb tunetheweb left a comment

Choose a reason for hiding this comment

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

LGTM with one suggestion.

plugins/speculation-rules/helper.php Outdated Show resolved Hide resolved
Co-authored-by: Barry Pollard <barrypollard@google.com>
@swissspidy swissspidy merged commit 41f9b49 into trunk Apr 16, 2024
23 checks passed
@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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Products added to cart in WooCommerce without clicking on Add to Cart button when Speculative Loading active
4 participants