CULTURA

Cómo eliminar las metaetiquetas de título y descripción duplicadas en BlogEngine.net

Con el fin de obtener una buena clasificación en los motores de búsqueda, Google sigue dando mucha importancia a las etiquetas de título y descripción.

La estructura de los blogs de hoy se basa en la visualización dinámica de una lista de contenido representada en orden cronológico inverso.

La lista de publicaciones, de hecho, se puede consultar navegando, a través de los enlaces de navegación, la Home Page, la sección Categorías, Etiquetas y la lista de Meses, esto genera diferentes páginas de contenido pero con el mismo título y descripción con la consiguiente penalización. de parte de Google.

Para encontrar una solución a este problema, debe actuar sobre el archivo default.aspx.cs de BlogEngine.Net, yendo a modificar el código y tratando de asignar un título único a cada página y a cada sección, categoría, inicio, etiqueta, etc., una descripción de referencia de no poca extensión, como Google también reporta como error las llamadas meta descripciones cortas.

BlogEngine.net

Analicemos el código y veamos los cambios realizados.

En cuanto a la página de inicio, tuve que personalizar la etiqueta del título para darle a cada página elegida dentro de default.aspx un título único:

protected void Page_Load(object sender, 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();
			DescriptionAdded = true;
		}
		else if (Request.RawUrl.ToLowerInvariant().Contains("/author/"))
		{
			DisplayAuthors();
			DescriptionAdded = true;
		}
		else if (Request.RawUrl.ToLowerInvariant().Contains("?tag="))
		{
			DisplayTags();
			DescriptionAdded = true;
		}
		else if (Request.QueryString["year"] != null || Request.QueryString["date"] != null || Request.QueryString["calendar"] != null)
		{
			if (Request.RawUrl.Contains("year="))
				Redirect();
			else
				DisplayDateRange();
		}
		else if (Request.QueryString["apml"] != null)
		{
			DisplayApmlFiltering();
		}
		
		else
		{
PostList1.ContentBy = ServingContentBy.AllContent;
			PostList1.Posts = Post.Posts.ConvertAll(new Converter<Post, IPublishable>(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));
}

Para evitar duplicados de Título y Descripción, también intervine en las secciones Categorías, Etiquetas, Autores y Fecha..

Esto es para lo que el código antiguo Categorías:

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(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));
			Page.Title = Category.GetCategory(categoryId).Title;

El nuevo código, por otro lado, nos permitirá con Base.AddMetaTag para personalizar la descripción según la categoría elegida y con la Título de la página, además del número de página elegido, para personalizar el título de cada página por la que nos desplazaremos. De esta forma evitaremos duplicados para la etiqueta de título y algunos duplicados menos para la etiqueta de descripción:

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(new Converter<Post, IPublishable>(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 Informarea, un elenco degli articoli che appartengono alla categoria " + Category.GetCategory(categoryId) + "");

		}
	}

Lo mismo ocurre con el código con respecto a Autores, I Etiquetas, y el mes es año elegido:

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(new Converter<Post, IPublishable>(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 Informarea, 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(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));
			
			base.Title = " All posts tagged '" + 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 Informarea, un elenco di tutti gli articoli classificati con tag " + Request.QueryString["tag"].Substring(1) + "");
		}
	}

	private void DisplayDateRange()
	{
		string year = Request.QueryString["year"];
		string month = Request.QueryString["month"];
		string specificDate = Request.QueryString["date"];

		if (!string.IsNullOrEmpty(year) && !string.IsNullOrEmpty(month))
		{
			DateTime dateFrom = DateTime.Parse(year + "-" + month + "-01", CultureInfo.InvariantCulture);
			DateTime dateTo = dateFrom.AddMonths(1).AddMilliseconds(-1);
PostList1.ContentBy = ServingContentBy.DateRange;
			PostList1.Posts = Post.GetPostsByDate(dateFrom, dateTo).ConvertAll(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; }));
			Page.Title = dateFrom.ToString("MMMM yyyy") + " - " + 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. " + Title + "");
		}
		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(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; })); ;
			Page.Title = dateFrom.ToString("yyyy") + " - " + 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. " + Title + "");
		}
		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(new Converter<Post, IPublishable>(delegate(Post p) { return p as IPublishable; })); ;
			Page.Title = date.ToString("MMMM d. yyyy") + " - " + 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. " + Title + "");
		}
		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. " + Title + "");
		}
	}
}

Estos cambios en el archivo default.aspx.cs le permiten tener títulos únicos para cada página, mientras que en lo que respecta a la descripción, tiene la unicidad solo para las secciones individuales (Inicio, Categorías, Etiquetas, Autores, Fechas).

Con algunos cambios más también es posible personalizar la descripción de cada página perteneciente a las secciones indicadas, pero con las sugerencias propuestas ya podemos conseguir esas mejoras que sin duda le gustaría a Google.

Este es el nuevo archivo comprimido de default.aspx.cs (11,46 kb) para reemplazar el que ya tienes en la raíz de tu blog (siempre haz primero una copia de seguridad del archivo existente).

Atención porque la solución propuesta ha sido probada con BlogEngine.net 2.5

Hasta la próxima

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar