我在Polymer元素中显示国际化字符串,如下所示:
<div>
<span class="content">{{myContent}}</span>
</div>
...并有以下飞镖码:
@observable String myContent;
//...
void onUpdateLocale(_locale) {
myContent = getMyContent();
}
//...
getMyContent() => Intl.message('All my content ...', name:'myContent',
desc: 'This is my content',
args: [],
examples: {'None' : 0});
然而;当Google抓取应用时,它只会提取“{{myContent}}”而不是其内插值,即实际的国际化内容。有没有办法解决这个问题,并制作一个国际化的Polymer.dart应用程序,它也是SEO友好的?
答案 0 :(得分:2)
Google有一个规范,可让您在所有必要的Javascript(或Dart)运行到搜索引擎后提供网页HTML的快照:https://developers.google.com/webmasters/ajax-crawling/
基本思想是在服务器端呈现页面,然后遵循一组URL约定,这些约定允许您以不会与隐藏真实内容混淆的方式为搜索引擎提供预生成的HTML。
Google,Bing,Yandex和一些社交机器人支持此规范。
您可以自己实现此规范或使用为您执行此规范的服务(我为其中一个工作:https://ajaxsnapshots.com)解决方案通常插入Web服务器级别,因此您无需进行对您的应用进行的任何更改。
答案 1 :(得分:2)
它不是很清楚。虽然最近谷歌宣布他们正在评估Javascript来索引页面,但我没有看到任何与服务器呈现页面方法相比的深度评估。
然后存在像Bing这样的非谷歌搜索引擎的问题。
今天的聚合物实际上并没有真正进行服务器端渲染,据我所知,团队没有计划提供比近期更好的服务。
如果您的项目/业务依赖于SEO,我不会冒使用聚合物的风险。
您有两种方法可以解决此问题:
当抓取工具请求页面时,使用phantom.js在服务器端呈现页面。
使用ajaxsnapshots等第三方服务。
忘记聚合物并使用react.js组件框架。 React有一种在服务器端呈现虚拟DOM的方法。如果您使用node.js框架,这将无缝地工作。应该可以使用JVM框架以及带有Javascript引擎的Java 6+(在Java 8中大大改进.Google“nashhorn”)。
答案 2 :(得分:1)
所以,除了我刚看过的数据绑定文档之外,我对Polymer不太了解。它似乎与Google的AngularJS非常相似,因为它以声明的方式使用JavaScript将数据呈现到HTML文档中。在这种情况下,浏览器仍然从根本上将{{something}}的基础调用视为原始字符串。然后,JS库将数据更改为屏幕上的文本。
在这种情况下,您可能会考虑像Angular开发人员那样处理SEO。以下是该主题的权威资源:http://www.yearofmoo.com/2012/11/angularjs-and-seo.html