我对 Facebook's BigPipe 很感兴趣显示网页时改善用户体验的技术。缺点是它严重基于 Javascript,对搜索引擎一点也不友好。
在我自己的网站上开发类似技术时,我将其设计为可以很容易地在服务器端禁用它以提供更多标准页面,而无需启用 BigPipe。现在,我正在寻找一种使其对爬虫友好的方法。
最简单的方法是将非 BigPipe 内容提供给搜索引擎爬虫/机器人,并将流水线内容提供给其他内容。这不应该被视为伪装:内容完全相同,布局相同(在执行 BigPipe 的 javascript 之后)。唯一改变它的交付方式,使其对爬虫更友好。但 Google 会认为这是合法的吗?
第二种方法是使用另一个 Javascript 来解决这个问题。在第一个请求中,发送非 BigPipe 页面,其中包含一些将保存一些 cookie 的 Javascript。在后续请求中,仅当出现 cookie 时才发送 BigPipe 内容。第一个页面加载不会被优化,但另一个会。看起来是个不错的解决方案,但我真的不喜欢成倍增加 cookie。
第三种方式是流式传输 BigPipe 内容,不像 Facebook 那样使用 HTML 评论,而是使用 <noscript>标签。这将使 pagelet 看起来像:
<noscript id="pagelet_payload_foo">Some content to be indexed here</noscript>
<script>onPageletArrive({id:'foo', [...]})</script>
而不是 Facebook 的方法:
<code id="pagelet_payload_foo"><!-- Some content to be indexed here --></code>
<script>onPageletArrive({id:'foo', [...]})</script>
这看起来很棒,简单,对爬虫和用户都很友好。但这对我来说似乎有点hackish,并且在 IE 7/8 中不起作用,因为 noscript 的内容标记在 DOM 中被忽略。这将涉及这些浏览器的一些肮脏的特殊情况。
然后,我更仔细地研究了 Facebook 的功能。好像他们在做同样的事情。页面在我的浏览器中进行了优化,但不在 Google 的缓存中。我试图清除所有浏览器缓存和 cookie,然后再次请求该页面。不管怎样,我一直通过 BigPipe 获取内容。他们没有使用任何基于 cookie 的技术。
那么,问题很简单:Facebook 如何做到这一点?第一种方法会被视为隐藏真实内容,还是仅适用于 Facebook,因为它是 Facebook?还是我漏掉了什么?
谢谢。
最佳答案
简单的答案是 Facebook 区分搜索机器人并为它们提供不同的内容。这可以通过用户代理(正如我认为您在 Q 中暗示的那样)或通过查找 IP 地址以查看它是否与 Google 地址范围相匹配。
我更喜欢完全静态的版本,因为它还允许您优化速度,这是 Google(可能还有其他公司)在其索引中包含的东西。
关于javascript - Facebook 的 BigPipe 和 SEO : Cloaking?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223816/
我有一个rubyonrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素
我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click
我正在尝试使Authlogic和FacebookConnect(使用Facebook)发挥良好的作用,以便您可以通过正常注册方式或使用Facebookconnect创建帐户。我已经能够让连接以一种方式工作,但注销只会在facebook而不是我的网站上注销,我必须删除cookie才能使其正常工作。任何帮助都会很棒,谢谢! 最佳答案 这是我使用FacebookConnect扩展、authlogic和OpenID制作的示例应用程序。它仍然需要一些工作,但它确实起作用了。http://big-glow-mama.heroku.com/htt