2

Google Site Search のカスタム検索エンジンを作成しており、検索結果に特定のメタデータを表示しようとしています。条件付きマークアップを使用して、特定のものが表示されないようにしています。メタデータは、次のように PageMaps を使用してページに保存されます。

<!--
    Google Search PageMap
    <PageMap>
        <DataObject type="document">
            <Attribute name="type">project</Attribute>
            <Attribute name="title">Page title</Attribute>
            <Attribute name="topic">Page topic</Attribute>

            <Attribute name="topic_url">http://url.com/knowledge-hubs/resilient-catchments/river-restoration-partnerships/</Attribute>
            <Attribute name="knowledge_hub">Page knowledge hub</Attribute>
            <Attribute name="knowledge_hub_url">http://url.com/knowledge-hubs/resilient-catchments/</Attribute>
            <Attribute name="sniffer_code">ABC123</Attribute>
            <Attribute name="project_status">Active</Attribute>
            <Attribute name="project_start">1 August 2010</Attribute>
            <Attribute name="project_end">1 July 2012</Attribute>
        </DataObject>

        <DataObject type="thumbnail">
            <Attribute name="src">http://url.com/img.jpg</Attribute>
            <Attribute name="width">100</Attribute>
            <Attribute name="height">60</Attribute>
        </DataObject>
    </PageMap>
-->

この情報をすべて生成するページもあれば、いくつかのもの (タイトルやタイプなど) だけを含むページもあります。

ページに応じて、ここに含まれるすべての情報を表示できるようにしたいと考えています。これは、テンプレートの条件data-if属性に依存します。webResult

これは私がこれまでに得たものです:

<article id="sniffer_webResult">
            <div class="gs-title">
                <a data-attr="{href:unescapedUrl,target:target}" class="gs-title">
                    <!--<span data-if="typeof richSnippet != 'undefined'" data-body="richSnippet.document.title"></span>-->
                    <span data-body="html(title)"></span>
                </a>
            </div>

            <div data-if="Vars.richSnippet" data-attr="0" data-body="render('thumbnail',richSnippet,{url:unescapedUrl,target:target})"></div>
            <div class="gs-snippet" data-body="html(content)"></div>
            <div data-if="typeof richSnippet != 'undefined'" class="meta">
                <!--<article data-if="richSnippet.document.type == 'project'">-->
                    <!--<div data-if="richSnippet.document.snifferCode != 'undefined'"><strong>Sniffer code: </strong><span data-body="richSnippet.document.snifferCode" data-attr="0"></span></div>-->
                    <div data-if="richSnippet && richSnippet.document.snifferCode"><strong>Sniffer code: </strong><span data-body="richSnippet.document.snifferCode" data-attr="0"></span></div>
                    <div data-if="richSnippet.document.projectStatus != null"><strong>Status: </strong><span data-body="richSnippet.document.projectStatus" data-attr="0"></span></div>
                    <div data-if="richSnippet.document.topic != null" class="topic"><strong>Topic: </strong><a data-attr="{href:richSnippet.document.topicUrl}" data-body="richSnippet.document.topic" data-attr="0"></a></div>
                    <div data-if="richSnippet.document.knowledgeHub != null" class="hub"><strong>Knowledge hub: </strong><a data-attr="{href:richSnippet.document.knowledgeHubUrl}" data-body="richSnippet.document.knowledgeHub" data-attr="0"></a></div>
                <!--</article>-->
            </div>
        </article>

(コメントアウトなどについていじっていることがわかります。)

条件を機能させることができないようです。ただし、いくつかの属性はうまく機能するので、ほとんどそこにいます。ほとんどの属性が含まれていないホームページのようなページでは、結果に次のエラーが表示されます。

TypeError: 未定義のプロパティ 'snifferCode' を読み取れません: richSnippet && richSnippet.document.snifferCode

ここでGoogle のドキュメントを確認しましたが、特に包括的であるとは思いませんでした。

どんな考えでも大歓迎です!:)

4

1 に答える 1

2

XMLルートをたどり、結果を表示する前にサーバー側で結果を解析することにしました。これにより、ページメタデータをいつどのように表示するかをより細かく制御でき、全体としてはるかに強力になります。そして、それは最初に登場したほど怖くはありません!

richSnippetsは基本的な表示には便利ですが、自信を持って表示を制御できるとは思わなかったので、代わりにXMLを使用するもう1つの理由があります。

于 2012-07-09T12:31:17.400 に答える