Aux fins d'un bon classement dans les moteurs de recherche, Google continue d'accorder beaucoup d'importance aux balises de titre et de description.
La structure des Blogs est aujourd'hui basée sur l'affichage dynamique d'une liste de contenus représentés dans l'ordre chronologique inverse.
La liste des articles, en effet, peut être consultée en parcourant, via les liens de navigation, la page d'accueil, la section Catégories, les balises et la liste des mois, cela génère différentes pages en termes de contenu mais avec le même titre et la même description avec pénalisation conséquente d'une partie de Google.
Pour trouver une solution à ce problème, vous devez agir sur le fichier default.aspx.cs de BlogEngine.Net, va modifier le code et essayer d'attribuer un titre unique à chaque page et à chaque section, catégorie, accueil, balise, etc., une description de référence de courte durée, comme Google signale également une erreur les soi-disant méta descriptions courtes.
Analysons le code et voyons les modifications apportées.
Quant à la page d'accueil, j'ai dû personnaliser la balise title afin de donner à chaque page choisie dans le default.aspx un titre unique :
protected void Page_Load (expéditeur d'objet, EventArgs e) { bool DescriptionAdded = false; if (Page.IsCallback) return ; BlogEngine.Core.Page frontPage = BlogEngine.Core.Page.GetFrontPage(); if (Request.QueryString.Count == 0 && frontPage != null) { Server.Transfer(Utils.RelativeWebRoot + "page.aspx?id=" + frontPage.Id); } else if (Request.RawUrl.ToLowerInvariant().Contains("/category/")) { DisplayCategories(); DescriptionAjoutée = vrai ; } else if (Request.RawUrl.ToLowerInvariant().Contains("/author/")) { DisplayAuthors(); DescriptionAjoutée = vrai ; } else if (Request.RawUrl.ToLowerInvariant().Contains("?tag=")) { DisplayTags(); DescriptionAjoutée = vrai ; } else if (Request.QueryString["year"] != null || Request.QueryString["date"] != null || Request.QueryString["calendar"] != null) { if (Request.RawUrl.Contains ("année=")) Redirection(); else DisplayDateRange(); } else if (Request.QueryString["apml"] != null) { DisplayApmlFiltering(); } else { PostList1.ContentBy = ServingContentBy.AllContent; PostList1.Posts = Post.Posts.ConvertAll (nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); if (!BlogSettings.Instance.UseBlogNameInPageTitles) Page.Title = BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } } AddMetaKeywords(); if (!DescriptionAdded) base.AddMetaTag("description", Server.HtmlEncode(BlogSettings.Instance.Description)); base.AddMetaTag("author", Server.HtmlEncode(BlogSettings.Instance.AuthorName)); }
Pour éviter les doublons de Titre et Description, je suis également intervenu dans les rubriques Catégories, Tags, Auteurs et Date.
Voici à quoi ressemblait l'ancien code concernant catégories:
private void DisplayCategories() { if (!String.IsNullOrEmpty(Request.QueryString["id"])) { Guid categoryId = new Guid(Request.QueryString["id"]); PostList1.ContentBy = ServingContentBy.Category; PostList1.Posts = Post.GetPostsByCategory(categoryId).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); Page.Title = Category.GetCategory(categoryId).Title;
Le nouveau code, en revanche, nous permettra avec Base.AddMetaTag personnaliser la description selon la catégorie choisie et avec le Titre de la page, en plus du numéro de page choisi, pour personnaliser le titre de chaque page que nous allons faire défiler. De cette façon, nous éviterons les doublons pour la balise de titre et quelques doublons en moins pour la balise de description :
private void DisplayCategories() { if (!String.IsNullOrEmpty(Request.QueryString["id"])) { Guid categoryId = new Guid(Request.QueryString["id"]); PostList1.ContentBy = ServingContentBy.Category; PostList1.Posts = Post.GetPostsByCategory(categoryId).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); Page.Title = Category.GetCategory(categoryId).Title + " - " + BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } base.AddMetaTag("description", "Dal Blog SoulTricks, un elenco degli articoli che appartengono alla categoria " + Category.GetCategory(categoryId) + ""); } }
Même chose pour le code concernant Auteursle TagsEt la mois e année choix:
private void DisplayAuthors() { if (!string.IsNullOrEmpty(Request.QueryString["name"])) { string author = Server.UrlDecode(Request.QueryString["name"]); PostList1.ContentBy = ServingContentBy.Author; PostList1.Posts = Post.GetPostsByAuthor(author).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); Page.Title = "Gli articoli di " + Request.QueryString["name"] + " - " + BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } base.AddMetaTag("description", "Dal Blog SoulTricks, un elenco di tutti gli articoli scritti da " + Request.QueryString["name"]); } } private void DisplayTags() { if (!string.IsNullOrEmpty(Request.QueryString["tag"])) { PostList1.ContentBy = ServingContentBy.Tag; PostList1.Posts = Post.GetPostsByTag(Request.QueryString["tag"].Substring(1)).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); base.Title = " Tous les messages marqués '" + Request.QueryString["tag"].Substring(1) + "'" + " - " + BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } base.AddMetaTag("description", "Dal Blog di SoulTricks, un Elenco di Tutti gli articoli classificati con tag " + Request.QueryString["tag"].Substring(1) + ""); } } private void DisplayDateRange() { string year = Request.QueryString["year"]; chaîne mois = Request.QueryString["mois"]; string specificDate = Request.QueryString["date"]; if (!string.IsNullOrEmpty(year) && !string.IsNullOrEmpty(month)) { DateTime dateFrom = DateTime.Parse(année + "-" + mois + "-01", CultureInfo.InvariantCulture); DateTime dateTo = dateFrom.AddMonths(1).AddMilliseconds(-1); PostList1.ContentBy = ServingContentBy.DateRange; PostList1.Posts = Post.GetPostsByDate(dateFrom, dateTo).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); Page.Title = dateFrom.ToString("MMMM aaaa") + " - " + BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } base.AddMetaTag("description", "Blog a carattere sociale con news dal web, aperto a tutti coloro che vogliono condividere un loro pensiero. " + Titre + ""); } else if (!string.IsNullOrEmpty(year)) { DateTime dateFrom = DateTime.Parse(year + "-01-01", CultureInfo.InvariantCulture); DateTime dateTo = dateFrom.AddYears(1 ).AddMilliseconds(-1); PostList1.ContentBy = ServingContentBy.DateRange; PostList1.Posts = Post.GetPostsByDate(dateFrom, dateTo).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); ; Page.Title = dateFrom.ToString("aaaa") + " - " + BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } base.AddMetaTag("description", "Blog a carattere sociale con news dal web, aperto a tutti coloro che vogliono condividere un loro pensiero. " + Titre + ""); } else if (!string.IsNullOrEmpty(specificDate) && specificDate.Length == 10) { DateTime date = DateTime.Parse(specificDate, CultureInfo.InvariantCulture); PostList1.ContentBy = ServingContentBy.DateRange; PostList1.Posts = Post.GetPostsByDate(date, date).ConvertAll(nouveau convertisseur (delegate(Post p) { return p as IPublishable; })); ; Titre.Page = date.VersChaîne("MMMM d. aaaa ") +" - "+ BlogSettings.Instance.Name ; if (Request.QueryString [" page "]! =" 1 "&& Request.QueryString [" page "]! = null) {Page.Title + =" - Page "+ Request.QueryString [" page "];} base.AddMetaTag (" description "," Blog social avec des nouvelles du web, ouvert à tous ceux qui veulent partager leurs réflexions. " + Titre + ""); } else if (!string.IsNullOrEmpty(Request.QueryString["calendar"])) { calendar.Visible = true; PostList1.Visible = false; Page.Title = Server.HtmlEncode(Resources. labels.calendar) + " - " + BlogSettings.Instance.Name; if (Request.QueryString["page"] != "1" && Request.QueryString["page"] != null) { Page.Title += " - Pagina " + Request.QueryString["page"]; } base.AddMetaTag("description", "Blog a carattere sociale con news dal web, aperto a tutti coloro che vogliono condividere un loro pensiero.
Ces modifications apportées au fichier default.aspx.cs vous permettent d'avoir des titres uniques pour chaque page tandis qu'en ce qui concerne la description, vous n'avez l'unicité que pour les sections individuelles (Accueil, Catégories, Tags, Auteurs, Dates).
Avec quelques modifications supplémentaires, il est également possible de personnaliser la description de chaque page appartenant aux sections indiquées, mais avec les suggestions proposées, nous pouvons déjà obtenir les améliorations que Google souhaiterait certainement.
Ceci est le nouveau fichier zippé de default.aspx.cs (11.46 ko) pour remplacer celui que vous avez déjà à la racine de votre blog (faites toujours une sauvegarde du fichier existant au préalable).
Attention car la solution proposée a été testée avec BlogEngine.net 2.5
À la prochaine