【问题标题】:Dynamic AJAX Meteor website - how to make it crawlable?动态 AJAX Meteor 网站 - 如何使其可抓取?
【发布时间】:2014-05-18 08:30:06
【问题描述】:

我有一个 Meteor 项目,其中添加了可爬取程序包。如果我正常加载页面然后执行view page source 我在<body> 标记中什么也得不到。如果我输入 url,然后在末尾添加丑陋的 ?_escaped_fragment_= 并再次查看页面源 - 一切都会显示出来。我认为这意味着可蜘蛛程序包正在工作并且正在使用phantomJS 正确呈现 HTML。所以现在的问题是,如何使没有丑陋部分的常规 URL 变得可抓取?我想将该网站提交给 google Adsense 并且不接受丑陋的 url,试图查看 google 使用 http://www.feedthebot.com/tools/spider/ 工具看到的内容会导致空结果。有什么建议/帮助吗?

编辑 1:添加来自 Google Webmaster 的 google 抓取结果

Date: Saturday, April 5, 2014 at 8:13:45 PM PDT
Googlebot Type: Web
Download Time (in milliseconds): 304
HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Date: Sun, 06 Apr 2014 03:13:58 GMT
Connection: keep-alive
Transfer-Encoding: chunked

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="/7a2b57749c356bfba1728bdae88febf653d0c6ca.css?meteor_css_resource=true">


<script type='text/javascript'>__meteor_runtime_config__ = {"meteorRelease":"0.7.2","PUBLIC_SETTINGS":{"ga":{"account":"UA-********-1"}},"ROOT_URL":"http://****.***","ROOT_URL_PATH_PREFIX":"","autoupdateVersion":"8213872485a2cc1cff2745d78330d7c8db8d8899"};</script>

  <script type="text/javascript" src="/caefe2b2510e562c5e310f649c4ff564ddb6b519.js"></script>


<script type='text/javascript'>
if (typeof Package === 'undefined' || 
    ! Package.webapp || 
    ! Package.webapp.WebApp || 
    ! Package.webapp.WebApp._isCssLoaded()) 
  document.location.reload(); 
</script>

<meta name="fragment" content="!">
</head>
<body>

</body>
</html>

编辑 2: 目前看来,Google 正确地索引了该站点,但 Adsense 没有使用相同的策略,这对我来说是这个问题的核心。 Meteor + spiderable + phantomjs = AdSense 不兼容 = 但...兼容 Google 索引。

【问题讨论】:

  • spiderable 包是否明确实现了 Google 的 AJAX 抓取策略?我不会指望“fetch as google”功能适用于 AJAX 页面,但抓取可能仍然成功(提交原始 URL 时)。你读过developers.google.com/webmasters/ajax-crawling吗?这就是说,我认为它可能工作得很好。等几天,然后在 google 上搜索你的页面,看看 google 在缓存中有什么,以及它是否正在索引你的 AJAX 内容中的单词。
  • 听起来您使用的工具没有使用 Google 的 AJAX crawling specification。尝试注册Google Webmaster Tools 并添加您的网站。这将允许您查看 Google 抓取工具的实际抓取结果。
  • 你是说google的爬虫能发现丑陋的url,而蜘蛛工具却不能?我确实浏览了 ajax-crawling 页面,但似乎那里的所有建议都已经适用于该站点。我想,我会尝试重新提交,看看它现在是否有效。
  • 当我使用该工具尝试蜘蛛meteor.com 时,它说蜘蛛看到了 1 个文字。这显然是错误的; Meteor 主页在 Google 搜索结果中被彻底索引。这表明蜘蛛工具没有实现 Google 用来蜘蛛实时网站的 AJAX 抓取规范。
  • @sbking 我已经添加了谷歌抓取的结果,它产生了类似的结果。此外,spiderable 包应该实现正确的 Google AJAX 抓取规范。除了默认的 meteor.com 服务器之外,您是否有任何可蜘蛛/部署的经验?

标签: seo meteor phantomjs adsense


【解决方案1】:

问题似乎只是 Google 如何在网站管理员工具中报告抓取情况。在使用虚拟应用程序进行了一些测试后,似乎即使 Google 网站管理员工具报告它获取了空白页面,但该网站仍被 Google 正确抓取、编入索引和缓存。

因此,出于某种原因,它显示了漂亮 URL 的结果,即使丑陋的 URL 是实际被抓取的页面,正如预期的那样。这似乎不是 Meteor 特有的问题,而是网站管理员工具的问题。 spiderable 包似乎按预期工作。

毕竟,http://meteor.comhttp://docs.meteor.comhttp://atmosphere.meteor.com 都在运行 Meteor,并且它们在 Google 上被索引/缓存得很好。

验证您的网站是否正在被抓取而不将其提交索引的一种方法是查看您的网站管理员工具主页上的网站缩略图:

https://www.google.com/webmasters/tools/home?hl=en

【讨论】:

  • 嗯,截图是正确的……至少我之前的版本是这样。它正确渲染。只有当我使用像 Lynx 这样的浏览器......或使用 PhantomJS 脚本时,我似乎得到了爬虫正在得到的东西 - 空白页面。我尝试再次为 adsense 提交页面,但爬虫仍然无法正确找到我的内容。
  • Lynx 将无法工作,除非您使用丑陋的 URL。请放心,Google 和其他使用 Google 的 AJAX 规范的搜索引擎正在正确地抓取您的网页并将其编入索引。但是,快速搜索显示 Adsense 不支持 AJAX 网站。曾经有一个“Adsense for AJAX”服务,但谷歌停止了它。目前看来,Adsense 不是您想要用于 AJAX 重度网站(例如 Meteor 网站)的广告服务。
  • 是的,没有一个无头的没有丑的。我确实认为 google 的 crwaler 正确地看到了它,这就是为什么他们的 adsense 爬虫会看到其他任何东西是一个谜,我认为它使用了 googlebot 以前索引过的任何东西,但我猜不是。我以为他们的 Adsense for AJAX 只是在他们制定了爬取 ajax 网站的指南之后才合并到 adsense 中。
【解决方案2】:

如果您正在运行 Apache,您可以设置一个 *mod_rewrite* 重写规则,将每个 404 错误推送到脚本。该脚本将检查请求是否指向特殊文件夹(例如下面的“内容”文件夹),并尝试提取相应丑陋 url 的内容。

对 .htaccess 文件的更改如下所示:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /director.php?q=$1 [L,QSA]

director.php 脚本的工作方式如下:

  • 检查 404 请求是否针对特定文件夹,例如“内容”
    • 示例:http://myplace.com/content/f-re=feedddffv
  • 将未知的 URL 转换为丑陋的 URL 并使用 CURL 来获取和提供内容
    • http://myplace.com/content/f-re=feedddffv 变为 http://myplace.com/?f-re=feedddffv
  • 该脚本使用 CURL 将丑陋的 url 的内容拉到一个变量中
  • 将内容回显给查看者

您还需要使用新的漂亮链接为搜索引擎创建站点地图。您可以使用 URL 重写器在 IIS 中执行类似的操作。使用 CURL 之类的东西可能会减慢速度,因此请尽量让您的站点地图远离人眼。

【讨论】:

  • 不确定meteor在后端做什么,但可能是nginx。它应该比您建议的要简单得多。感觉就像我在愚弄谷歌一样,这可能违反了他们的广告/分析用户政策。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2020-10-02
  • 2012-01-22
相关资源
最近更新 更多