How to write a blog post that converts

As an online marketer, are you optimizing your blog posts to convert visitors into leads?

Are you making it easy for readers to share the one big idea of your post?

If you think putting a call-to-action in the right sidebar and including the many social sharing icons in each blog post is enough, you are sadly mistaken.


If you’re like 99% of people who write and publish blog posts, you write what’s on your mind and publish it to your blog. This is great if you are a casual blogger. However, if you are an online marketer where the goal of your blog is to drive traffic, leads, and sales, this is the wrong approach.

And, I have to admit, I’ve been guilty myself of taking this “Field of Dreams” approach to blogging thinking “if I publish it, they will come.”

The reality is that even if you have remarkable content, very few people will remember to come back to your blog. This is why it is so important to optimize the content, layout, and call-to-action of each blog post you write in order to get the reader to take the next step with you (subscribe to blog, watch a demo, download a how-to guide, etc).

The good news is that Derek Halpern of Social Triggers has published the exact formula for writing the perfect blog post, and I’m going to share it with you below.


So here it is, the magic formula for the perfect blog post…

By the way, this post was written using this template, so how’d I do? If you liked the post, please share it on Twitter…

Examples of Salesforce Validation Rules

I’ve recently written a couple Salesforce validation rules that I wanted to document and share for those trying to do something similar. First, let’s start with how to create a validation rule in Salesforce.


It is actually very easy to create a validation rule. Here are the steps…

  1. Click on Your Name -> Setup
  2. Under App Setup, click Customize
  3. Select at what level you want to apply a validation rule: Lead, Contact, Opportunity, etc
  4. Click Validation Rules
  5. Click New

Then to create a validation rule, you need to write a formula that if it does not validate to true, will return an error message that will then require the sales person to complete an action in order to make your rule validate to true.


In this first example, we wanted to start collecting data on opportunities that were older than 100 days. Why were the deals slipping? Budget? Infrastructure delays? Still testing our product? Just not responding? To do this, we decided to create a new field called “Deal Slip Reason”. If the “Deal Slip Reason” was blank and a sales person tried to edit/save an opportunity that had a “Close Date” of greater than 100 days after the “Create Date”, we would display a message alerting the sales person to complete the “Deal Slip Reason” field.

Here’s the validation rule that we used:

CloseDate – DATEVALUE(CreatedDate) > 100,
ISBLANK(TEXT( Deal_Slip_Reason__c ))


Another piece of data that we wanted to collect was the “Demo VDIO Phase” of any prospective leads that were being converted to a contact/opportunity . This meant that we needed to first validate that the “Partner” field was either blank or “N/A” as we didn’t want to ask this question if reseller partners or strategic partners were being converted this this demo phase is irrelevant to them. Next, we only wanted to apply this rule to those that were being converted and the “Demo VDI Phase” field was blank. So, here’s the complete rule we used:

OR (ISBLANK(TEXT(Partner__c)) && IsConverted && ISBLANK(TEXT(Demo_VDI_Phase__c)), TEXT(Partner__c) = “N/A”) && IsConverted && ISBLANK(TEXT(Demo_VDI_Phase__c))

Hopefully these examples of a couple of the Salesforce validation rules that I have written will help you to write some of yours. As I write more rules, I will be sure to update this post.

How To Put a Label Inside of an HTML Text Box

In this post I am going to show you a relatively basic trick in the world of web development and web design, but has a big impact on the design and usability of your web forms. This post will explain how to put the label inside of an HTML text box and then have it appear and reappear based on if the user click inside or outside of the text box.


Here is a text box with this code implemented. Notice that when you click on the text box the “Click Here to Test” text goes away and you can type. When you then click outside of the text box the “Click Here to Test” text then reappears.


From the following code you can probably pretty easily see how this is implemented. The “onclick” and “onblur” attributes are the pieces of code that you will want to edit.

How to record a side-by-side Skype conversation

For a recent project I am working on, I needed to figure out how to 1.) Record a Skype conversation, and 2.) Edit and produce the Skype conversation as a video so that the two pictures were side-by-side. Here is a summary of my research and a step-by-step breakdown of how to accomplish this…


Download VodBurner. VodBurner is a Skype plugin that will allow you to record the Skype conversation and then edit it right in the program as well. VodBurner will allow you to create a side-by-side recording of the conversation and when you go to produce the video it even has a checkbox that will allow you to export just the audio separately if you want to make it available in addition to the video on your website.


Download Ecamm’s Call Recorder and ScreenFlow. Ecamm is obviously used to record your call and ScreenFlow is used to edit it. Using these two pieces of software will allow you to produce a side-by-side recording.

Hopefully you find this post helpful and if you have any other software or ways to improve this process, please post it as a comment.

How to Disable Tracking Image in Salesforce Emails

When you send an email from Salesforce a 1×1 pixel image is inserted into the email. This image is used for tracking purposes. If the image that is hosted on Salesforce’s server loads, then Salesforce knows the email has been opened and will report it as such. In theory this is great, however it does have its drawbacks.

Drawback #1: Email recipients get alerted to “Download Images”

Many email clients (specifically Microsoft Outlook and Google) are setup by default to not download any images in an email. Instead they prompt the user to “download images”. If you are sending something like a newsletter where images are expected, this is probably okay. However, if you are sending what you think is a plain text email and the recipient gets this prompt – it will probably raise some red flags. Which leads to Drawback #2…

Drawback #2: Text emails with “Download Images” alert are suspicious

Personally, anytime I get what appears to be a text email and the email asks me to download images I know it was a mass email that is being tracked. Immediately you’ve lost that personal connection with the recipient and if you are in sales that is a bad thing.

So, how do you disable the tracking image in Salesforce emails?

It is actually very simple. Just follow the steps below…

1.) Go to … Your Name | Setup | Customize | Activities | Activity Settings.
2.) From there uncheck the checkbox for ‘Enable Email Tracking’

That’s it – you’re done!

How to compare two lists and delete duplicate items in Excel

I like to post useful scripts that I write/modify/find online that I use in my everyday work. This is an Microsoft Excel macro that compares two lists of data and deletes duplicate items. I mainly us this Excel macro when I am compiling email lists for campaigns. A lot of times I have to creates lists with criteria like “Send to all unconverted leads in Salesforce, but exclude those who received emails from us in our prior two campaigns.” Querying the original list is easy, but a lot of times it is difficult to query any exceptions that are needed. Most times it is just easier to grab the lists that I know i want to exclude and compare my two lists and delete duplicate items. In this post I will include the Excel macro that you should use as well as give you a little background on how it works.


Sub DelDups_TwoLists()
Dim iListCount As Integer
Dim iCtr As Integer

' Turn off screen updating to speed up macro.
Application.ScreenUpdating = False

' Get count of records to search through (list that will be deleted).
iListCount = Sheets("Sheet1").Range("A1:A10").Rows.Count

' Loop through the "master" list.
For Each x In Sheets("Sheet2").Range("A1:A3")
' Loop through all records in the second list.
For iCtr = 1 To iListCount
' Do comparison of next record.
' To specify a different column, change 1 to the column number.
If x.Value = Sheets("Sheet1").Cells(iCtr, 1).Value Then
' If match is true then delete row.
Sheets("Sheet1").Cells(iCtr, 1).Delete xlShiftUp
' Increment counter to account for deleted row.
iCtr = iCtr + 1
End If
Next iCtr
Application.ScreenUpdating = True
MsgBox "Done!"
End Sub


The script is very simple to use. Just open up Microsoft Excel and put your “Master” list in the first column of Sheet1. Then put the values that you want to delete from your “Master” list in the first column of Sheet2. Next modify the ranges of each of your lists (to make this easy I have highlighted these values in red). Then simply go to “View” -> “Macros” -> “Edit” -> and copy and paste the macro script. To run the macro, go to “Run” -> “Run Sub/UserForm” or just click the green run button. That’s is! It is that simple…

How to parse Google Analytics cookie to track lead source

In my previous post titled “Lead source analytics every start-up should track,” I promised to write a follow-up post that outlines how to track the following lead source details…

  • Medium (organic, PPC, referral, email, webinar, press release, etc)
  • Lead Source (Google, Yahoo, Twitter, Facebook, LinkedIn, etc)
  • Keywords (What keywords did the visitor search?)
  • Referring URL (Where did the visitor come from?)
  • Landing Page (What was the first page the visitor visited on our website?)
  • Form URL (What was the URL of the form that the user filled out where you collected this information?)

We will use a combination of techniques including parsing the cookie set by Google Analytics to save these lead source details into PHP variables. We’ll then be able to pass these variables into our lead capture forms as hidden fields, so that when a lead registers on our website or fills out any type of form, we’ll be able to track these lead source details.

Let’s get started…

First, I’m going to give you the code. This code should be included in the header of every page of your website. Hopefully your website has one PHP file that makes up the header of every page of your website. This file is usually called header.php. If you have this file, you can dump this code right into that file.

$domain = $_SERVER['SERVER_NAME'];
$domain = "." . ltrim($domain,"www.");

$info = $_COOKIE['__utmz'];
// Get rid of id stuff
$holder = split("u", $info, 2);
$string = "u" . $holder[1];
// Parse String
$ga_vars = split("|", $string);
foreach ($ga_vars as $var) {
list($key,$value) = split("=",$var);
if ($key == "utmcmd") { setcookie("Medium", $value, time()+100000000, "/", $domain); $medium = $value; }
if ($key == "utmctr") { setcookie("Keywords", $value, time()+100000000, "/", $domain); $keywords = $value; }
if ($key == "utmcsr") { setcookie("GAsource", $value, time()+100000000, "/", $domain); $gasource = $value; }

if (!isset($_COOKIE['Referer'])) {
setcookie("Referer", $_SERVER[‘HTTP_REFERER’], time()+10000000, "/", $domain);
$referurl = $_SERVER['HTTP_REFERER'];
} else { $referurl = $_COOKIE['Referer']; }

$formurl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

if (!isset($_COOKIE['LandingPage'])) {
setcookie("LandingPage", "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], time()+10000000, "/", $domain);
$landingpage = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
} else { $landingpage = $_COOKIE['LandingPage']; }

Here is a description of each variable and how they are tracked and saved…


Medium is parsed from the Google Analytics cookie. You will need to have Google Analytics installed on every page of your website in order for this to be tracked. When a visitor comes to your website, Google will drop a cookie that contains important information about that visitor. One of the variables saved in this cookie is Medium, so we parse the Google Analytics cookie and save the Medium into a variable called $medium.

Lead Source

Lead Source is also parsed from the Google Analytics cookie just like Medium. It is saved into a variable called $gasource.


Keywords are also parsed from the Google Analytics cookie. This variable will not always be set, but if the visitor comes to your website via a search engine, it will record which keywords they used to visit your website. This variable works with all the major search engines – not just Google.

Referring URL

This code records the URL that the visitor clicked through to your website with. The code saves the Referring URL in a cookie, so the original Referring URL is preserved. It is saved into a variable called $referurl.

Landing Page

This is the first page that the visitor visits on your website. Like the Referring URL, a cookie is also used to save this URL so that it is preserved. It is saved into a variable called $landingpage.

Form URL

This is the URL of the page that the visitor finally is on when they fill out the lead capture form. This variable will update as the visitor navigates your website. A cookie is not used. It is saved into a variable called $formurl.

That pretty much sums up the script. In another follow-up post, I will write about how to pass these variables into a form as a hidden field and save it into your database. Look for this post shortly…