Start Your Own Business or Grow an Existing One

Hundreds of step-by-step video tutorials and tools show you how to find profitable markets, get product ideas, source the best products to sell, build profitable websites easily, and drive qualified traffic. Plus, discover how to outsource it all.

Everything you need to start or grow your own highly profitable web business — regardless of size or model.

  • 1,000s of ready-to-sell products
  • Ideal for any skill level or business
  • Learn anywhere, anytime, 24/7
  • Use it risk-free for a full 30 days

Want More? Click Here For Details »


How to Make Salesletters Interactive

How to Make Salesletters Interactive

Buy key on a white computer keyboard with clipping pathIn The Death of The Saleslet­ter, I talked about hid­ing con­tent so it could open up based on a user’s actions and thereby per­son­al­iz­ing the saleslet­ter, dynam­i­cally, on the fly.

You can hide con­tent on the same sales page, mak­ing the page look shorter and less intim­i­dat­ing. And only desired con­tent appears depend­ing on a user’s choices.

What does using this tac­tic help to do?

In some cases, peo­ple break saleslet­ters down into var­i­ous pages, and add links to them in the let­ter. I don’t rec­om­mend this with long-​​copy saleslet­ters. Tra­di­tion­ally, I rec­om­mend that the extra con­tent opens up in a pop-​​up win­dow instead, as to not distract.

But with this tac­tic, and other than the poten­tial for per­son­al­iza­tion, which is its biggest ben­e­fit, it means that peo­ple read­ing a saleslet­ter don’t have to be both­ered by…

  1. Open­ing up annoy­ing pop-​​ups;
  2. Being dis­tracted such as open­ing another page, where you run the risk of them never com­ing back to the saleslet­ter or, worse yet, come back but hav­ing lost the momen­tum they’ve gained by read­ing to that point;
  3. Or being intim­i­dated by the appear­ance of a v-​​e-​​e-​​e-​​r-​​r-​​r-​​r-​​y long let­ter when they really don’t need all of it, which may lose read­ers before they even begin reading.

This process, called “tog­gling”, is done with a sim­ple bit of javascript code and CSS.

Essen­tially, you insert the con­tent you wish to hide between two <div></div> tags in the HTML code, and make it hid­den using CSS (i.e., “cas­cad­ing style sheet”).

When peo­ple click on a link, the con­tent “unhides” and opens up on the same page. The link doesn’t have to be near the con­tent. It can be any­where on the same page.

Links are not the only trig­gers, either.

If the user per­forms any kind of action, whether it’s click­ing a link or an image, scrolling to a spe­cific area of the page, watch­ing a video or audio, or press­ing a form but­ton (like a sub­mit, check­box or radio but­ton, for exam­ple), it can still work the same.

Admit­tedly, I’ve seen some truly cre­ative, out-​​of-​​this-​​world ways of apply­ing this. I call them “smart saleslet­ters.” But this tac­tic is just a very basic way of doing it.

And it won’t work on javascript-​​disabled browsers — I’ve seen slick Flash saleslet­ters accom­plish this bet­ter. But it will work on 98% of browsers out there, if not more.

Keep in mind, more and more browsers have pop-​​up block­ers than they do have their javascript dis­abled. So this tech­nique is the lesser of two evils.

Bot­tom line, tog­gling con­tent as a basic way of inter­ac­tion is really sim­ple and pos­si­bly the eas­i­est way to make read­ers inter­act with salesletters.

But granted, not every­one is a techie. I’m cer­tainly not. So to help you, here’s some cod­ing and a bit of a tuto­r­ial to help you. (And what fol­lows is just a basic exam­ple I copied from some tuto­ri­als avail­able online. There are tons of these out there.)

If you have a basic under­stand­ing of HTML, this will be rel­a­tively easy. First, add a bit of javascript code in the page’s HTML <head> tags (just before the clos­ing </​head> tag):

<script language="javascript">
function showHide(element) {
if (document.getElementById) {
// W3C standard
var style2 = document.getElementById(element).style;
style2.display = style2.display ? "" : "block";
}
else if (document.all) {
// old MSIE versions
var style2 = document.all[element].style;
style2.display = style2.display ? "" : "block";
}
else if (document.layers) {
// Netscape 4
var style2 = document.layers[element].style;
style2.display = style2.display ? "" : "block";
}
}
</script>

Then, you add the style inside the page’s head tags or in your CSS stylesheet, if you’re using an exter­nal CSS file to man­age all your styles, which hides the content:

div#hiddenContent {display: none;}

If you’re adding it directly to the web page, place this in between your <style> tags, inside the <head> tags as well. So the whole thing would look some­thing like this:

<script language="javascript">
function showHide(element) {
if (document.getElementById) {
// W3C standard
var style2 = document.getElementById(element).style;
style2.display = style2.display ? "" : "block";
}
else if (document.all) {
// old MSIE versions
var style2 = document.all[element].style;
style2.display = style2.display ? "" : "block";
}
else if (document.layers) {
// Netscape 4
var style2 = document.layers[element].style;
style2.display = style2.display ? "" : "block";
}
}
</script>
<style>
<!--
div#hiddenContent {display: none;}
-->
</style>

That’s the hard­est part.

Next, what you sim­ply do is wrap the con­tent you want to hide around “div” tags, and call it a name. A name is labeled “ID.” In this case, I called it “hid­den­Con­tent” so that it matches the style in your stylesheet, above. For example:

<div id="hiddenContent">
Blah, blah, blah.
</div>

Next, you need to deter­mine which link will tog­gle the con­tent. You can add this to any link on the page, like a ques­tion for instance, or to a link that specif­i­cally asks for the con­tent, such as “click here to view the testimonials.”

All you do is add a javascript call to the link that tells the page to “unhide” the con­tent placed between the “div” tags ear­lier. For instance, the link should look like this:

<a href="javascript:showHide('hiddenContent');">
Click here
</a>

And that’s it! You’re done.

Now, what if the con­tent is not directly requested in the link, and the con­tent sim­ply “opens up” when another link, for any­thing else, is clicked? Sim­ple. All you need to do is add the “onClick” string to the link of your choice.

Let’s say there’s a link to a sec­tion of the same page called “what­ever.” These care called “book­marks.” When some­one clicks on that link and jumps to that book­mark, the hid­den con­tent also opens up. Here’s an example:

<a onclick="javascript:showHide('hiddenContent');" href="#whatever">
Whatever
</a>

You can add this to any link, includ­ing graph­ics, pages, or sections.

Again, this is not lim­ited to links. You can use it with dif­fer­ent mouse actions, such as “onSub­mit,” “onMouseOver,” “OnScroll,” and oth­ers. There’s a javascript call for pretty much every mouse action a reader takes.

Plus, hid­ing and unhid­ing con­tent are not the only things you can do — you can make con­tent fly in, change (that is, unhide some con­tent while hid­ing oth­ers), appear on other pages (usu­ally using cook­ies), and much, much more.

Nev­er­the­less, here’s a great exam­ple of it in action.

An opt-​​in land­ing page I worked on for Brian Keith Voiles offers a free report. The land­ing page was already quite wordy, and ini­tially we had a link to the table of con­tents, which opened up in a sep­a­rate window.

So rather than push peo­ple away, we decided to tog­gle the con­tent on the same page. Sim­ply scoll down about halfway, below where the tes­ti­mo­ni­als are, and click on the link to the table of con­tents. When you do, it opens up on the same page.

Neat, huh?

Now, what if you have mul­ti­ple areas you wish to hide/​unhide, indi­vid­u­ally, on the same page? You don’t want all the hid­den pieces of con­tent to unhide simultaneously.

There is a way to do this.

If you are adding more than one area, then each sec­tion you wish to hide must have its own “div” with its own unique name (or ID), and its own cor­re­spond­ing link, so that the scripts can do its magic to that spe­cific block of con­tent and not the others.

In the link that will expand or con­tract the spe­cific con­tent, sim­ply pass each ID indi­vid­u­ally. That way, by click­ing on a spe­cific link, it opens its related con­tent. For example:

<a href="javascript:showHide('hiddenContent_1')">
Click here
</a>
<div id="hiddenContent_1">
Piece of content #1
</div>

And then for the other…

<a href="javascript:showHide('hiddenContent_2')">
Click here
</a>
<div id="hiddenContent_2">
Piece of content #2
</div>

And don’t for­get to add the “div” style and its appro­pri­ate ID in the stylesheet for each sec­tion (you can have as many as you wish). For example:

<style>
<!--
div#hiddenContent_1 {display: none;}
div#hiddenContent_2 {display: none;}
-->
</style>

That’s all there is to it.

But, what if you want all the tog­gled con­tent to hide or unhide with a sin­gle ges­ture, such as click­ing a sin­gle link? In other words, you click on one link, and it opens up sev­eral if not all the pieces of con­tent simultaneously?

Sim­ply, name your “div” sec­tions as above. Then add this Javascript func­tion in the “head” tags, which loops through all of the “div” tags on the same page, and calls the exist­ing “showHide” func­tion on each one that it finds:

function showHideAll() {
var cCommonDivName = "hiddenContent_";
var arrDivs = document.getElementsByTagName('div');
for(i = 0 ; i < arrDivs.length ; i++) {
if (arrDivs[ i ].id.match(cCommonDivName)) {
showHide(arrDivs[ i ].id);
}
}
}

So your HTML, in the “head” tags, would look some­thing like this:

<script language="javascript">
function showHide(element) {
if (document.getElementById) {
// W3C standard
var style2 = document.getElementById(element).style;
style2.display = style2.display ? "" : "block";
}
else if (document.all) {
// old MSIE versions
var style2 = document.all[element].style;
style2.display = style2.display ? "" : "block";
}
else if (document.layers) {
// Netscape 4
var style2 = document.layers[element].style;
style2.display = style2.display ? "" : "block";
}
}
function showHideAll() {
var cCommonDivName = "hiddenContent_";
var arrDivs = document.getElementsByTagName('div');
for(i = 0 ; i < arrDivs.length ; i++) {
if (arrDivs[ i ].id.match(cCommonDivName)) {
showHide(arrDivs[ i ].id);
}
}
}
</script>
<style>
<!--
div#hiddenContent_1 {display: none;}
div#hiddenContent_2 {display: none;}
div#hiddenContent_3 {display: none;}
-->
</style>
</script>

And you can call the func­tion like so:

<a href="javascript:showHideAll()">
Toggle everything
</a>

And don’t for­get, you can also switch them, such as hav­ing the con­tent vis­i­ble and hide it once a user clicks on the link. Sim­ply change the word “block” to “none” in the javascript, and “none” to “block” in the CSS’ “div” style.

Want to see mul­ti­ple links in action?

My friend Frank Deardruff, the cre­ator of the Ask​Data​base​.com soft­ware (a ser­vice I highly rec­om­mend, too), uses this script for his “fre­quently asked ques­tions” page.

Frank also uses it for lengthy tes­ti­mo­ni­als on his Web­mas­ter Crash Course let­ter. Scroll about halfway down to the tes­ti­mo­ni­als sec­tion, and go to the last one in the bunch.

It’s from another friend of mine, pro­fes­sional pho­tog­ra­pher Mary Maz­zullo, the lady with the cam­era in her hands. Click the “read more” link at the end of her testimonial.

(Mary, by the way, is not only the pho­tog­ra­pher we chose for our wed­ding, but also the one who took those new pic­tures of me. One of them is at the top of this website!)

Another great copy­writer and friend of mine, Ray Edwards, uses it on a let­ter he wrote for Jack Can­field. He was able to fit the FAQs into the sales let­ter but still keep the let­ter feel­ing “lighter” on copy. (Just click in the “FAQs” link at the top.)

Aside from tog­gling tes­ti­mo­ni­als, FAQs, and wordy blocks of con­tent, you can use this tech­nique in var­i­ous ways. For exam­ple, you can do it with videos. If the video starts play­ing auto­mat­i­cally, then the video will only start play­ing as the video opens up.

You will likely see more and more of this as time goes by. So keep your eyes peeled!

About the Author

Last 5 Posts By Michel Fortin

Other Related Posts


Share
Category: Articles
This post was written on Thursday, November 12th, 2009. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Your First Copywriting Client In 14 Days Or Less

Your First Copywriting Client In 14 Days Or Less

New! Discover this copywriter's personal system for getting copywriting clients in as few as 14 days. It includes both online and offline marketing strategies. Click for more »

  • Hi Michel,

    This is very interesting. I have saved your article to a word document, will definitely be using this technique!

    Fabian
    http://www.MurderYourJob.com
  • Michel,

    Once again...you prove to be a genius...

    I am definetly not a technical person, I usually outsource it.

    But you formatted this in a way, I can actually do it. Thank you.

    Joseph Ratliff
    http://www.profitpartnersconsulting.com
  • Oh yeah!

    Slick stuff, Michel.

    I love it and have already thought of different ways I can use this in my next sales letter.

    Thanks once again for posting some excellent content to one of the best blogs on the internet.
  • Great post Michel... I love the idea of keeping them on the page while still delivering them the extra content. First time I have seen this used on a salesletter.
  • Wil
    Hi Michel,

    My site has a long sales letter - while it might be okay for some, I did receive feedback from others, saying that it is a tad too long for their liking (though one of which was from the same person who bought the product).

    With the information that you have provided, at least now I know my what my options are.

    Cheers
    .
  • What a neat idea, Michel. It makes a long sales letter look less daunting. In a way, it personalizes the letter by letting the reader click on the parts she finds most interesting. Thank you for the idea.
  • Thanks Michel !

    That landing/sales page is a great example too.

    I'll send a coffee your way. Enjoy !
  • I never thought it was possible to do that. Thanks for posting.
  • Thank you to all of you who bought me a coffee! I just got myself a nice bag of Komodo Dragon coffee from Starbucks.

    :)
  • Michel,

    Thanks! This is great.

    My first test in IE works as advertised, however in FireFox is doesn't hide - so I'm looking into why...


    Ernie
  • Ernie, where's the URL? I can take a look at it...
  • I see the problem...

    You have the script pasted twice in the head tags, and the first time it's within the stylesheet where it doesn't belong. Just delete it.
  • For example, rather than what you have now:

    <style type="text/css">
    <!--
    .style16 {font-family: Georgia, "Times New Roman", Times, serif; font-size: 12pt; }
    .style82 {color: #000000}
    .style83 {
    font-family: Georgia, "Times New Roman", Times, serif;
    font-weight: bold;
    }
    .style86 {
    font-family: Tahoma;
    font-size: 28pt;
    }
    .style88 {
    font-family: Tahoma;
    font-size: 16pt;
    font-weight: bold;
    color: #330099;
    }
    .style89 {font-size: 16px}
    .style91 {font-size: 14pt}
    .style93 {
    font-size: 18;
    font-family: Tahoma;
    }
    -->
    <script language="javascript">
    function showHide(element) {
    if (document.getElementById) {
    // W3C standard
    var style2 = document.getElementById(element).style;
    style2.display = style2.display ? "" : "block";
    }
    else if (document.all) {
    // old MSIE versions
    var style2 = document.all[element].style;
    style2.display = style2.display ? "" : "block";
    }
    else if (document.layers) {
    // Netscape 4
    var style2 = document.layers[element].style;
    style2.display = style2.display ? "" : "block";
    }
    }
    </script>
    </style><style>
    <!--
    div#hiddenContent {display: none;}
    -->
    </style>
    <script language="javascript">
    function showHide(element) {
    if (document.getElementById) {
    // W3C standard
    var style2 = document.getElementById(element).style;
    style2.display = style2.display ? "" : "block";
    }
    else if (document.all) {
    // old MSIE versions
    var style2 = document.all[element].style;
    style2.display = style2.display ? "" : "block";
    }
    else if (document.layers) {
    // Netscape 4
    var style2 = document.layers[element].style;
    style2.display = style2.display ? "" : "block";
    }
    }
    </script>


    Replace it with...

    <style type="text/css">
    <!--
    .style16 {font-family: Georgia, "Times New Roman", Times, serif; font-size: 12pt; }
    .style82 {color: #000000}
    .style83 {
    font-family: Georgia, "Times New Roman", Times, serif;
    font-weight: bold;
    }
    .style86 {
    font-family: Tahoma;
    font-size: 28pt;
    }
    .style88 {
    font-family: Tahoma;
    font-size: 16pt;
    font-weight: bold;
    color: #330099;
    }
    .style89 {font-size: 16px}
    .style91 {font-size: 14pt}
    .style93 {
    font-size: 18;
    font-family: Tahoma;
    }
    div#hiddenContent {display: none;}
    -->
    </style>
    <script language="javascript">
    function showHide(element) {
    if (document.getElementById) {
    // W3C standard
    var style2 = document.getElementById(element).style;
    style2.display = style2.display ? "" : "block";
    }
    else if (document.all) {
    // old MSIE versions
    var style2 = document.all[element].style;
    style2.display = style2.display ? "" : "block";
    }
    else if (document.layers) {
    // Netscape 4
    var style2 = document.layers[element].style;
    style2.display = style2.display ? "" : "block";
    }
    }
    </script>
  • Thank you for the tutorial, I saw that already on some websites like Jack Humphrey ASC, and I was wondering how to do it.
  • Hi Michel

    Yes, this is the way I envisage sales letters will go - more interactivity. After all, this is the Internet! (I've just completed a script which personalizes streams of traffic, so I'm all for interactive sales letters) .

    Thanks for sharing the code. It doesn't seem to work on Opera, even with Javascript enabled - it just shows the full version of the text.. but I guess most surfers use IE anyway.

    Post duly bookmarked!

    Paul Hancox
    http://www.trafficpersonalizer.com
  • Paul,

    Nice to see you here!

    (I highly recommend ANY of Paul's products. His SalesPageMaster was one of the first split-testing tools I've ever used.)

    Not sure about Opera, since it has the code for W3C-compliant browsers -- I'll do a bit of snooping to see what I can come up with...
  • Thanks for the kind comments, Michel. Do you think I'd be able to use the bracketed comment as a mini-testimonial?

    I'll be testing the code on my site soon... I like the idea of using it to personalize a site. It could also be useful for those feature bullet points - maybe a "Tell Me More..." at the end of each bullet, which opens up an extra couple of paragraphs going into more detail about that feature.

    I can see the possibilities...!

    Paul Hancox
    http://www.trafficpersonalizer.com
  • Absolutely! Please do.
  • Hello Michel

    Great article! I think it will improve readability a lot.

    I'm curious for which purpose other readers will use it for? I see you can use it to hide testimonials or bullets for example, but can it be used for the following: when people come to your 30-page salesletter, it's very demotivating to see such a long text. Is it possible to use the technique to reveal more text when visitors scroll down? So it automatically shows a couple of paragraphs further down?

    Thanks, I'll certainly use the technique! Keep up the great work

    Regards

    Christof
  • Nice tutorial Michel.

    I've been using similar code to lighten my sales letter for about a month and it seems to work well. Scroll down at the bottom and check the links under "Still have questions?":

    http://www.sleeptracks.com

    I'll probably use it more extensively (and subtly) in the future.
  • @Christof:

    Yes, precisely. That's another way of doing it. I mentioned this in my article, above. There's a javascript call called "OnScroll" and placing it in specific locations. Once people reach those locations, the content opens up.

    Don't ask me the code, because I'm no geek. But I know it can be done. Here's a very simple example of how it works in general:

    http://www.java2s.com/Code/JavaScript/Event-onM...
  • Frank
    Michel,

    In reviewing my link that you mentioned in your post (http://www.websitecrashcourse.com used in Mary Mazzullo's testimonial)

    And seeing Paul's comment on Opera I HAD to check my code it seems the version of the code that I have on that page works in opera ver 9.10 your readers are welcome to visit that site and use the code if they need or want to be Opera compliant as well.

    When do you think all browsers will use the same standards?

    Thanks for your awesome articles!
  • Hi Michel,

    This is my first post at your blog, but I have been reading your great content for several months now.

    Just like to thank you for all the GREAT copywriting techniques you posted here. In fact, I am using your QUEST method which you posted recently about writing a sales letter.

    Now I know how to shorten long sales letters to get them to look more appealing. Really learnt a lot from you!

    Thanks Michel!
  • Deborah Mitchell
    This is really great article. The usability of the website is a helpful strategy on making your visitor stay. If your website have a understandable killer content and is easy to use or navigate the possibility for the visitor to stay and later purchase your product. Also your copy should have the right tone for you to persuade the costumers to buy and try your product or services.
  • Loren Woirhaye
    I guess it's a fair guess that the scripting has been removed from here because it does not work.
  • @Loren Woirhaye - Nope, it's a switch to a new blog theme, which seems to be parsing the code rather than simply writing it to the post.

    I'll try to fix it...
  • Awesome tutorial. Thanks for sharing.

    But I'm even less of a techie than you are, so my solution is much simpler: The entire long sales letter is still on one page. However, certain parts of it are tagged. Links to each section are on a side bar. When the reader clicks on a sidebar link, he jumps to that section of the sales letter.

    Otherwise, the reader can just read the entire sales letter through to the end. Some do.

    I think the sidebar makes the sales page look more like a regular website or blog and not so much of a sales letter. This can break down the usual resistance that sales pages invoke and possibly create more credibility and trust.

    What do you think?

    Lexi
  • Sure. But people skim, scan, and scroll a salesletter before determining if the letter is worth reading. Part of that is to see how long it is. Many people even watch the scrollbar on the right and see how small it is once the page is loaded to know how long it is.

    But using the tactic I mentioned above, it shortens it visually, which helps in these situations.
  • msmerle
    This post takes me back to the "short sales letter or long sales letter" debate that's been going on for years. This is a great way to have the best of both worlds on one page. Michael, you do amaze me. How do you find the time to get it all done. Maybe your next post should focus on that topic.
  • Thanks Michel!
    This definately appeals to those who prefer to browse and it does mean you can add the extra sause to your salespage without the fear of complaints about it being too long - though we all know, some will find something else to moan about.
    Always enjoy reading your blog posts Michel.
  • Nice one Michel!
    This will definately help add sauce to a salesletter without the fear of it being too long. That said, there are those who'll still find something else to moan about! :-)

    This is a great idea though and, thanks for the scripts.
  • Cheers for the code snippets! Really useful stuff. This whole interactive sales letters thing is obviously powerful but often the javascript is simply too much to bother with...
  • This is a great idea to consider, I know that when I receive emails like these I'm more likely to explore what they have to offer. I especially hate the long, boring sales letter that seems to serve no benefit to me. Being able to communicate the benefit to the reader will definitely increase the results of your sales letters.
  • bsmbahamas
    Great writer, if you don't know coding, i still think you did an excellent job of explaining.

    I've kept a copy even though i know how to do it.

    Tip: Make sure you keep snippets of code saved on your computer in a special older so you don't have to search the net all the time when you need to find the same code again.
blog comments powered by Disqus
Pinpoint Hungry And Highly Profitable Markets

Pinpoint Hungry And Highly Profitable Markets

New! Streaming video lessons show you how to identify hungry niches online and how to "read their minds!" Discover what your market wants and how to sell more to existing markets. Click for more »