10

我正在使用下面的函数 (GWT) 动态创建 HTML 元标记。将它放在 DOM 上需要 1 秒。除了 Facebook,它工作正常。当我从我的网站共享一个链接时,抓取工具会获取 HTML 中的元标记:无。我怎样才能解决这个问题?

/**
* Include the HTML attributes: title, description and keywords (meta tags)
*/
private void createHTMLheader(MyClass thing) {

    String title=thing.getTitle();
    String description=thing.getDescription();

    Document.get().setTitle(title);

    MetaElement metaDesc = Document.get().createMetaElement();
    metaDesc.setName("description");
    metaDesc.setContent(description);
    NodeList<Element> nodes = Document.get().getElementsByTagName("head");
    nodes.getItem(0).appendChild(metaDesc);
}

这是 DOM 上的结果 HEAD。标题aaaa和元描述已动态加载。(感谢CBroe的提示)。在“查看源代码”功能中,这些动态标签不会显示(仅在开发人员工具上 - 查看 dom)。

<head>
    <title>aaaa</title>
    <meta content="text/html; charset=utf-8" http-equiv="content-type">
    <meta name="description" content="My description">

    <script language="javascript" type="text/javascript" src="dialective/dialective.nocache.js"></script><script defer="defer">dialective.onInjectionDone('dialective')</script>

</head>

原始 HTML 没有 TITLE 或 META-DESCRIPTION 标签。

4

2 回答 2

12

Facebook 抓取工具只能看到<meta>来自服务器的原始 HTML 响应中包含的标签。运行任何 JavaScript 代码、Flash 插件、Java 小程序或任何其他成熟浏览器可能运行的东西都不够“智能”。

您需要<meta>使用服务器端框架在服务器上生成这些标签。

此外,Facebook 提供了一个方便的测试工具,以确保您的页面公开适当的元标记。您可能还需要添加 OpenGraph 标记,例如og:titleog:description

于 2013-02-15T17:27:30.367 回答
-2

由于某种原因,元描述尚未加载上述功能......

那是因为你只是在创建一个新的 MetaElement——但你对它什么都不做。

您必须将其附加到文档中,更具体到其head元素。

就像是

getHead().appendChild(metaDesc)

不见了。

于 2013-02-15T16:27:58.483 回答