这是参考#10450。
目标:使用来自页面本身的数据设置元标签(标题、描述等)以用于 SEO 和开放图谱目的。使用 Javascript 互操作不会有帮助,因为页面将无法被抓取。
我使用了@honkmother 的建议,并将基本组件进一步移到树上以封装标签<html>,但由于某种原因,这影响了路由。所有链接都带有前缀~/,我似乎无法理解为什么。
如果有人有兴趣看一下,我在这里创建了一个示例存储库。
_Hosts.cshtml
@page "/"
@namespace BlazorMetaTags.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = null;
}
<!DOCTYPE html>
<component type="typeof(AppBase)" render-mode="ServerPrerendered" />
Run Code Online (Sandbox Code Playgroud)
应用程序库.cs
using BlazorMetaTags.Shared;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
namespace BlazorMetaTags
{
public class AppBase : ComponentBase
{
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(0, "html");
builder.AddAttribute(1, "lang", "en");
builder.OpenElement(2, "head");
builder.OpenComponent<Head>(3);
builder.CloseComponent();
builder.CloseElement();
builder.OpenElement(3, "body");
builder.OpenElement(4, "app");
builder.OpenComponent<App>(5);
builder.CloseComponent();
builder.CloseElement();
builder.OpenComponent<Body>(6);
builder.CloseComponent(); …Run Code Online (Sandbox Code Playgroud)