I recently tried a tactic of writing for just search engine traffic that failed and increased my bounce rate so I’ve decided to correct my mistake and write more for people instead of search engines and decrease my bounce rate. Lately I’ve ended up with a really high bounce rate while writing for search engine traffic that I’m not too happy about, yes the traffic went up while I was writing for search engines but so did my bounce rate and I’m sure I made some really unhappy people in the process. Before this realization I was writing for both search engines and people but in separate ways instead of subtly integrating the two tactics into one article I was writing multiple search engine articles and less of the content articles. Using these difference tactics resulted in a high bounce rate and less click though.
Awhile back I wrote a few post on this blog and a few others that targeted some frequently searched terms not thinking the whole thing though I wrote and posted some content without thinking about what my goals where. Not having a good goal is great if you want your bounce rate to go up. Yes my search engine traffic doubled but so did my bounce rate with it. Having a high bounce rate made me stop and think about what my goals where. Yes I want more traffic but at what costs, writing for search engines alone is a waste of time, all it did was increase my traffic and annoy some interested readers. All the pages I wrote for specific search terms where junk if someone was to read them. I did provide good content on other posts but they were never seen because of the poorly worded content on the search engine targeted posts that forced my readers to move on. If the visitor coming from a specific search term doesn’t like the content there reading, the visitor will leave right away I found this out first hand and have now made a decision to change that by structuring my blog how I would a normal website, write content for people not search terms, adding graphics and content that would keep visitors interested not just search terms that attract search engine traffic.
My first task in decreasing my bounce rate is writing good content for people and then search engines. My second task is to organize my blog like an average website. All good websites have a natural flow to them a flow that if done right will decrease my bounce rate and increase my click though rate. I’m going to accomplish this by adding hierarchical page lists and hierarchical category lists that will provide better organization for my readers. These features are very common on good websites and I’ve added them to almost all websites I’ve done in the past. It just simply slipped my mind when I started blogging.
Correcting my website design and content tactics
The first question that comes to mind is am I writing for people or search engines?
Well the answer to that is simple and complex at the same time. I have to write good content for people otherwise they will leave (increasing my bounce rate) and I have write good search engine friendly content with keywords that search engines need content for. So the answer is to write content for both people and search engines at the same time always keeping my search engine content subtle enough for people reading what I wrote.
Hierarchical Page List for BlogEngine.net
For right now it will just simple indent the child page list until I find an effective solution here is the code to do this and it was actually already done inside the BlogEngine.net admin I just stripped down the code and put it into a widget.
widget.ascx
<%@ Import namespace="BlogEngine.Core"%><%@ Control Language="C#" AutoEventWireup="true" CodeFile="widget.ascx.cs" Inherits="widgets_HierarchicalPageList_widget" %><blog:HierarchicalPageList ID="HierarchicalPageList" runat="Server" />
widget.ascx.cs
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public partial class widgets_HierarchicalPageList_widget : WidgetBase
{
public override string Name
{
get { return "Hierarchical Page List"; }
}
public override bool IsEditable
{
get { return true; }
}
public override void LoadWidget()
{
// Nothing to load
}
}
HierarchicalPageList.cs
#region Using
using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.IO;
using BlogEngine.Core;
using System.Collections.Generic;
#endregion
namespace Controls
{
/// <summary>
/// Builds a Hierarchical Page List. a list of nested UL - LI - UL - LI
/// </summary>
public class HierarchicalPageList : Control
{
/// <summary>
/// Initializes the <see cref="HierarchicalPageList"/> class.
/// </summary>
static HierarchicalPageList()
{
BlogEngine.Core.Page.Saved += delegate { _Html = null; };
}
#region Properties
private static object _SyncRoot = new object();
private static string _Html;
/// <summary>
/// Caches the rendered HTML in the private field and first
/// updates it when a post has been saved (new or updated).
/// </summary>
private string Html
{
get
{
if (_Html == null)
{
lock (_SyncRoot)
{
if (_Html == null || BlogEngine.Core.Page.Pages == null)
{
HtmlGenericControl ul = BindPages();
System.IO.StringWriter sw = new System.IO.StringWriter();
ul.RenderControl(new HtmlTextWriter(sw));
_Html = sw.ToString();
}
}
}
return _Html;
}
}
#endregion
/// <summary>
/// Loops through all pages and builds the HTML
/// presentation.
/// </summary>
private HtmlGenericControl BindPages()
{
HtmlGenericControl ul = new HtmlGenericControl("ul");
foreach (BlogEngine.Core.Page page in BlogEngine.Core.Page.Pages)
{
if (!page.HasParentPage)
{
HtmlGenericControl li = new HtmlGenericControl("li");
HtmlAnchor a = new HtmlAnchor();
a.HRef = page.RelativeLink;
a.InnerHtml = page.Title;
li.Controls.Add(a);
if (page.HasChildPages)
{
li.Controls.Add(BuildChildPageList(page));
}
li.Attributes.CssStyle.Remove("font-weight");
li.Attributes.CssStyle.Add("font-weight", "bold");
ul.Controls.Add(li);
}
}
return ul;
}
private HtmlGenericControl BuildChildPageList(BlogEngine.Core.Page page)
{
HtmlGenericControl ul = new HtmlGenericControl("ul");
ul.Attributes.Add("class", "childList");
foreach (BlogEngine.Core.Page cPage in BlogEngine.Core.Page.Pages.FindAll(delegate(BlogEngine.Core.Page p)
{
//p => (p.Parent == page.Id)))
return p.Parent == page.Id;
}))
{
HtmlGenericControl cLi = new HtmlGenericControl("li");
cLi.Attributes.CssStyle.Add("font-weight", "normal");
HtmlAnchor cA = new HtmlAnchor();
cA.HRef = cPage.RelativeLink;
cA.InnerHtml = cPage.Title;
cLi.Controls.Add(cA);
if (cPage.HasChildPages)
{
cLi.Attributes.CssStyle.Remove("font-weight");
cLi.Attributes.CssStyle.Add("font-weight", "bold");
cLi.Controls.Add(BuildChildPageList(cPage));
}
ul.Controls.Add(cLi);
}
return ul;
}
/// <summary>
/// Renders the control.
/// </summary>
public override void RenderControl(HtmlTextWriter writer)
{
writer.Write(Html);
writer.Write(Environment.NewLine);
}
}
}
My next step will be to write a Hierarchical Category List. Originally I thought I would be better off leaving the Hierarchical Category List out because I thought it would help with search engine ranking and while I still think it helps It’s just that it doesn’t look natural and I want a natural look and not something that looks like I’m keyword stuffing. Keyword stuffing is great for SEO but not for reading and I’m trying to get my bounce rate down and go for a natural look that provides more of a website look and feel with good content.