看起来 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> • • </title>
<script type="application/ld+json">{}</script>
其中
{}
是我的代码在尚未从数据库读取数据时返回的内容。
我在 Microsoft Q&A 上询问了这个问题(第二个答案)并得到了这个答案(来自一位非常了解 Blazor 的人):
记住网络爬虫只能访问预渲染的 html 由 blazor 生成(无 OnInitializedAsync() 或事件)
那么,我怎样才能给爬虫提供完全渲染的页面而不是最初的静态html呢?
该解决方案有几个组成部分:
&crawler=true
添加到站点地图中的网址(在 SignalR 电路内获取请求标头并不容易,因此采用此解决方案)。@StructuredDataProperty
getter 设置为 MarkupString
,而不是 string
。这对最终的网页没有什么影响,但是当 Google 读取它时,它会产生很大的变化(不知道为什么)。