Umbraco 7 SEO 标签

2024-02-22

我想在 Umbraco 中创建 SEO 标签的网站。我想知道它是如何做到的?有没有最佳实践文件或建议?


我不是 SEO 专家,但希望下面的代码片段可以帮助您入门

Metadata

在页面上我添加了一些属性。如果您按照文档类型、通过继承或通过组合进行操作,您可以选择。我定义了以下属性。

  • 页面标题,我的目标是与页面名称有点不同。不确定它是否有任何区别 - 但我希望它能让我的文章的更多焦点词出现在页面标题或页面名称中。我放置在的页面名称<head>部分,页面标题作为文章/主要内容的一部分。

  • 页面片段,我的目标是尽可能短,并且大多少于 160 个字符。文章中使用了页面片段以及元数据摘要。

  • 页面标签,用于元数据关键字以及网站上的水平内容导航。

  • 特色图片虽然严格来说不是 SEO 的一部分,但作为使内容对社交媒体友好的策略的一部分很重要。

  • Author,可能对 SEO 很重要,我有主要作者的财产,并且作为会员财产,我注册了 facebook 个人资料页面。

我已经开始编写一个剃刀宏,但是它需要更多的工作,但是对我来说效果很好。我将它作为宏运行放在<head> part.

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{  
    string domain = "https://" + HttpContext.Current.Request.Url.Host;
    string site_name = "sitename";
  string og_title = CurrentPage.Name; 
    string og_image = "";
    string og_description = "Description here";
    string facebookPageAuthor = "https://www.facebook.com/xx";
    string facebookPageSite = "https://www.facebook.com/xx";
    string authorName = "asdf";
    int authorId = 1099;
    string url = domain + CurrentPage.Url;
    string facebookAppId = "12341234";
    string twitterUserAuthor = "@asdf";
    string twitterUserSite = "@qwer";
    string logoUrl = domain + "/media/1006/logo.png";
    DateTime createDate = CurrentPage.CreateDate;
    DateTime updateDate = CurrentPage.UpdateDate;

    if (CurrentPage.pageTitle != null && !(CurrentPage.pageTitle is Umbraco.Core.Dynamics.DynamicNull))
    { og_title = CurrentPage.pageTitle;}

    @* Check if this page has snippet, and use it exists *@
    if (CurrentPage.pageSnippet != null && !(CurrentPage.pageSnippet is Umbraco.Core.Dynamics.DynamicNull))
    { og_description = CurrentPage.pageSnippet; }

    @* Check if this page has featured image, and crop to facebook preferred crop size (1200x630px). Use parent page default image it exists *@      
    if (CurrentPage.featuredImage != null && !(CurrentPage.featuredImage is Umbraco.Core.Dynamics.DynamicNull))
    {   
        var featImage = Umbraco.TypedMedia((int)CurrentPage.featuredImage);
        og_image= featImage.GetCropUrl("1200x630"); }
    else 
    { 
        og_image = Umbraco.Media(CurrentPage.AncestorsOrSelf(1).First().featuredImage).GetCropUrl("1200x630"); 
    }

    @* Check if author has facebook page *@
    if ((int)CurrentPage.author >0)
        { 
        authorId = (int)CurrentPage.author;
        }

        var authorModel = Members.GetById(authorId);
        authorName = (string)authorModel.Name; 
        facebookPageAuthor = (string)authorModel.GetProperty("facebookProfilePage").Value; 

}   
<meta property="og:title" content="@og_title" />
<meta property="og:site_name" content="@site_name" />
<meta property="og:url" content="@url" />
<meta property="og:description" content="@og_description" />
<meta property="og:image" content="@domain@og_image" />
<meta property="fb:app_id" content="@facebookAppId" />
<meta property="og:type" content="article" />
<meta property="og:locale" content="en_US" />
<meta property="article:author" content="@facebookPageAuthor" />
<meta property="article:publisher" content="@facebookPageSite" />
<meta name="twitter:title" content="@og_title" />
<meta name="twitter:description" content="@og_description" />
<meta name="twitter:image:src" content="@domain@og_image" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@twitterUserSite" />
<meta name="twitter:creator" content="@twitterUserAuthor" />

<script type="application/ld+json">
{
  "@@context": "http://schema.org",
  "@@type": "NewsArticle",
  "mainEntityOfPage":{
    "@@type":"WebPage",
    "@@id":"@url"
  },
  "headline": "@og_title",
  "image": {
    "@@type": "ImageObject",
    "url": "@domain@og_image",
    "height": 630,
    "width": 1200
  },
  "datePublished": "@createDate.ToString("o")",
  "dateModified": "@updateDate.ToString("o")",
  "author": {
    "@@type": "Person",
    "name": "@authorName"
  },
   "publisher": {
    "@@type": "Organization",
    "name": "domain.com",
    "logo": {
      "@@type": "ImageObject",
      "url": "@logoUrl",
      "width": "660",
      "height": "675"
    }
  },
  "description": "@og_description"
}
</script> 

面包屑

使用微数据制作面包屑的宏对于 SEO 很有用。

@using Umbraco.Web
@using Umbraco.Web.Mvc
@using Umbraco.Core
@using System.Web
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@*
    This snippet makes a breadcrumb of parents using an html ordered list.
    It makes metadata available for search engines in the Microdata format.
    The CSS is customised for Bootstrap 4
*@

@if (Model.Content.Ancestors().Any())
{
    var pageAncestors = Model.Content.Ancestors().OrderBy("Level");
<div>
    <ol class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList">       
        @foreach (var page in pageAncestors)
        {
                <li class="breadcrumb-item" itemprop="itemListElement" itemscope
                    itemtype="http://schema.org/ListItem">
                    <a itemscope itemtype="http://schema.org/Thing"
                       itemprop="item" href="@page.Url">
                        <span itemprop="name">@page.Name</span>
                    </a>
                    <meta itemprop="position" content="@page.Level" />
                </li>
        }
        <!-- And add the current page -->
        <li class="breadcrumb-item active" itemprop="itemListElement" itemscope
            itemtype="http://schema.org/ListItem">
                <span itemprop="name">@Model.Content.Name</span>
        </li>
    </ol>
</div>
}

SiteMap

我应该将站点地图提交给搜索引擎。宏可能是这样的:

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using Umbraco.Core.Models
@using Umbraco.Web
@using System.Linq;
@{ Layout = null;
Response.ContentType = "text/xml";
}<?xml version='1.0' encoding='UTF-8' ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
@ListChildNodes(Model.Content.AncestorOrSelf(1))
</urlset>

@helper ListChildNodes(IPublishedContent startNode)
{
    const int maxLevelForSiteMap = 100;

    foreach (var node in startNode.Children.Where(x => Umbraco.MemberHasAccess(x.Id, x.Path)).Where(x => !Umbraco.IsProtected(x.Id, x.Path)).Where(x => x.IsVisible()))
    {
        if (node.TemplateId > 0)
        {
            <url>
                <loc>@node.UrlWithDomain()</loc>
                <lastmod>@(string.Format("{0:s}+00:00", node.UpdateDate))</lastmod>
                @{
                    var freq = node.GetPropertyValue<string>("SearchEngineSitemapChangeFreq");
                    var pri = node.GetPropertyValue<string>("SearchEngineSitemapPriority");
                }

                @if (!string.IsNullOrEmpty(freq))
                {
                    <changefreq>@freq</changefreq>
                }
                @if (!string.IsNullOrEmpty(pri))
                {
                    <priority>@pri</priority>
                }
            </url>
        }

        if (node.Level <= maxLevelForSiteMap && node.Children.Any())
        {
            @ListChildNodes(node)
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Umbraco 7 SEO 标签 的相关文章

  • Angular 与微数据

    Microdata 是否可以与动态 Angular 一起使用ng repeat items 我可以将它用作 div div 我已经发现模式验证器 https search google com structured data testing
  • Googlebot 什么时候执行 JavaScript?

    我在多个域上有一些单页 Web 应用程序 它们严重依赖 javascript ajax 来获取和显示内容 根据日志和搜索结果 我可以看出 googlebot 在某些域上运行 javascript 但在其他域上则不运行 在某些平台上 它索引了
  • 如何获取用户控件数据类型所在的TabPage

    我正在使用用户控件包装器方法构建自定义数据类型 我在其中添加现有的 TinyMCE 数据类型 问题是我需要找到一种方法来动态获取数据类型所在的当前 TabPage 以便我可以将 TinyMCE 按钮添加到菜单中 这就是我目前所拥有的 Tab
  • 包含 对于带有 hashbang 的页面有害吗?

    谷歌关于这个元标签的说法是 以下重要限制适用 元标记只能出现在没有哈希片段的页面中 仅有的 可能会出现在内容字段中 元标记必须出现在文档的头部 Source https developers google com webmasters aj
  • PhantomJS 是否支持 ES6 来为爬虫和机器人提供 angularjs 应用程序?

    我正在尝试使用ajax seo https github com liuwenchao ajax seo让 Angularjs 应用程序从 PhantomJS 网络服务器提供 html 编译内容 但它没有呈现完整的页面 它只是给出以下响应
  • Angular 通用元标记在页面源中不可见

    当我查看在我的角度通用项目的构造函数中设置标题和元标记的页面时 标题显示在选项卡中 当我单击 检查元素 并转到时 我可以在 html 中看到元标记和标题到 html 文档的头部 但是 如果您仅单击 查看页面源代码 则不会显示标签 也不会显示
  • 我可以在 schema.org 丰富摘要的 Span 标记中使用多个 ItemProps 吗?

    假设我想向以下句子添加丰富的摘要 我在纽约生活和工作 由于纽约既是我的居住地 也是我工作的城市 理论上我希望使用 schema org 标准来标记该行 div I live and work in span New York span di
  • 如何将 sitemap.xml 添加到 angularJS 站点?

    我在应用程序文件夹中添加了 sitemap xml 但如何将其公开以便谷歌网站管理员工具可以获取它 Thanks 来自谷歌的文档 有两种不同的方法可以让 Google 可以使用您的站点地图 OR 插入 在 robots txt 文件中的任意
  • 部署 Web 应用程序期间出现错误“无法打开源文件:找不到路径的一部分”

    我在部署网络应用程序期间遇到错误 错误的标题是Could not open Source file Could not find a part of the path 无法打开源文件 找不到路径的一部分 E ARCHIVES Project
  • Google 如何确定将页面索引为讨论页面? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在自己建立一个问答网站 我想让这个网站被Google索引为问答网站或论坛 可以在使用Google中的 讨论 时检索到 根据我的个人经验 当我想获得
  • sIFR 还是 FLIR?

    我最近遇到了面部提升术 这是 sIFR 的替代方案 我想知道那些同时拥有 sIFR 和 FLIR 经验的人是否可以介绍一下他们使用 FLIR 的经验 对于那些还没有了解 FLIR 工作原理的人来说 FLIR 的工作原理是使用 JavaScr
  • 如何在 OpenCart 中创建自定义的 SEO 友好 URL?

    如何在 OpenCart 中自定义系统 URL 例如 我想http example com index php route checkout cart http example com index php route checkout ca
  • 使用重定向/重写规则获取漂亮的浏览器 URL 时出现问题

    目前我使用 htaccess 重定向来发送 不错的 网址 办公室 伦敦 随便到我的脚本 讨厌的网址 db db pl 伦敦办事处 无论什么 我希望浏览器 url 很好 但使用 301 重定向则不然 所以我尝试使用 RewriteRule 但
  • 现在采用 HTML 5 进行网站重新设计有何优点和缺点?

    我正在对一个大型网站进行重新编写和重新设计 我一直在阅读 HTML 5 并想在采用该设计实现之前了解它的缺点 该设计需要在 A 级浏览器中工作 是的 包括 IE6 所以我想知道如何
  • 如何设置 Visual Studio 在 (Umbraco) 项目中创建 CSHTML 文件

    因此 我正在 Visual studio 中为我的 Umbraco 项目开发剃刀宏脚本 一切工作正常 但有两件事真的很烦人 如果我想创建一个新的 CSHTML 文件 最佳解决方案是复制现有文件 我没有完整的剃须刀智能感知 例如Html Ra
  • 是否可以使用 javascript 或 jQuery 进行 301 重定向?

    我正在运行 Apache 2 0 我只是想知道是否可以使用 JavaScript 或 jQuery 进行 301 重定向 我有一个 a a 标记为href到指定位置 当我单击该链接时 系统会要求我进行 301 重定向 这是为了 SEO 我正
  • 我网站的 CSS 何时会影响我的搜索引擎排名?

    起初我认为 css 绝对没有什么用处 只是当用户在浏览器中查看文档时设计文档样式 但后来我意识到搜索引擎也在索引页面中使用CSS 搜索引擎不会将内容编入索引display hidden我相信 并且严厉惩罚使用关键字堆叠的网站 用户从未见过的
  • 什么是“友好 URL”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近 在本网站和其他地方 阅读了大量有关 友好 URL 的讨论 但我不确定究竟是什么使 URL 变得 友好 以及为什么我们真正关心
  • seo - 图像和 h1

    我遇到一种情况 我想坚持使用我的徽标而不是 h1 标签的实际文本 如果我将关键字放在 alt 标签中 而不是实际编写 我会在 SEO 上受到影响吗 文本和图像同时存在更好吗 想法 div h1 a href img src logo jpg
  • URL 重写查询数据库?

    我试图了解 URL 重写的工作原理 我有以下链接 mysite com profile php id 23 我想用用户的名字和姓氏重写上面的网址 mysite com directory liam gallagher 然而 根据我读到的内容

随机推荐

  • Flask 应用程序在 Heroku 上失败:没有名为 app 的模块

    我有一个 Flask 应用程序已部署到 Heroku 但出现错误 2018 08 27T12 39 32 197715 00 00 heroku router at error code H10 desc App crashed metho
  • strtotime(PHP日期函数)的算法如何工作?

    我想知道怎么做斯特托时间 php 日期函数 工作吗 如何解析字符串像 2012 年 9 月 15 日 到时间戳 有没有更好的算法 我的目的是改变波斯语的这个功能 您可以浏览PHP的源代码 https github com php php s
  • 客户端-服务器代码应该写在一个还是两个“项目”中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经开始开发客户端 服务器应用程序 起初 我自然地在 Eclipse 中创建了两个项目 两个源代码控制存储库等 但我很快发现两者之间有一些共享
  • iPhone SDK 4 中针对多个平台

    我有一个 iPhone SDK 项目 该项目应该为模拟器和 ARM 处理器构建一个静态库 然后将两者组合成一个通用库 到目前为止 我使用的是 iPhone SDK 3 并通过为每个模拟器和一个 ARM 创建一个单独的目标 然后使用 shel
  • $广播到当前范围

    作为前言 我有一个 Ionic 应用程序通过 websocket 连接到 Node 服务器 而 Node 服务器通过 TCP 套接字连接到 C 应用程序 我有这项服务连接并提供套接字服务 但也监视nack响应 以便它可以发出警报 通知用户错
  • 从 RGB 格式的文件加载位图(无 Alpha)

    我只想加载 BMP 文件并获取 24 位 RGB 格式 或 32 位 RGB 格式 的位图对象 我尝试的所有方法都返回 PixelFormat Format32bppArgb 的位图 图像对象 当然 即使 BMP 没有 alpha new
  • 如何通过 SSH 运行 php 脚本? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个相当长的 php 脚本 每当我的互联网连接中断一秒钟时 浏览器似乎就会停止该脚本 我不能等待 8 个小时来运行我的脚本 所以我想我可以通过 s
  • “dispatch()”是什么意思/做什么,为什么当我们有 .then() 和 .catch() 时使用它

    我是 ES6 和高级 javascript 新手 我见过使用 axios http 客户端的代码示例 如下所示 axios xxx then res gt dispatch success res err gt dispatch error
  • 哪个函数在堆栈使用效率和时间方面最好

    我编写了 3 个函数来计算元素在列表中出现的次数 我尝试了各种输入并对其进行了分析 但我仍然不知道哪个函数在堆栈使用效率和时间效率方面是最好的 请帮帮我 Using an accumulator defn count instances1
  • OpenCL - 将树复制到设备内存

    我用 C 代码实现了二叉搜索树 我的每个树节点如下所示 typedef struct treeNode int key struct treeNode right struct treeNode left treeNode t 宿主建造的树
  • NSCollectionView 取消多选

    所以我现在已经对这个主题进行了相当多的调查 但还没有发现任何与之相关的有用信息 我的问题是我创建了一个 NSCollectionView 它的作用类似于图像处理程序 因此您可以在其中放置图像 一次选择一个甚至多个图像 并根据需要删除它们 选
  • 如何在redshift中生成12位唯一编号?

    我的表中有 3 列 即email id rid final id 规则rid and final id If the email id有对应的rid use rid as the final id If the email id没有对应的r
  • for循环中多个异步函数之后的NodeJS回调

    我从 mongodb 获取一个文档 其中包含一个带有该文档注释的数组 评论中是撰写评论的用户的 id 我现在需要根据用户的 id 获取用户名 但遇到了几个问题 我有以下代码 显然 它不起作用 但我希望它能让您了解我想要完成的任务 MORE
  • 找不到类 PHP

    I used 这个推特库 https github com abraham twitteroauth并收到此错误 谁能告诉我哪里出错了 ERROR Fatal error Class Abraham TwitterOAuth Config
  • joomla中如何设置默认语言

    我使用 Joomla 1 5 24 Stable 使用 JoomFish 2 2 3 发布来翻译网站 在 joomfish 语言管理器的内容语言中 我有 3 种语言 en ru 和 ro 默认设置为 ro 激活就是全部 无论浏览器语言如何
  • 如何以编程方式打开 .net 2.0。它是否正确?

    我正在尝试以编程方式打开 安装 Net 2 0 Framework视窗功能 B c Windows 7 及更高版本不允许您手动安装 net 我的客户永远无法从控制面板启用该功能 Windows 7 包含 net 2 0 但 Windows
  • 在动作组合期间访问 Play Framework 路由参数

    我有一个操作想要应用于 Play 应用程序中的多个路线 这些路由对产品执行操作 并且产品可以有多个版本 我希望我的 API 能够正常工作 以便用户可以显式指定版本 通过查询参数 如果他们没有指定版本 我们将为他们从数据库中查找最新版本并对其
  • 最大连接池是否也限制数据库的最大连接数?

    我正在使用 hikari cp 和 spring boot 应用程序 该应用程序有超过 1000 个并发用户 我已经设置了最大池大小 spring datasource hikari maximum pool size 300 当我使用查看
  • 通过socket发送wav文件

    我正在尝试通过套接字发送 wav 文件 我收到错误 TypeError must be string or buffer not instance waveFile wave open WAVE OUTPUT FILENAME rb my
  • Umbraco 7 SEO 标签

    我想在 Umbraco 中创建 SEO 标签的网站 我想知道它是如何做到的 有没有最佳实践文件或建议 我不是 SEO 专家 但希望下面的代码片段可以帮助您入门 Metadata 在页面上我添加了一些属性 如果您按照文档类型 通过继承或通过组