2

我有一个 angularjs 应用程序,我想在 Facebook 上共享页面。这是使用元标记(https://developers.facebook.com/docs/sharing/best-practices)处理的,但我不能用 js 更改元标记,因为 js 不是由 Facebook 的爬虫执行的。因此,我想在爬虫从服务器获取页面之前使用 prerender.io 来执行和呈现我的页面。

问题是我不确定我是否正确理解了文档(https://github.com/greengerong/prerender-java)。

这是来自 GitHub 上的 README.md 的示例 web.xml:

<filter>
      <filter-name>prerender</filter-name>
      <filter-class>com.github.greengerong.PreRenderSEOFilter</filter-class>
      <init-param>
          <param-name>prerenderServiceUrl</param-name>
          <param-value>http://localhost:3000</param-value>
      </init-param>
      <init-param>
          <param-name>crawlerUserAgents</param-name>
          <param-value>me</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>prerender</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

经过一系列尝试使事情正确后,我发现如果我只是删除这部分:

      <init-param>
          <param-name>prerenderServiceUrl</param-name>
          <param-value>http://localhost:3000</param-value>
      </init-param>

我不必在 GAE 中处理 websockets(这给了我这个错误:'Caused by: java.net.SocketException: Permission denied: ...'),我可以使用已经部署在http://的默认值prerender.herokuapp.com问题 1) 使用默认服务与部署我自己的服务有何优缺点?

现在该服务似乎正在运行,并且我没有收到服务器错误 - 太棒了!

如文档 ( https://github.com/greengerong/prerender-java ) 中所述,我首先使用“我”作为用户爬虫代理。当使用“我”作为爬虫代理时,预渲染开始缓存我自己的 API 调用。例如,当我从服务器获取一堆项目时,prerender 返回一些 HTML 并使用我想要的 JSON 缓存 URI。所以现在我在 prerender.io 有一些兑现页面,但不完全是我想要缓存的页面:)。

所以我将 crawlerUserAgent 更改为:

     <init-param>
          <param-name>crawlerUserAgents</param-name>
          <param-value>facebookexternalhit/1.1</param-value>
      </init-param>

(我也尝试过 facebookexternalhit,FacebookUserExternalHit,...)。现在我没有在 prerender.io 上缓存任何页面,并且在 Facebook 的爬虫获取页面之前没有执行 javascript。查看调试器(https://developers.facebook.com/tools/debug/og/object/),它告诉我爬虫只能看到原始元标记,而不是我用 js 替换的元标记在不同的页面上(当我打开页面并检查元素时,元标记被替换)。

问题2)我这样做对吗?我应该尝试其他爬虫用户代理吗?facebookexternalhit 正确吗?

4

0 回答 0