【问题标题】:Implementing paywall: to avoid cloaking issues with paywall notice, should I specify it in the HTML or in the JSON-LD?实施付费墙:为避免隐藏付费墙通知的问题,我应该在 HTML 中还是在 JSON-LD 中指定它?
【发布时间】:2021-11-10 11:05:12
【问题描述】:

问题

Google 的文档中似乎无法识别“付费墙通知”。我试图让它对所有人可见,但从页面主题和内容中排除,而不会导致隐藏问题。 我可以在 DOM 中执行此操作(例如使用 role 属性),还是需要在 JSON-LD 标记中执行此操作?

背景

我正在使用客户端 JS 实现网站付费墙,并结合了开放图形标记和 CSS 选择器。

该实现基于 Google 在https://developers.google.com/search/docs/advanced/structured-data/paywalled-content 的编程建议

此站点上有 3 种类型的内容,在此实现中,所有 3 种内容都由服务器为每个访问者呈现,无论付费墙状态如何:

  1. 免费内容,所有人都可以看到;
  2. 付费墙通知,不是页面内容/主题的一部分,仅在未登录时可见;和
  3. 付费内容,仅对登录用户和搜索爬虫可见。

类型 2 是造成问题的原因,Google 没有记录这一点。

HTML

<html>
  <head>
  </head>
  <body>
    <div id="div-1" class="non-paywall">
      All visitors can see this sentence, whether or not subscribed.
    </div>
    <div id="div-2" class="paywall-notice" role="dialog">
      <!-- This element is the issue in question -->
      If you are setting this notice, you are logged out our not subscribed. You cannot see the main content of this page. Please subscribe!
    </div>
    <div id="div-3" class="paywall">
      This section is paid content. 
      If you can see it, you are a logged in subscriber or a verified crawler (e.g. googlebot or bingbot).
    </div>
</body>
</html>

JSON-LD

{
    "@context": "https://schema.org",
    "@type": "WebPage",
    "@id": "https:\/\/foo\/page\/#webpage",
    "mainEntityOfPage": {
        "@type": "Article",
        "mainEntityOfPage": "https:\/\/bar\/article"
    },
    "isAccessibleForFree": "False",
    "hasPart": [
        {
            "@type": "WebPageElement",
            "isAccessibleForFree": "True",
            "cssSelector": ".non-paywall"
        },
        {
            "@type": "WebPageElement",
            "isAccessibleForFree": "True",
            "cssSelector": ".paywall-notice"
        },
        {
            "@type": "WebPageElement",
            "isAccessibleForFree": "False",
            "cssSelector": ".paywall"
        }
    ]
}

如果付费专区通知 (#2) 被视为与 #1 相同,则爬虫似乎有可能认为它们是页面内容的一部分并包含在与搜索意图的相关性评估中。

我找不到任何官方承认 #2 的存在或如何处理它的指导,同时尊重付费墙标记的目标并避免隐藏问题。

Handling isAccessibleForFree for client side paywalls 有多种方法,https://webmasters.stackexchange.com/questions/117936/isaccessibleforfree-and-paywalled-content-delivered-to-googlebots 有一个相关问题,这些都没有解决我上面的原始问题。

最理想的情况是,我想按照 Google 想要的方式来实现它……只要我知道那是什么!

更多背景

为了能够向 googlebot 提供付费内容,服务器会向所有访问者呈现相同的 HTML。 页面加载后,一些JS会检查访问者是否是googlebot,如果是的话:

  1. 删除.paywall-notice 元素/s
  2. 显示.paywall 元素/s

对于非 googlebot 访问者,也可能会定期或交互驱动检查以删除 .paywall 元素,但如果标记正确显示 googlebot 这些元素是付费墙,则这不会影响此问题。

【问题讨论】:

    标签: javascript html schema.org json-ld google-search-platform


    【解决方案1】:

    您是否可以检测到爬虫服务器端而不渲染paywall-notice 元素?此标记的重点是,您不会向 Googlebot 显示与普通匿名访问者不同的内容。我认为只要您将文章的“付费”内容包装在 paywall 类中,您就不必担心因伪装而受到惩罚。

    在 wsj.com 上,我们有一个服务器端付费墙,因此当 Googlebot 访问该网站时,我们甚至不会像您在 paywall-notice 元素中那样呈现任何营销优惠。我们只是渲染全文并将付费内容包装在paywall 类中。因此,如果可能,请向 Googlebot 发送不包含付费专区通知元素的页面。

    顺便说一句,nyt.com 有一个前端付费专区,他们在标记营销优惠方面没有做任何特别的事情。他们只是将付费内容标记为与您的示例相同。只需确保从 hasPart 数组中删除 paywall-notice,因为它绝对不应该在其中。

    【讨论】:

    • 谢谢,它很可能是通过 JS 操作 DOM 的前端解决方案。无论如何,如果我向常规访问者而不是 googlebot 提供付费墙通知,那这不会是一种隐蔽的惩罚风险吗?这就是导致 OP 的原因。
    • @ed2 不向 Googlebot 显示付费墙通知不会被视为伪装。伪装是向 googlebot 显示网站的普通访问者看不到的东西。看看这里的“伪装和谷歌”部分searchenginejournal.com/google-answers-is-this-cloaking/402823
    • 谢谢。所以只有.paywall.non-paywall 元素将在JSON-LD 标记中表示,.paywall-notice 将从标记中省略而不描述?此外,对于当前的 CMS 和服务器设置,从 googlebot 中省略 .paywall-notice 的唯一实用方法是正常呈现它,然后在页面加载和检测到之后使用 JS 将其从 DOM 中删除。谷歌机器人。不理想,但它就是我们所处的位置。
    • 检查 nyt 示例,看起来 JSON-LD 中只有一个相关的 haspart 项目,相当于 .paywall,因此相当于 non-paywall 和 @987654335 @ 在架构中都没有提到。 .paywall-notice 的等价物作为特定元素 id 存在于 DOM 中,但在 DOM 中甚至没有指定.non-paywall 的等价物;它只是“其他一切”。我是否正确解释了 nyt DOM 和 JSON-LD?如果是这样,这是否意味着我的 JSON-LD 应该只有 .paywall 并从数组中删除 both 其他两项?
    • 正确,您只需为付费墙的元素放置类,以确保您没有隐藏。我们在 wsj.com 上做的事情与 NYT 做的一样。我们在 JSON-LD 中只有一个类:"hasPart":{"@type":"WebPageElement","isAccessibleForFree":false,"cssSelector":".paywall"}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多