我一直在阅读有关使 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="!">
但是,现在的问题在于这是一个跨域请求,并且不会导致任何地方。