【问题标题】:How to make SPA Ajax Applications without #! crawlable?如何在没有#的情况下制作 SPA Ajax 应用程序!可抓取?
【发布时间】:2023-03-15 17:39:01
【问题描述】:

如果您有一个单页应用程序 (SPA),其中包含大部分通过 Ajax 加载的 JavaScript 内容,谷歌建议 guide 说明如何使此类应用程序可抓取。

你必须使用 #!在您的页面片段中,以使这些片段对搜索引擎可见。

www.example.com/ajax.html#!mainpage

现在,如果您使用 HTML5 PushState History API,您可以将 url 更改为

www.example.com/ajax.html/mainpage

这个 url 看起来一定比第一个更好。搜索引擎可以轻松访问该页面,因为 url 中没有 hash bang #。问题是它仍然是一个 JavaScript 页面,必须解释搜索引擎不做的事情。

  1. 搜索引擎如何访问这个 ajax 页面?
  2. 我的服务器如何知道搜索引擎或用户浏览器是否尝试访问该页面?

我有以下想法,但不知道如何实施或是否有任何解决方案。

  • 您可以为搜索引擎可以访问的每个 ajax 页面制作 html 快照
  • 你可以使用某种uiless浏览器被搜索引擎访问,uiless浏览器解释页面然后将html内容返回给搜索引擎

【问题讨论】:

    标签: java javascript html gwt web-crawler


    【解决方案1】:

    我认为你的两个想法都在轨道上。

    无论哪种方式,您都需要在服务器上捕获搜索引擎“?_escaped_fragment_=”作为“#!”的代理。为此,您可以查看this SO 并查找GWT official reference

    出于性能原因(无头浏览器很慢,它可能会在 javascript 完成后运行),您还可以缓存生成的静态 html 页面(那些不依赖于您的示例中的动态参数的页面)并提供这些页面但是在升级代码时需要注意保持它们同步以避免被视为Doorway Page

    【讨论】:

    • 所以即使你没有 hashbanged URLs 你是说搜索引擎仍然会使用 ?_escaped_fragment_ 并且只是空的?这样我们就可以检查它是否存在。如果爬虫仅在检测到 hashbang 时才使用该参数,那么我们怎么知道它是爬虫?
    • @snowman4415 为了使没有散列碎片的页面可抓取,请将以下元标记添加到您的页面:。那么是的,Google 将发送到您的服务器的 escaped_fragment 将为空;您的服务器逻辑需要将这种情况作为我在回答中提到的代码示例来捕获。如果我理解您的第二个问题,那么我会说 Google 爬虫使用 escaped_fragment,但其他人也可以这样做;我不知道谁做 vs. 不。
    猜你喜欢
    • 2013-08-11
    • 2014-05-30
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2015-12-09
    • 2020-11-01
    相关资源
    最近更新 更多