Monday, March 23, 2009

SEO'izing the site

Now that I have my initial keywords in order, it's time to infuse the site with SEO goodness. Based on the various best practices I've gathered (referenced at the bottom of this post), I've come up with following rules of thumb:

Title
  • "The title tag has consistently been the most important on-page SEO factor for the past few years"
  • Should contain your main keywords
  • 10-12 words in title tags
  • No more then 65-70 characters
  • Different title for each page
  • Needs to sound good since that's what users will see in the search engine results page
  • Differentiate from the other links, make people want to click it

Meta Keywords

  • Not important for Google, but Yahoo and MSN still use them
  • 10 to 20 keywords at most
  • Don't stuff with keywords that you don't have on the page, this is bad for your rankings

Meta description

  • Not overly important for rankings
  • Could be used in the description of your site in search engine results
  • No more then 160 characters

H1

  • Help ranking if it contains your main keywords
  • Can't trick Google by making an H1 tag tiny and hidden

URL
  • Try to add keywords to the URL path (not necessarily the domain)
  • Keywords in the domain aren't very important
  • To more then 2 query parameters in the URL
  • Use http://www.mysite.com/ (not mysite.com)
  • No spaces or underscores

Misc
  • Inbound links, not only help with your PageRank but also the keywords in the links
  • Keywords in the beginning of a document are much more powerful then anywhere else
  • Keywords in img alt tag are important
  • Try to keep your keywords to 3-7% of your content, otherwise it looks spammy to search engines

Putting the advice to use

Now that I have the keywords, and the best practices (above), it's finally time to update the site. As the site is very simple, with only two pages, I'll focus on the two pages separately.

empiphany
You'll notice that I end up sacrificing a lot of keyword juice and instead focus on making the site sound appealing. After playing around with a number of variations, I came to realize that my best chance at success will lie not in trying to optimize the SEO at every turn, but instead by making the site memorable, remarkable, and fun. The last thing I want to do is make the site sound spammy, and focusing on SEO exclusively will very quickly accomplish this.

It's sad to see that after all of that hard work coming up with the perfect keywords, I end up barely using them. However, I wouldn't say it was at all wasted effort. I still use the most important keywords, and I have no doubt that work will be extremely valuable through the process. Plus, at least I know what I should be using when the opportunity arises.
epiphany

Front page title
  • Was: "How to call internationally - Country calling codes made easy"
  • Now: "Insanely Simple Country Codes for International Calling"
Front page meta keywords
  • Was: None
  • Now: "country codes, international calling, country code, international dialing codes, telephone country codes"
Front page meta description
  • Was: None
  • Now: "The quickest way to get the international calling codes you need, without the hassle. Simple enter which country you're calling, and we tell you what you need to know."
Front page H1
  • Was: "Country Codes for International Calling"
  • Now: "International Country Codes, made simple"

Rest of the content...unchanged.

Results page title
  • Was: "How to call X from Y - International calling codes"
  • Now: "How to call X from Y - International country codes made simple"
Results page meta keywords
  • Was: None
  • Now: "country codes, international calling, country code, {{ from }}, {{ to }}, international dialing codes, telephone country codes"
Results page meta description
  • Was: None
  • Now: "Country codes for calling internationally from {{ from }} to {{ to }}. International country codes made insanely simple."
Results page H1
  • Was: "To call X from Y, dial:"
  • Now: Unchanged

Other thoughts

During this process, in coming to the decision that I want to focus on branding more then I want to focus on optimizing SEO, I began thinking about a new domain name for the site. "howtodialinternationally.com" doesn't have much of a ring to it. It's a great domain, and I'll certainly use it, but I'm not thinking about focusing on "simplecountrycodes.com" as the primary domain. I'm going to let this roll around for a couple days, and see if it sticks.


Great list of SEO references that I used in this process:

Getting back to SEO, focusing on keywords

I believe that the most important step to get right in any SEO effort is to come up with the right set of keywords you want to focus on. Everything you do after that initial set of keywords will sink or swim based on how well you've done this step. Down the road you'll be optimizing this list and adjusting it based on real world results, but you need a solid foundation at the outset or you risk wasting a lot of time swimming in the wrong direction.

<warning>
This post is a bit rambling, as it is basically a lot of repetition and consolidation. Nonethless, it does cover a good amount of ground in coming up with your primary SEO keywords.
</warning>

I started this process by going back to my previous due diligence to find the most important keywords and phrases I had at that point:
  • calling from
  • international code(s)
  • calling international
  • international call(s)
  • calling code(s)
  • how to call from
  • international dialing
  • dialing code(s)
  • dial international
  • international dialing codes
  • international phone calls
  • international telephone
  • call from usa
  • calling uk
This list came from some very basic research, and should be a great starting point.

Refining the keywords

Walking through a number of SEO related bookmarks I've collected over the years, I started my refining process by hitting up the Seo Book Keyword Suggestion Tool. Plugging in the above keywords gave me some new keywords to consider:
  • telephone country codes
  • country code lookup
  • country code(s)
  • international dialing codes
  • international calling codes
  • country calling codes
Next up I ran all of the above keywords through the Free Keyword Suggestion Tool from Wordtracker. At this point I began to break out the single plural and singular cases (e.g. code vs. codes). After this process, I now have this as my definitive list of keywords (the number of estimated searches in parentheses):
  • country codes (441)
  • international dialing codes (236)
  • telephone country codes (182)
  • country code lookup (139)
  • country code (128)
  • international calling codes (118)
  • international calling (101)
  • list of country codes (68)
  • international dialing (65)
  • country phone codes (60)
  • how do i make an international phone call (58)
  • country calling codes (56)
  • international country codes (56)
  • country calling codes (55)
  • international telephone codes (45)
I also signed up for a free 7 day trial of the paid Wordtracker to see how those results differed, which you can see below:


It turned out that the results I got (for my specific case) were very similar to the free version. There's a lot more you can do with the paid version, in maintaining your and tracking your data, but in my case this won't be necessary for a while. I was also happy to see that these results were very similar to the results from the Seo Book Keyword Tool (the previous step):


Now that I had a fairly solid set of keywords, sorted in order of estimated searches, I went back to the trusted Google AdWords Keyword Tool. Assuming you can trust it, this should tell you how many searches Google is seeing for phrases you provide, and searches like it:



Plugging in every keyword I've come up with up to this point, I now have the following list, sorted by average searches per month:
  • country code (301k)
  • country codes (110k)
  • international calling (110k)
  • international call (74k)
  • international calls (74k)
  • how to call from (60k)
  • international dialing (40.5k)
  • country phone code (18k)
  • usa country code (18.1k)
  • international calling codes (14.8k)
  • international dialing codes (14.8k)
  • international dialling codes (14.8k)
  • calling country code (12.1k)
  • country telephone code (12.1k)
  • international dialing (12.1k)
  • telephone country codes (12.1k)
At this point, I went back to the the Keyword Tools over at Seo Book to see what other goodies exist for me to play with.

<digression>
You'll notice there is no science to this process. It's a lot of back and forth, trial and error, refining and further refining. In the end, it's all a crapshoot that only makes sense in reverse.
</digression>

I first tried out Trellian's Free Search Term Suggestion Tool. Running through the keywords I've gathered, I have another list to play with:
  • country codes (723)
  • country code (409)
  • international calling (389)
  • international dialing codes (295)
  • international dialling codes (234)
  • international calling codes (192)
  • international call (186)
  • international country codes (129)
  • telephone country codes (89)
  • country calling codes (64)
  • international dialing code (61)
  • usa country code (54)
  • country telephone codes (44)
  • country telephone codes (32)
  • list of country codes (14)


I then checked out Google AdWords Traffic Estimator, which really gave me no new information, other then how much I'd need to plan to spend if I were to use AdWords:


Next I tried out compete.com's free Search Analytics service to get an idea of what words are driving traffic to the competition. The conclusion from this research told me that I was mostly on target with with my keywords, though those sites are getting a lot of specialized niche searches (e.g. country codes russia). I'll focus on that down the road.

After all of this work, I've come up with two tiers of keyword phrases that I should be targeting SEO efforts at:

Tier 1:
  • country codes
  • country code
  • international calling
  • international dialing codes
Tier 2:
  • telephone country codes
  • international call
  • how to call from
Down the road

A few other things I plan to check out down the road, once the foundations are in place and I'm getting some data to play with:
Next on the agenda will be integrating these keywords into the site.

Tuesday, March 17, 2009

Design tweaks

Based on the feedback from friends and family, plus some annoyances with the design, I've spent some time tweaking the site:
  1. Added a title heading to the front page, to make it obvious what this site is all about
  2. Changed the font, spacing, and colors of various page elements to accommodate the new title heading.
  3. Change the title a bit, getting started on the SEO approach
  4. Re-did the CSS/HTML to move away from tables, and towards div's. This took the most time, as my CSS skills are not all that.
Some screenshots from the progression of the design...



Plus the results page, which now looks like...


P.S. I lost about a week on work related travel and personal matters. I hope to get back to my daily progress again.

Sunday, March 8, 2009

Alpha feedback

Friend #1
  1. Found that USA calling Philippines returned an error.
  2. Suggested having a "submit" (e.g. Lookup) button.
  3. Likes the design and simplicity, and the idea as a whole.
Friend #2
  1. Found that USA to China, and United States of America to China returned an error.
  2. Likes the general design and idea.
  3. "I think you should have a little explanation of what the site is on the first page and not rely on the domain name alone."
Friend #3
  1. "Usability can't be beat"
  2. Likes the idea as a whole, and said he assume the data is accurate.
Friend #4
  1. Wasn't sure why "Great Britain" didn't show up as an option.
  2. Liked the idea a lot.

Friend #5
  1. "If you select a country in the first bar and then try to change it (like you selected the wrong country) it doesn't seem to let you select a new country"
  2. "It would be cool if you could enter the number you have and it would tell you what you have/need. For instance, if it told you that what you had already included the area code and you needed the country code."
  3. "Planning to link it to Skype?"

Take aways
  1. There seemed to have been a bug with some of the data storage. I cleared memcache, and both China and Philippines work again. Not sure what happened exactly, but I'll be watching for this. I may want to set up some monitoring to catch this in the future.
  2. Added "USA" as an option, in addition to "United States of America"
  3. Added "Great Britain" as an option, in addition to "United Kingdom"
  4. Added a heading to the main page that hopefully makes it obvious what this page is
  5. Some GREAT ideas from Friend #5. I've added these to the backlog to consider down the road.

Alpha launch


With that simple tweet, the site is live to the world!

In reality, very few people will actually see this message. Which is a good thing...for now. The site is relatively complete, the hallway usability testing is done, the domain is set. Now the goal is to gather feedback from a slightly broader audience, while still maintaining its semi-private status, as I work on SEO and the feedback I receive at this stage.

Step 1 was to broadcast to my Twitter follower. I have very few, so I'm not too worried about it spreading too far and wide (though I wouldn't mind :). Step 2 was to email some friends and family. I put together a list of about 10-20 people and emailed them the following message:
I promise this won't take more then about 5 minutes of your time, and hopefully will be useful to you at some point.

Here's the pitch: Do you ever have to call internationally, but forget the country codes you need to use? Do you Google around looking for the info every time, trying to make sense of the random sites out there? I've created http://www.howtodialinternationally.com/ to make this process as easy as humanly possible.

What would be really helpful for me at this pooint:
1. Check out the site (http://www.howtodialinternationally.com/), play with it as if you were looking to make a call someplace.
2. Tell me what you think as a whole, whether you think you'd find this useful.
3. Note any suggestions/comments/bugs that come up as you use the site.

It's an extremely simple idea (and site), so I'm hoping this only takes a few minutes of your time.

I'm looking forward to hearing what you think!
Lenny
The things I'm looking to get out of this round of testing:
  1. General feedback on whether the idea makes sense to them, and whether or not it will be useful.
  2. Usability input. Though this is hard to get asynchronously. I plan to do more real time usability testing to improve on this.
  3. Bugs.
  4. Ideas for improvements.
Once I've gathered the feedback from this round and implemented the ideas that come out of it, the final step before launching to a broader audience will be solidifying the SEO elements. I need to finalize the keywords and phrases I plan to focus on, and update the site with the SEO tips and tricks I've collected.

P.S. I've added some new tracking to the site. I've had Google Analytics running for a while, and now I've added Clicky as well. I plan to create a future post discussing the various analytics options out there, but this becomes important only after you've actually launched.

Hallway usability testing

This point in the development cycle seemed appropriate to attempt a couple quick usability tests. The aim here was to watch someone other then myself use the site, to note any quirks that come up along the way, and especially watch for usage that I don't anticipate. Steve Krug claims that with only 5 usability tests, you'll catch the vast majority of your issues. I totally believe it.

Usability testing

First up was my fiance, Katie. I sat her down in front of my laptop, and walked her through the scenario. She's pretending that she got to the site from Google, and is looking to call Australia. Within 2 minutes the usability test was done, since the site is so simple. Nonetheless, I noted some very valuable information:
  1. My attempt to default to "United States of America" as the country of origin confused her a bit, since she slicked in the text field and saw that default text disappear. This defeated the purpose of the default option, especially since she was calling from the US. Lesson: Either find a better way to offer a default (maybe by Geo IP location, that doesn't disappear when you click it?), or don't have a default.
  2. After completing the first text field, having typed "United States of America", she pressed "Enter". This caused the entire form to submit, and since the second text field had not yet been filled out, she got back an error message saying that she entered an invalid country. Lesson: Try to disable the enter key from submitting the form when entering the origin country.
  3. Noticed that she didn't use the tab key at all. She either used the mouse to select the country from the auto-complete options, or used the enter key to submit. Lesson: Don't assume everyone will us the app the same way, be it keyboard focused or mouse focused.
  4. She liked (and more importantly understood) the "thought bubble" of additional information for the special case countries. Yay!
  5. After asking whether she thought the "Lookup" button was worth keeping, she suggested getting rid of it. Since the form submits automatically once you enter your destination country, the Lookup button only confuses the matter. Agreed!
Next up was my sister, Yelena. This test was very brief, as she was remote and ran into an issue pretty early. Nonetheless, also learned some valuable information:
  1. Running the idea by her, of why this is worth creating site for, she agreed it would be useful to her, and she would look for this information on Google. She noted that she would Google for "russia country codes" if she were attempting to call Russia. That will be valuable down the road.
  2. When attempting to use the site, it turned out she was using IE7, which I hadn't tested up to that point. As it turns out, the auto-complete was not working and she ended up submitting the page with invalid country names (e.g. Russia instead of Russian Federation)...which resulted in an error page. Lesson: Make the site work in IE7 (among other browsers).
  3. I asked her about the results page, and she said it looked great. Good news.
That's plenty to work with for now. Let's get to implementing the feedback...


Browser compatibility

Knowing the site was broken in IE7, I decided to focus on it. After a bit of struggling to figure out what IE's cryptic Javascript error messages were telling me, I found that I had a couple trailing comma's in some code I wrote. Taking care of those, plus taking the advice of the trusty W3C Validator, got the site up and running in Firefox, IE, and Safari. This process was easier then it would generally be because of the simplicity of the site, and my reliance on the always awesome (and cross-browser compliant) JQuery.

Usability of enter/tabs, and the Lookup button

I knew something was off here, but wasn't quite sure what the most intuitive solution for the user was. I knew I wanted to remove the Lookup button (though leave the option of bringing it back if I found that it's unnatural to not have submit button). I also knew that I wanted to avoid the all too easy mistake of submitting the form prematurely, while still allowing the user to submit it without clicking a button. What complicated the matter was the fact that not having a submit button in a form kept you from being able to submit the form with the enter key. So I went from submitting too easily to making it nearly impossible to submit.

After some digging around, I found a couple useful pages that led me to the ideal solution. I would capture the enter key event, and submit the form only if the user has provided the destination country. Otherwise, if they press enter while typing the origin country, I would simply tab them over to the next text field, instead of submitting the form. This way, while entering the origin country, they can either type the entire name, press enter, press tab, or click their choice. All of these options should be natural while at the same time keep them from making a mistake. That's win-win.

Miscellaneous

  1. Added a disclaimer and contact information to the bottom of the page, both the front page and the results. I want to try something novel here...having users contact me through Twitter for bugs/comments/suggestions. Haven't seen anyone try this before, so we'll see how it goes. If that doesn't work out, I'm thinking of setting up a UserVoice page.
  2. Pointed the real domain to the application. This was relatively straight forward, using the Google App Engine help docs.
HowtoDialIternationally.com is live! Check it out yourself, or view the screenshots below...





Next up is a soft beta launch.

Saturday, March 7, 2009

Solidifying the data

This site will go nowhere if the international codes are blatantly inaccurate or incomplete. It's about time I revisit the raw data to make sure it's solid, and account for all of the special cases that are bound to come up with this kind of project.

Step 1. Do some research

I started off at http://www.howtocallabroad.com/ and http://www.kropla.com/dialcode.htm (two of my main competitors as you may recall). What I found interesting off the bat is that they have a number of differences. Why is it so complicated to get an accurate list of international codes? Hopefully with this service I'm building it should become a lot easier for most people.

My original plan was to connect with a reliable data source that would let me seamlessly update any international code changes. I've come to realize that this isn't going to be easy. As a result, I've going to hope that these things don't change very often, and deal with it manually for now. To help in the effort, I've setup a Page2RSS feed for the pages http://www.kropla.com/dialcode.htm and http://www.howtocallabroad.com/codes.html. As soon as something changes on those pages, I'll get notified and I'll be able to go in and update my data on the backend. If this becomes a pain, I'll dig deeper into finding a better source of data, and maybe see if Dabble DB can assist in this process.

After reviewing the list of country codes, I've found that there are a good number of special cases. Many countries have more then one "exit code", which generally depends on your phone company. This definitely complicates matters, both the UI and the data storage on the backend. One thought I had was to punt on the special cases, and link to another site that could provide the gorry details. On second thought though, I found that these special cases aren't really that complicated and that I just had to make a few adjustments to the architecture to support them. The toughest piece will be in the design portion, but I think I can handle it.

Step 2. Make changes to the data

The following countries required adding some "additional information" to be displayed to the user, to guide them in determining what "exit code" should be used:
  • Brazil
  • Cambodia
  • Colombia
  • Finland
  • Indonesia
  • Israel
  • South Korea
  • Singapore
The list at http://www.kropla.com/dialcode.htm actually has about 16 more special case countries, but I'm not sure which list to believe. I'm going to hold off on these additional cases for now and try to confirm them offline before I got to the trouble of dealing with them. I wish I knew where I could find the definitive list.

Step 3. Make changes to the UI

Now that we have these special cases, I had to update the results page to support it. Here are some iterations (starting with the original):




(excuse the quality, not sure why these saved as jpeg)

Step 4. Next steps

Now that I'm a lot more comfortable with the raw data (though it still needs some work), I'm going to move back to the design and usability. I plan to run a couple quick usability tests to capture the most obvious issues, and then put some of the finishing touches (e.g. IE7 compatibility) as we get closer to launch.

Iterations on the design

After spending some time on due dilligence and coming up with the domain, I wanted to get back to iterating on the design. Starting with the prototype, my goals were go focus on:
  • General usability for inputing the countries
  • Playing with the font sizes and element placements
  • Have the form auto-submit once the "to" country is selected
  • Tighten up the results page
  • Add some basic SEO based on the previous research
Original prototype of the front page:



Iteration #1:

Improvements:
  • Make more obvious what the user needs to do by breaking the questions into two steps.
  • Use vertical spacing versus horizontal spacing. Will help when used on a mobile site as well.
  • Make the drop down font even bitter.

Iteration #2:


Improvements:
  • Thought that people would have a hard time scrolling through a long drop down list searching for their country. So I went with text field. What make this effective (and which cannot be seen with a simple screenshot) is autocomplete magic I added behind the scenes. As you type, the possible matches show up automatically. Note that the US is the default in the Step 1 box, which means users don't have to change anything if they are happy with that choice. I still have a concern though that this isn't obvious and they'll still want to enter USA. We'll see what usability testing shows.
  • Made the Lookup button ginormous. Not sure if I should even have a lookup button based on the next improvement, but again I'll see what usability testing shows. Used some tips from here
  • Added auto-submit once you enter your Step 2 country. As soon as you select your Step 2 country, it submits the form and takes you to the results.
  • Use some jquery magic to show some default text in input text boxes, and remove it once clicked.

Original prototype of the lookup page:


Iterations #1:

Improvements:
  • Changed the heading a bit.
  • Increased the font size of the important information, since that's all people really want.

Iteration #2:

Improvements:
  • Left aligned the heading. Something I learned from "Design for nondesigners" is to resist centering as much as possible. I think it looks better.
  • Changed the heading text to emphasise the countries involved, and make it more instruction based.

Other Improvements made (for basic SEO):
  • Make the title of the front page "International calling codes made easy"
  • Make the title of the lookup page "How to call from - International calling codes"

Still to do:
  • I'm not sure why tabbing through the page doesn't ever end up on the lookup button. I'd like to make this work so that users can tab around and submit the page, if that is more natural to them.
  • Need to text this design in IE6/7, Safari, Chrom, and Opera.
  • Need to clean up some of the Javascript and CSS.
  • Need to implement a lot more SEO elements, especially meta tags.

Wednesday, March 4, 2009

The Competition and SEO

Next on the agenda is to get a better idea of competition I'll be dealing with before launching my little idea. I generally try to subscribe to the Amazon/Bezos theory of not worrying about your competition and focusing completely on making life easier for your customer. In my case, my keys to success include a lot of SEO and very little functionality. As a result, there's only so much I can do to make the user experience better, while there is a lot I can do in helping people find the site. As such, I'm going to use this opportunity to see who I will be competing with for search result rankings, while taking notes on how they are accomplishing their high rankings. Let's go through this step by step.

Tangent: Before we begin, I should mention that there's a reason I'm focusing so much on Google. That is because Google basically has a monopoly on search engine traffic. I think any effort at this point to optimize for Yahoo or MSN or Ask.com would be a waste of time. Sad, but true. On with the show...

Step 1. Determine keywords and phrases I plan to target (at least to start)

Coming up with a solid list of target keywords and phrases is probably the most important thing you can do in any SEO effort. With miss-aligned keywords you risk wasting a lot of time and resources, working in the wrong direction for little gain. With that in mind, my first stop was Google AdWords Keyword Tool:


Having entered the all of the possible search terms and phrases I could think of that users would use when attempting to look up international calling codes, I got back the following terms (in order of popularity):
  • calling from
  • international code(s)
  • calling international
  • international call(s)
  • calling code(s)
  • how to call from
  • international dialing
  • dialing code(s)
  • dial international
  • international dialing codes
  • international phone calls
  • international telephone
  • call from usa
  • calling uk
With this list, I can now begin to understand who the competition will be, and optimizing my efforts to drive traffic from these searches. I'll also add that this list is in no way final. But it's a great start.

Step 2. See who's winning the results for these keywords (and make a list of the competition)

Doing a manual Google search for each of these terms, I end up with a very small set of consistent winners:
  1. www.countrycallingcodes.com (#1 for calling from, international codes, calling international, international call(s), calling code(s), international dialing, dialing code(s), dial international, international dialing codes, international phone calls, call from usa)
  2. www.kropla.com/dialcode.htm (#1 for international code, how to call from, international telephone)
  3. www.howtocallabroad.com (#2 for most of searches)
Just like that, we have a very useful list of the competition.

Step 3. Determine how hard it will be to win those keywords

Next I want to figure out how good a job these sites are doing at their SEO efforts, and how likely I am to unseat them. To help in this effort, I used a number of online services that give you insight into this very thing (for www.countrycallingcodes.com):
  1. website.grader.com: This tool gives you a high level grade on the SEO efforts of the site. It got an 84/100. Not bad, but at least it isn't in the 90's.
  2. SEOmoz Linkscape: Told me the site has 70k links pointing to the domain, spread across nearly 2k domains. Scary.
  3. SEOmoz Term Extrator: Found that they are targeting the following keywords primarily: international, country, codes, calling codes, international calling
  4. SEOmoz Pagerank: Ouch, they've got a PageRank of 7. Not good. Found that the other two competitors (www.howtocallabroad.com and www.kropla.com) have PageRank's of 6. Good for them!
Next I looked at the number of links pointing back to each of the three competitors:
  1. Links pointing to www.countrycallingcodes.com: 1190 (including nytimes.com, crap!)
  2. Links pointing to www.howtocallabroad.com: 68 (nice)
  3. Links pointing to www.kropla.com/dialcode.htm: 321 (not bad)
Last but not least, a quick peek at the meta tags for www.countrycallingcodes.com:
  • Meta Description: "Country Codes for International long distance calling made easy! Check all Country Calling Codes and Phone Area Codes FREE. Every phone country code and area code is updated. Call from one area to another in seconds. Fast and Free!"
  • Meta Keywords: "country codes,country code,area codes,usa country code,international dialing,international calling"
I also found that www.howtocallabroad.com has no real meta tags on the front page, but they have really strong keywords and descriptions on the specific country to country pages (as does www.countrycallingcodes.com). For example, on the USA to Romania page, they have keywords specific to those countries. Sounds like they are targeting the specific niche locations, versus the generic idea of international calling codes. Genius.

Step 4. Conclusions

No doubt that www.countrycallingcodes.com is the site to beat. And it won't be easy. For god's sake, nytimes.com is linking to it! But it isn't impossible. My site will be 100x more user friendly, and maybe if nytimes.com stays in business long enough to see this to launch, I have a chance to swing them to my side.

Now that I have the due dilligence data, I need to begin to focus on actually implementing SEO best practices on my site. First I need to spend some time refreshing myself on the SEO best practices. Luckily I've saved a good set of bookmarks over the past few years. For your convenience, here's the cream of the crop:
Then once I have something in place, I'll use these tools to see how far I've come:
As a next step, I think it would be wise for me to re-focus on the actual application for a bit. Probably think about the design a bit more, fix some bugs I've found, and get it to about 90% complete. Enough of the theoretical stuff, time to go back to coding!

Tuesday, March 3, 2009

The Domain

Coming up with the domain name for a new venture is always a harrowing prospect. You can spend months finding the perfect domain, and still end up with crap. My goals for a domain name for this project were (in order of priority):
  1. Supported SEO.
  2. Easy to remember.
  3. Easy to type/spell.
I hate SEO as much as the next guy, but getting it right is going to be key to the success of this site. I want to make sure I find a domain name that helps in that effort. Also, like any new site, I want the name to be easy to remember and spell. Especially as this site gets off the ground, and Google isn't yet bringing the traffic I'm looking for, it's going to be important for users to keep this site in the back of their heads for the next time they need to make an international call. Down the road though, I'd expect 98% of traffic to come from Google.

Support SEO

I did some quick research to determine how much the domain name itself helps or hurts SEO efforts. Initially, I thought that it was very useful to have hyphen separated words in your domain to help Google break out the words in your domain. It turns out that this is a myth. In the end, the most important SEO that a domain name can give you is making it easy to remember, link to, spell, and brand. Unfortunately in the process, I registered a few hyphenated domain names (that I hope I can still use for something):
  • how-to-call-international.com
  • how-to-dial-internationally.com
Easy to remember + Easy to type/spell

My core user story revolves around a user wanting to make an international call, loading up Google.com, and searching for something like "how to dial internationally" or "how to call australia from usa". This tells me I need to have a domain name that directly associates with these concepts. To help determine what people search most often when thinking about this kind of need, I used Google AdWords Keyword Tool. I got the following:


This tells me what the most common Google searches are in this general area. This will help me most when optimizing the SEO approach later on, but for now I'm going to use this to come up with a memorable and easy to type/spell domain name.

After playing around with various ideas, and being thwarted by the registered domains, I ended up going with:
  • howtodialinternationally.com
  • howtodialinternational.com
At this point (having registered four different domain names), I'm probably going to focus on "howtodialinternationally.com" as the primary site, and use the other three as permanent redirects. It isn't perfect, but I think it'll work well to get this off the ground. I could spend another month hunting for the perfect domain, but I think once I get started and closer to launch, either something more clever may come out, or I'll stick with this.

Next steps

Now that the prototype is done and the domain is set, I'm going to do some competitive research. How ingrained are the existing services, and how hard will it be for me to unseat them as Google's #1 result? What keywords should I focus on? Where should I start? We'll soon find out.

Monday, March 2, 2009

The Prototype

Front Page:

On lookup:
I spent the better part of a day whipping out this prototype. This was a combination of trying to make sense of Python, learning the App Engine world view, and hooking up the raw data to the code. I do have to say that the App Engine getting started docs are awesome. I probably copy and pasted more code then I actually wrote (always a sign of a great programmer ;). Luckily the design was relatively easy, considering keeping it simple is key.

The Architecture

The framework is as basic as they get. User selects two countries and submits the form. I lookup the two counties chosen, determine the appropriate codes, and display them along with the standard "area code + phone number".

The only "tricky" piece is mapping the country name to the various codes. Not knowing Python very well, I had to Google around for the best approach, and how to accomplish it in Python. Ideally I'd be using a hash (or "dictionary" in Python land), but then I'd need a huge hash table somewhere in the code. To keep it simple, and to try out some of App Engine's built in API's, I decided to load up the data into memcache:

# Slurp csv lookup file and fill up memcache if we don't already have the data set
if memcache.get("United States of America") is None:
lookup_dict = csv.DictReader(open("lookup.csv"))
countries = []
for row in lookup_dict:
memcache.add(row["Country"], { "country_code" : row["Country Code"], "exit_code": row["Exit Code"] })
countries.append(row["Country"])
memcache.add("countries", countries)
I don't know of a better way yet to check whether the data is in memcache, but otherwise pretty straight forward. I create a key for each country, with it's associated country/exit codes, and create a separate list of all the available countries. Note that the "lookup.csv" file came from the Dabble DB database export I created previously.

Performing the lookup once the form is submitted is as simple as:

country_from = cgi.escape(self.request.get('from'))
country_to = cgi.escape(self.request.get('to'))
exit_code = memcache.get(country_from)["exit_code"]
country_code = memcache.get(country_to)["country_code"]

The rest of the code is basic web app framework support code that handles showing the two screens. I also took advantage of the templating support to keep the code super clean. What's nice about a simple app like this is that I can basically walk through the getting started guide and have most of the app done by the time you get to the deployment step.

The Design

Clearly the goal is to keep the UX as simple as humanly possible. This is nice since my design skills are very much lacking. Though often times keeping a UI simple is the hardest thing to do and takes decades to master. So far though, I'm pretty happy with the results.

My goal from the start is to focus on making it effortless for a user to come to the site and get the info they want. I'll probably end up putting something on the results page to drive revenue, but for now I'm leaving that alone. Since hosting is free, I can always launch without any kind of ads, and figure out the best approach down the road.

Some of the thoughts going through my head while creating the prototype design:
  1. All visitors want to know is how to call a certain country.
  2. They'll know what country they are in (I hope!), and where they want to call.
  3. They'll have the country they want to call fresh in their mind.
  4. Make it obvious what they need to do. Select where you are, and where you're calling.
  5. Default to the most common case. I'm anticipating (and designing for) the US based market first, so let's default to USA. Maybe down the road I can figure out where they are based on IP and default to that.
  6. Once they submit the page, all they need to know is the codes they need to prefix their calls with. They already know the phone number and don't want to have to type it in. Make the codes really easy to see.
  7. Make the results page bookmarkable.
  8. Remind them who they are trying to call on the results page. Though I would love to just show the number without anything else.
  9. Don't go into the theory or terminology behind what these codes mean. No one cares. They just want to make their call.
Ideas that came up as I was using the prototype:

  1. Will want to auto-submit when the second country is selected...I think.
  2. I will probably want to change the drop downs to text fields that auto-complete the country name. It's no fun searching through the list for your country.
  3. Show recent lookups by other people. Graph most popular lookups by country, time, date. This could be extremely interesting.
  4. An iPhone specific page could be useful, if the real site isn't good enough. Will have to think about how cell phone users figure out the international codes, and if that's any different usability wise. Maybe an iPhone app?
  5. Need to figure out how to show the edge cases, where the codes aren't as simple as a single number.
That's about it for now. Next up, will put some thought into the domain name, the user stories, competitive research, SEO research, and more UI design. So many things to do!

Initial Thoughts

As an engineer, I'm always tempted jump right into the code. I generally first see how far I can get in actually implementing the solution, and code until I get stuck and have to re-evaluate. This generally works really well in catching any gotchas that could kill the concept really early, and in giving me a quick impression of what I'm getting myself into. In this case, the technology will be very simple, and there are very few unknowns. So my concern turned to...what's the easiest and cheapest way for me to implement this without having to reinvent the wheel?

The Wheel

There are a number of levels of wheel here I'm trying to not re-inventing:
  1. The international calling code data
  2. The users natural tendency to look up this information
  3. The web service framework
  4. The hardware platform
  5. The online experience
Let's go through each one and how I plan to attack them.

1. The international calling code data

To solve #1, I basically needed the data that I could use to determine what calling codes and prefixes were necessary to call from any country to any other country. A few quick Google's found a few basic lists of calling codes to get started with. I knew I'd need the data in a more structured format, so I signed up for a trial account on dabbledb.com. This service is great at taking some semi-structured data online, and turning into a high structured database you can export to any number of formats. I can attest to this process being extremely easy, taking me from this to this:


Having the data in a simple Dabble DB database I was able to export it to a CSV file that I could do something with down the road.

2. The users natural tendency to look up this information

I'm going with the assumption that when users need to figure out what the international calling codes to use, they simple Google for it. I plan to go into more detail on this later, but I'm going with this as the core user story that describes the behavior I want to focus on:
I rarely make international calls and I forgot how to call a certain country. I'm going to google for something like 'how do I dial internationally' and want a quick answer to get me on my way.
My efforts will be centered around capturing the traffic that comes from queries like this, along with hopefully getting into the back of people's minds when they need this info that will lead them to the site directly. I'm going to focus on SEO here mostly, which will include a lot of analysis on what kind of search queries people use most when looking for this information.

3. The web service framework + 4. The hardware platform

A big concern at this time is cost. Going back to my keys for success, low overhead is going to be very important. Thinking through the above list, and my desire to keep things cheap, I decided to go with Google AppEngine as the hosting platform. This solves both #3 and #4 above, all for the awesome price of free! I don't anticipate going beyond the free quota anytime soon, and in the meantime I get free hosting plus an extremely powerful development platform. No better way to learn Python then to just use it (or so I hope).

5. The online experience

Online users are used to common design patterns and behaviors. I plan to focus a lot on optimizing the user experience. Making the experience "fun" is going to be key in sustaining any kind of word of mouth marketing. My plan is to focus on simplicity and "obviousness", while resisting the urge to overengineer and overthink.

Now that I've chosen my platform, I'm going to move on to a prototype.

The Spark

I'm going to kick off this blog by skipping over the profound insights that accompany most new blogs, and jump right into my fun little idea. @jowyang's tweet above made me realize I have the same exact problem, as do most people when they dial internationally. I know I always have to Google around for the crazy codes that come with dialing a foreign country, and it's never as easy as it should be. So I thought...why not create a nice single service web site to fill this gap? And in the process try to make a buck. Genious? Brilliant? Life changing? Probably not. But it's another opportunity that may lead to greater things.

My plan is simple. Create an extremely easy to use single service web site that gives you the international codes you need to dial from any country to any other country. I plan on documenting my entire development process, from initial idea (this post!), design, to prototype, to beta, to launch. In the process, I'll be documenting how I work on the SEO, the usability aspects, the business model, the technology, and everything in between. I also plan to use some social media marketing techniques to get the word out about this fun little site. I'm going to use this as a learning experience, and hopefully share some knowledge with anyone that's interested.

At this point in time, I'm not going to try to publicize this idea too widely. Not because I think it'll bring untold riches, but because it's relatively easy at this stage for others to run with it. Still, I plan to be as transparent as possible about my plans and progress throughout. With that said...

The Keys to Success
  1. Extremely easy to use UI/UX
  2. SEO (need people to find it through Google)
  3. An unobtrusive business model
  4. Low overhead
  5. Marketing
The Challenges
  1. SEO (Getting to the top of Google's results is hard)
  2. Some OK competition
  3. An unobtrusive business model
  4. Long term commitment (on my part)
  5. FOG (Fear of Google, adding this to their OneBox results)
The Opportunity
  1. About 200k searches a month (on Google alone) by people looking for this info
  2. Affiliate revenue from calling cards, VoIP, travel, books, etc.
  3. The experience
  4. The fun
  5. Helping myself find those dang international codes really easily!
The Next Steps
  1. Create a prototype
  2. Find a good domain name
  3. Put together marketing plan
  4. Tweak, test, tweak, test, launch.
  5. Repeat step 4.
I anticipate this project will take at least 6 months before I can judge whether it has potential, so my goal is to keep this idea (and blog) moving until at least that point. Here we go!