目前,Sitecore中的“Alias”会产生多条到同一内容项的路由,在某些情况下会对SEO产生负面影响。
我正在寻找一种以编程方式检查当前Page / Item / URL / Request是否使用别名的方法。
我希望会有以下几点:
Sitecore.Web.WebUtil.IsAlias
有关如何检查别名的任何想法?
------- ------- UPDATE
这是我目前的解决方案似乎工作得很好......除非有人有更好的想法?:
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));
}
答案 0 :(得分:7)
我们过去所做的是使用别名在页面的头部设置canonical url链接。
例如,当您转到/ food时,如果/food
别名指向/news/food
,则会将<link href="http://[websiteurl]/news/food" rel="canonical" />
放入 <head>
页。
编辑:
这是另一种方式
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"]
是否已设置并显示它。
答案 1 :(得分:4)
在你的情况下,我会依赖Context.Database.Aliases.Exists(path)
。此外,在web.config中检查别名是否有效似乎是个好主意:Sitecore.Configuration.Settings.AliasesActive
。