2012-07-03 6 views
2

Google Site Search 사용자 정의 검색 엔진을 만들고 있는데, 특정 결과가 표시되지 않도록 조건부 마크 업을 사용하여 검색 결과에 특정 메타 데이터를 표시하려고합니다. 메타 데이터는 다음과 같이 PageMaps가를 사용하여 내 페이지에 저장됩니다Google Site Search : 검색 결과에 메타 데이터가 포함 된 리치 스 니펫 맞춤 설정

<!-- 
    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> 
--> 

일부 페이지는이 정보의 모두를 생성, 다른 사람들이 몇 가지 (예를 들어 제목과 유형)를 포함한다.

여기에 포함 된 정보는 페이지에 따라 표시 할 수 있기를 원합니다. 이 경우 webResult 템플릿의 조건부 data-if 특성을 사용합니다.

<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> 

나는 조건문을 얻을 수없는 것 (당신은 내가 등의 일을 주석에 대한 일 처리 봤는데 볼 수 있습니다) :

은 내가 지금까지있어 무엇인가 일하다. 일부 속성은 훌륭하게 작동하므로 거의 다 있습니다. 속성의 대부분을 포함하지 않는 홈페이지, 같은 페이지는 결과에서이 오류를 줄 : 나는 구글의 문서 here를 통과했지만 내가 찾은 적이 없다

TypeError: Cannot read property 'snifferCode' of undefined: richSnippet && richSnippet.document.snifferCode

은 특히 포괄적 할 수 있습니다.

의견을 보내 주시면 감사하겠습니다. :)

답변

2

XML 라우트를 탐색하고 결과를 표시하기 전에 serverside를 파싱하기로 결정했습니다. 이렇게하면 페이지 메타 데이터가 표시되는 방법과시기를 훨씬 더 효과적으로 제어 할 수 있으며 전반적으로 훨씬 더 강력합니다. 처음 등장했을 때보 다 무섭지는 않습니다!

richSnippets는 기본 디스플레이에 유용하지만 디스플레이를 자신있게 제어 할 수 있다고 생각지 않아서 XML 대신 사용할 수 있습니다.