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



我看到了一些在其他平台上实现这一点的技术,但不知道是否有人有一种干净的方法。

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

我使用Guice-y com.google.inject.servlet.ServletModule,这样我就可以创建类似于的东西

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

我可以使用/fb/*作为"点赞"按钮的URL。因此,喷出托管页面的HTML(根据需要添加动态元标记)。然后*.nocache.js文件直接跳转到EntryPoint.OnModuleLoad().

这看起来有点笨拙。有人有更好的主意吗?

所以我最终走了这条路,它运行得很好。创建一个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上设置数据href属性时,请使用上面的url。也适用于SEO。生产系统的注意事项:

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

我仍然在调整这个,但在这一点上没有看到任何停滞的节目。

最新更新