如何将动态文本写入Google抓取工具将看到的<head>?

问题描述 投票:0回答:1

看起来 Google 爬虫获取了某个页面的静态页面(预先调用

OnInitializedAsync
)。这是针对 Blazor Interactive Server 应用程序。

我需要用数据库中的数据填充

<PageTitle>
<HeadContent>
。从我的测试来看,网页显示,正如预期的那样:

<title>event 1112 • 8/12/2024 • , </title> 
<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "Event",
    "name": "event 1112",
    "description": "sdfsdfsdfsdf\r\nasdasd\r\n111\r\nqweqwe",
    "image": [
        "https://louishowe20240425.blob.core.windows.net/organizations/TestOrganization/1587542280_3_30.jpeg",
        "https://louishowe20240425.blob.core.windows.net/organizations/TestOrganization/central_bank_46.png"
    ],
    "url": "https://louishowe-dev.azurewebsites.net:443/Event/Profile%3Fid=20524",
    "endDate": "2024-08-12T12:00:00+03:00",
    "eventStatus": "https://schema.org/EventScheduled",
    "organizer": {
        "@type": "Organization",
        "name": "TestOrganization",
        "url": "https://louishowe-dev.azurewebsites.net:443/Organization/Profile%3Fid=30017",
        "email": "[email protected]",
        "telephone": "+1996441551"
    },
    "startDate": "2024-08-12T11:30:00+03:00"
}
</script>

但是 Google 丰富结果测试 显示:

<title> &#x2022;  &#x2022; </title>
<script type="application/ld&#x2B;json">{}</script>

其中

{}
是我的代码在尚未从数据库读取数据时返回的内容。

我在 Microsoft Q&A 上询问了这个问题(第二个答案)并得到了这个答案(来自一位非常了解 Blazor 的人):

记住网络爬虫只能访问预渲染的 html 由 blazor 生成(无 OnInitializedAsync() 或事件)

那么,我怎样才能给爬虫提供完全渲染的页面而不是最初的静态html呢?

web-crawler blazor-server-side google-crawlers
1个回答
0
投票

该解决方案有几个组成部分:

  1. 如果请求来自爬虫,则在预渲染调用上填充页面。
  2. 要知道它何时是爬虫,请将
    &crawler=true
    添加到站点地图中的网址(在 SignalR 电路内获取请求标头并不容易,因此采用此解决方案)。
  3. 如果 JSON 内容是在您的代码中生成的,请将
    @StructuredDataProperty
    getter 设置为
    MarkupString
    ,而不是
    string
    。这对最终的网页没有什么影响,但是当 Google 读取它时,它会产生很大的变化(不知道为什么)。
© www.soinside.com 2019 - 2024. All rights reserved.