- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个网站,我想在 Umbraco 中为其创建 SEO 标签。我想知道它是如何完成的?有什么最佳实践文件或建议吗?
最佳答案
我不是 SEO 专家,但希望下面的代码片段可以帮助您入门
在页面上我添加了一些属性。如果您按文档类型、继承或组合来做,您可以选择。我定义了以下属性。
页面标题,我希望它与页面名称有所不同。不确定它是否有任何不同 - 但我希望它能让我的文章的更多焦点词出现在页面标题或页面名称中。我放在 <head>
中的页面名称部分,页面标题作为文章/主要内容的一部分。
Page snippet,我的目标是尽可能短,并且大部分少于 160 个字符。文章中使用了页面片段,以及元数据的摘要。
页面标签,用于元数据关键字以及网站上的水平内容导航。
特色图片,虽然严格来说不是 SEO 的一部分,但作为使内容对社交媒体友好的策略的一部分很重要。
作者,可能对 SEO 很重要,我有主要作者的属性(property),作为成员属性(property),我注册了 facebook 个人资料页面。
我已经开始编写 Razor 宏,但它需要做更多的工作,但对我来说效果很好。我将它作为一个宏运行在 <head>
中部分。
@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>
}
我的站点地图应该提交给搜索引擎。宏可以是这样的:
@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)
}
}
}
关于seo - Umbraco 7 SEO 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890374/
我已经阅读了一些相关内容,但无法在任何地方找到明确的答案。所以,我想在这里问这个问题。 我正在构建一个旅游指南,其中包含大量分为标签的信息。每个选项卡都有自己的内容和关键字,我想在 SEO 中对其进行
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
显然,来自具有高网页排名的网站的链接有助于根据 SEO 对网站进行定位。我想知道如果链接“链接”到将您重定向到目标网站的网站,是否也是如此?或者爬虫会忽略重定向(通过 javascript 还是 ph
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8 年前关闭。 Improve this
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我们有一个网站 site.com,希望其他国家/地区的用户可以更快地访问该网站。想法是在每个大陆都有一个主机,并通过 GeoIP 重定向到该主机,例如:eu.site.com - 欧洲,us.site
我想将表格放在页面的页脚中,并使用主页面中的“联系”链接 作为 的 anchor . 从 SEO 的角度来看这是否合适,或者我应该放弃这个想法并坚持使用直接的联系页面?还是两者兼而有之? 最佳答案
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
我想为不同的版本设计不同的 html,但内容相同。我计划通过在选择哪个页面模板作为响应返回之前以编程方式确定请求设备来实现这一点。 我知道那里有响应式模板开发框架,但我们有意识地对走那条路不感兴趣,因
现在什么被认为是 url 结构的最佳实践? 出于某种原因,我认为在 url 末尾包含一个扩展名是一旦你进入层次结构的“最低”部分,例如 /category/sub-category/product.h
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我在同一页面 上创建了两种不同的布局(使用 Bootstrap )。一种用于移动设备,一种用于桌面设备。网站有不同的页面,结构复杂。一些 block 应该只在桌面上可见,反之亦然。 这是一个示例页面:
如果我有这样一个网站: google.com/index.html?c=123123&p=shoes SEO 将其设置为: google.com/index.html?code=123123&foot
我们有一个网站,它会向后端系统发出昂贵的调用以显示产品可用性。我想消除这些对非实际客户的页面浏览量的调用。我的第一个想法是过滤用户代理,如果请求者是蜘蛛/搜索引擎爬虫,则显示“请求可用性”或类似的消息
我的 Joomla 网站有问题。菜单项的 SEO 可以有效地工作。因此,如果我键入“www.example.com/about”之类的内容,它将起作用并显示相应的文章页面。所以这表明 SEF URL
我看了很多关于 seo 的网络教程,但我从来没有发现一些较大的网站在搜索时如何以及为什么会出现这种情况......我不知道在 quora 和 yahoo 旁边问这个问题,但没有人在那里回答......
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
与其说是问题,倒不如说是问题。如果你能分辨出谷歌机器人和浏览你网站的其他用户之间的区别,然后你加载不同的内容取决于它是一个还是另一个,谷歌是否可以找到?毕竟,他们不会派人去目视检查。 最佳答案 你说的
我是一名优秀的程序员,十分优秀!