目前,Sitecore 中的“别名”会生成指向同一内容项的多个路由,这在某些情况下可能会对 SEO 产生负面影响。
我正在寻找一种方法来以编程方式检查当前页面/项目/URL/请求是否使用别名。
我希望会有类似的东西:
Sitecore.Web.WebUtil.IsAlias
关于如何检查别名有什么想法吗?
- - - -更新 - - - -
这是我当前的解决方案,看起来效果很好......除非有人有更好的想法?:
protected bool IsAlias
{
get
{
string fullPath = LinkManager.GetItemUrl(Sitecore.Context.Item);
return !HttpContext.Current.Request.RawUrl.StartsWith(fullPath, StringComparison.OrdinalIgnoreCase);
}
}
------ 更新 2 ------
这是基于 Yan 建议的可行解决方案。我不相信 Sitecore.Context.Database.Aliases.GetTargetUrl() 从 Sitecore 6.4.1 开始工作。所以我不得不临时凑合一下。
if (Sitecore.Configuration.Settings.AliasesActive &&
Sitecore.Context.Database.Aliases.Exists(HttpContext.Current.Request.RawUrl))
{
const string format = "<link rel=\"canonical\" href=\"{0}://{1}{2}\"/>";
Item targetItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Database.Aliases.GetTargetID(HttpContext.Current.Request.RawUrl));
return String.Format(format, HttpProtocol, HttpContext.Current.Request.Url.Host, LinkManager.GetItemUrl(targetItem));
}
我们过去所做的是使用别名来设置规范网址页面头部的链接。
例如,如果您有/food
别名指向/news/food
当你去 /food 你会放<link href="http://[websiteurl]/news/food" rel="canonical" />
in the <head>
页面的。
EDIT:
这是另一种方法
public class AliasResolver : Sitecore.Pipelines.HttpRequest.AliasResolver
{
public override void Process(HttpRequestArgs args)
{
base.Process(args);
if (Context.Item != null)
{
args.Context.Items["CanonicalUrl"] = Context.Item.GetFullUrl(args.Context.Request.Url);
}
}
}
然后在你的标题控件中你需要做的就是检查是否HttpContext.Current.Items["CanonicalUrl"]
设置并显示它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)