如何在GAE / GWT应用程序中添加动态Facebook元标记

时间:2013-08-23 21:24:49

标签: facebook google-app-engine gwt guice

我已经看到了一些与其他平台一起做这个的技术,但是想知道是否有人有一个干净的方法来做到这一点。

我的应用程序有一个主机HTML文件,并使用标准MVP / Places / Activities来解析哈希片段。它为不同的元素显示各种类似的按钮。 FB(使用lint工具确认)只会读取主页的静态HTML,所以我需要在返回给请求者之前对其进行操作(GWT中没有任何问题可以解决这个问题)。

我使用Guice-y com.google.inject.servlet.ServletModule,因此我可以创建类似的内容:

serve("/fb/*").with(MetaTagAdder.class);

我可以使用/ fb / *作为Like按钮的网址。因此,请显示托管页面的HTML(根据需要添加动态元标记)。然后* .nocache.js文件跳转到EntryPoint.OnModuleLoad()。

这看起来有些笨重。任何人都有更好的主意吗?

1 个答案:

答案 0 :(得分:0)

所以我最终走了这条路并且工作正常。创建一个servlet,其doPost / doGet方法写出你的主机html并将参数传递给它。所以网址看起来像:

http://example.com/fb/mypage.html?foo=baz#place:foo=baz

然后您可以使用参数创建元标记等等:

// the first chunk of the static html
resp.getWriter().println("<html><head><script type=\"text/javascript\" language=\"javascript\" src=\"/myMoodule/myModule.nocache.js\"></script>");

// the dynamic meta tags
resp.getWriter().println("<meta property=\"og:title\" content=\"" + req.getParameter("foo") + "\" />");

// the rest of the static html
resp.getWriter().println("</head><body></body></html>");

然后,当您在类似fb的div上设置data-href属性时,请使用上面的url。也适用于SEO。生产系统的注意事项:

  • 站点中的导航元素应该将用户驱回到直接托管版本。这可能很棘手。了解当哈希片段演变为对用户做出反应时,您将使HTTP请求中的查询字符串保持静态。
  • 如果参数范围有限并且对参数进行处理,请使用HttpServlet中的memcache来缓存返回给客户端的html的半静态副本。
  • 不要把东西放在身体里试图让你的SEO变得爵士乐。心痛在于那个方向。

我仍然在调整这个但是在这一点上看不到任何掉落显示停止者。