【发布时间】:2012-06-17 18:34:00
【问题描述】:
我一直在阅读有关使 ajax 繁重的应用程序对搜索引擎更友好的信息: https://developers.google.com/webmasters/ajax-crawling/docs/getting-started
我最近提供的解决方案之一在很大程度上依赖于跨域 javascript 小部件。集成此解决方案的网站将在其网站中包含一段 javascript。例如:
<script type="text/javascript">
var _lw = _lw || {};
_lw._setAccount = ' 00000000-0000-0000-0000-000000000000' ;
_lw._widgetType = '_widgetName';
_lw._options = {};
(function() {
var scriptsrc = document.createElement('script');
scriptsrc.type = 'text/javascript';
scriptsrc.async = true;
scriptsrc.src = 'http://hostname/Application/js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(scriptsrc, s);
})();
</script>]
<div id="widget-container"></div>
此请求将 jQuery 包装器以及小部件将使用的相关应用程序 URL 附加到 dom。注意,这段javascript的来源只是一个asp.net mvc内容结果,输出相关内容:
[HttpGet]
[ActionName("js")]
public ContentResult RenderJavascript()
{
// java script urls & jquery wrapper are output
}
现在必要的 url 已经可用,刚刚添加的 jQuery 包装器启动并向服务器发出请求,其中包含帐户信息、小部件类型和任何相关选项。 ASP.net MVC 只是充当内容生成器,它返回 JSONP 结果,生成的内容将附加到站点内容容器中。
function loadWidget() {
var jsonpUrl = _opts._widgetUrl + _lw._setAccount;
jQuery.getJSON(jsonpUrl, _lw._options, function (data) {
jQuery('#widget-container').html(data.html);
});
}
我读到的关于使这个过程对搜索引擎更友好的内容越多,我就不知从何开始。生成所需的 HTML 快照很容易,但是,我如何向 google 表明应该抓取链接?
另一个看起来很有希望的选项是关于如何处理没有散列碎片的页面的部分。这将通过添加一个使用 javascript 小部件的元标记来完成。
<meta name="fragment" content="!">
但是,现在的问题在于,这是一个跨域请求,并且不会导致任何地方。
【问题讨论】:
-
除非您的小部件可以更改位置哈希值,否则我认为这是不可能的。见:developers.google.com/webmasters/ajax-crawling/docs/…
标签: javascript jquery asp.net-mvc search-engine web-crawler