Top

Building fast SEO-optimized websites

September 8, 2008 by · 2 Comments 

This tutorial is the result of my quest to find the best way to build fast, CMS-based, easy to manage, SEO friendly websites that would be well capable of generating money.

(I wanted to use the word "extra" but then why "extra"? It could very well be "main" money! The act of "generating money online" I envision as an act of easily delivering useful products or services to other people with the help of a website and being compensated for your work. The less problems or tractions that are happening during this process - the better)

The following features of WEB site building tool as well as features of final website were of the most importance:

  • Ability to quickly build fully featured website. No painstaking struggles with web building software itself is acceptable.
  • Ability to easily manage website from any internet-connected computer with any browser. In other words I want CMS (Contents Management System) based solution. No "create here and then copy there" solutions are acceptable any more.
  • Ability to clone website - duplicate your success at will!
  • Web site needs to load fast - Google spider wouldn't wait 30 seconds to read your sluggish pages and will move on.
  • SEO: Web site needs to be highly optimized for search engines and SEO-important elements and structures needs to be highly customizable.
  • Web site needs to be WEB2.0 ready. Meaning:
    • Allowing your visitors/members to contribute and share contents right on your website.
    • Having Social Media / Social Networking elements either built-in or easily added.
  • Web site needs to be perfectly suitable for online e-commerce - in other words I want to be able to build online store to sell anything.
  • Web site needs to be compatible with modern membership-based solutions (for the webmasters who wants to build membership sites)
  • Web site needs to be able to be properly indexable by spiders and able to rank high on major search engines. This of course depends on skills of webmaster, but having these skills - the solution needs to be on par.
  • Web site needs to have integrated backup facility - I had my share of defacings done by mentally challenged script kiddies and backups are a necessity of life.

What I don't care much about:

  • Obsession with CSS purity. The is no proof that CSS-based website could generate more money than table-based site. CSS - while being a wonderful concept - trying to create perfect CSS based site that works on all browsers - is an ungrateful activity. It will distract you for a long time from other creative work that other people might benefit from. Nevertheless - there are large number of religious CSS obsessive compulsive disorder communities in existence that create (or proudly copy from each other) amazingly good looking pure CSS web pages full of hacks to satisfy all flavors of unruly web browsers - and I totally respect that. If CMS of choice could generate good CSS - it's a plus. Yawn. Btw - i think Yahoo is seriously under way to change the worldwide CSS and Javascript suffering via Yahoo User Interface YUI Library.
  • Obsession with [X]HTML validation. Unfortunate reality is that Internet is full of ugly unvalidating pages that generate mind boggling amount of cash for their owners on an hourly basis. To prove my point - search for any popular moneymaking keywords on google and try to validate first 10 hits - you'll see what I mean. Again - the concept of validation has a large following - perfectionists are welcome.

Joomla

At first I went Joomla way. Joomla is an open source Contents Management System. Joomla is packed with features but having said that Search Engine Optimization was not the first priority for Joomla developers. Default URL structures of Joomla  looked just plain ugly and while some quick fix was available through admin panel - the need was to install a special add-on component to take care of redirects. Later on this component disappeared from the market to appear later on as part of commercial package of some sort. Joomla wants to be everything for everyone right from the beginning and hence it's admin panel is looking like a freshly decorated Christmas tree carrying tons of elements and features that you might not need, yet missing essentials that you likely want when building SEO optimized website. Additionally to that Joomla being pretty large and heavy CMS is not super high performing either. To customize Joomla look and feel you'd be quickly lured into paid membership sites selling $49 templates or custom consulting fees. Joomla has a huge community of faithful followers and excited community of commercial developers selling their products to faithful followers. I had my share of Joomla-related purchases and paid memberships and still ended up having my site look like 1000 of other similar looking sluggishly performing Joomla-based sites. On January 22, after long and painful pregnancy Joomla gave birth to the new major upgrade to their CMS - 1.5. By then I was heavily into WordPress-based solutions so I couldn't participate in the party. If you'd search "powered by joomla" - google will claim to find 11.3 million of pages carrying this message! This is a strong sign of huge online presence for Joomla. This also means that if someone wants to hack your Joomla-based website - you'll be easy to find. Although removing this message from your site is considered to be "not ethical" among conservative pussies.

Drupal

Then I went to Drupal. Drupal is another well-respected CMS enjoying huge following. It comes bare bones (although lately more and more features were included) and to make something useful out of it - you'll need to lurk around, read tons of documents, assemble a long list of things-to-do and things-to-get. I passed through these stages and ended up creating some sort of conglomerate of "recommended" add-ons and mods to make my new Drupal-based website perfectly SEO optimized. Along the way I actually wrote a tutorial on "How to make your Drupal site SEO friendly", describing step by step instructions. But performance of my website sucked! It was very slow. Slower than Joomla even. You may blame my cheap shared hosting account but WordPress works so fast at the same place - so I wouldn't bother argue.
Having said that I think Drupal is a great concept that makes for stable secure bare-boned system for building scalable web portals - but only for people who knows PHP and MySQL intimately. Last I checked - the consultant who knows Drupal and who knows what he is doing charges about $100/hr for the work. Unfortunately it takes too much time for an an average small business owner to create customized Drupal based website and make it do what you want.

Yahoo Merchant Accounts

Then I went to Yahoo stores. Let me say it upfront - if you are USA-based person and want to build 50,000 items high performing catalog-based no-frills online store - stop reading and go for Yahoo Stores. Yahoo have everything ready for that. Additional HUGE bonus comes in terms of trust and ranking friendliness from Google. Most Yahoo stores are apparently allocated within small group of IP addresses that Google is well aware of that. Yahoo have very strict policy on what you can sell from your store as well as what you cannot do from your hosting account. Lots of things you cannot do - hence Yahoo hosting is the last choice of hackers, spammers, lamers, script kiddies, black hatters and similar audience frowned upon by Google. What it means for you as potential Yahoo store owner - is that Google will grant you immediate trust in your intentions and content with ability to be ranked higher than your less-than fortunate competitors hosting at other hosting services. One of my test pet store was almost immediately listed on the first page of google for high volume 2 keyword target phrase.

Disadvantages of Yahoo Merchant account are including but not limited to the following:

  • Cannot do a lot of things you could of if you'd own a dedicated server or 1and1 shared hosting account. SSH access? silly question! .htaccess editing? you gotta be kidding! Custom redirects? Stay away!    - This list of limitations is likely much longer...
  • Yahoo Store editor is Yahoo's proprietary way to create online store - very awkward but does the job. They also have other ways such as "Store Builder" or some extensions for Dreamweaver.
  • Serious customizations of templates needs to be done via RTML - which is another Yahoo proprietary technology. The result of it is a limited number of people who knows it (including YOU) and it will cost you a fortune to satisfy your Yahoo Store customization urges.
  • Canadian customers are loosely supported in terms of merchant accounts. Yahoo only supports some sort of Nashville-compatible merchant accounts platform. This term is widely recognized in USA but canadian bank's reps never heard about this term. In other words - Yahoo Merchant Solution does not properly support canadians. You can still make sales via PayPal of course.
  • It's not designed to run multiple stores off single account. In other words if you want to open www.mysuperwidgets.com and your wife wants to open www.mysuperpets.com - you'll need to fork out $40/mo x number_of_stores_you_want_to_open  to have them up and running. There are braintwisting ways to get around that but I didn't even wants to know it.
  • Hard (impossible even?) to build multi-level hierarchy of web pages - all pages are created off root folder.

Having said all the bad things above - if you are in USA - most of that negatives does not apply to you. With yahoo stores you *will* enjoy rock solid secure space, lighting fast page loading, huge respect from Google search engine right up front and large community of free and commercial services available to help you launch successful online store. If you are looking for absolutely world's best help in setting up, configuring and customizing your yahoo store regardless of your level of experience - I could highly recommend Shauna Fennel's 1Choice4YourStore. I met her personally at business conference and highly admire her friendly personality, attention to details and quality of work she is doing. She offers her services commercially yet if you have a budget to start up your online business from 0 to 60 is shortest possible time - she's your one stop place for anything about Yahoo Stores.

XSite Pro

XSite Pro is a great product created by Paul Smithson. I purchased it and used it. I was pretty impressed by many features. Paul put SEO features of his product on high priority and that earned him well deserved appreciation from many customers. Did I mention that XSitePro has a strong set of SEO features and options? XSite Pro is not an online CMS though - all development has to happen on single machine and results of website development work need to be uploaded to the hosting server every time. The disadvantage of XSite Pro - is that it creates pure static portals and you need to have access to your development system to change/update/delete anything from your site. This of course carrying the advantage of these web pages being fast. In fact super fast. The added advantage of your website pages being fast is that Google will give you more ranking juice - it is well known fact that faster loading pages are favored more by Google and other search engines, spidered more often and rank higher than slower ones. Obviously google wouldn't want to put slow loading web sites high in ranks, but with static sets generated by XSitePro your site will likely fly fast even at cheap shared hosting accounts.
So if you are hosting your site on shared hosting space and do not need dynamic database driven backend - this is the great software, probably the best one available out there.
It also has great active community and excellent set of up to the point video tutorials.
For more complicated social media ready dynamic portals look for dynamic CMS-type solutions, like Semiologic's XSitePro.

A bit about WEB hosting places/spaces.

HostGator

I use Hostgator for their very fast and SEO friendly hosting space with lighting fast tech support. I haven't considered them until recently where I came across super fast loading affiliate marketing website carrying many products and images on the front page. Yet it was so fast that I asked owner where does she host it - and the answer was HostGator. I was sure she had a dedicated server - but she really surprised me saying that she only has shared hosting "baby" account with them. I signed up with them next day. Being slightly geeky - I requested and received SSH access. They have SVN installed by default (my preferred way to install/upgrade wordpress). I have to admit their support is very good. Contrary to other services it takes them only 15-30 minutes to answer/resolve your problems by email. With other hosters you're lucky to get ticket opened within 24 hrs of submission. Phone tech support, while takes some time on hold during peak hours is handled completely by local American people. No offense to my old 1AND1 service where young guy from india recently managed to resolve/answer all my questions pretty nicely. Hostgator also offers a less advertised dedicated IP address for mere $2/mo extra on any account. I think this is just amazing. All above sold me out and I closed accounts at other places in favor of hostgator. In fact I looking to move there all my domains and spaces. So if you are looking for fast and reliable service - look no further, I give them 2 thumbs up.

...and back to SEO WEB Development solutions

Semiologic Pro

This and some my other sites are using commercial WordPress theme named Semiologic Pro theme.

So what is WordPress? WordPress is an open source (read - "free") blogging software with an excellent set of features. Additionally to that it is simple, written on PHP language, it is "lightweight" and very well performing even when installed on cheap shared hosting accounts. As a blogging software it has large set of features + zillions of plugins, widgets and themes created by other people. WordPress has large following and large number of developers creating free and commercial add-ons to it.

I came across wordpress in my quest to create a simple CMS-based website where I could concentrate on quickly building my online presence and business instead of struggling with mutually incompatible WEB technologies and overcomplicated lackluster solutions.

Semiologic Pro is an excellellent "umbrella" of the latest WordPress software packaged with most useful plugins, widgets and add-ons to help you create, customize and manage full-blown CMS based website highly optimized for Search Engines and well suitable for Social Media Marketing (WEB 2.0).

This page will contain more details about my experience, tips and suggestions about Semiologic Pro for WordPress.

Semiologic Pro is good not only to build general static websites - but also fully featured online stores. Here is one of my online stores built with Semiologic and selling very specialized hardware devices -> VGA Frame Grabbers
Here's a good example of how well optimized is Semiologic Pro - based website:

  1. I registered domain on November 25-th
  2. At the end of December I put a first cut of the website (with many pages were still empty)
  3. On January 25th,  2 month anniversary of domain name I made a first $300 sale! The customer reported that he went on Google looking for specific device, found my site on the first page and proceeded with his purchase. This made me really feel excited about the powers of WordPress + extra work that was put into Semiologic Pro "umbrella" to come up with a good package suitable for money making websites.

Self hosted, self-themed WordPress sites.

Semiologic Pro theme offers you "everything at almost click of a button", but if you'd like to get a bit more customized look and feel for your blog/site then you might need to check other available themes. There are plenty of resources, free and commercial.

If you looking to create SEO friendly online magazine, sports reporting blog, business looking portal, real estate website or news portal - then Revolution Themes is the first class option to consider. Product of Brian Gardener, Revolution Themes gives you excellent quality design and top notch polished look and feel portal at a click of a button.

Additionally to large selection of high quality themes he also offer free support forum that has active and knowledgeable community of webmasters and developers. While software itself is not free - it is one of the best available collection of modern WordPress themes available.

I strongly suggest considering Revolution Themes by Brian Gardener. I use and will continue to use them on multiple portals with great success. I purchased his all-inclusive developer's option and was pleased to discover how easily they could be modified and customized for different needs.


Next Upcoming Article: Building SEO Optimized Membership sites with WordPress.

Please subscribe for an updates to be notified about new article as soon as it will be published.


Disclaimer: I've purchased and using all above products myself on more than one site with significant success. I actually purchased many more tools, software packages and services to evaluates but this article dedicated to the collection of the best tools that I could personally recommend.

How to reboot/reset/restart iPhone or iPod touch

September 1, 2008 by · Leave a Comment 

WordPress folks recently released free application that allow you to manage your WordPress blog directly from iPhone or iPod touch. This free neat app lets you write posts, upload photos, and edit your WordPress blog from your iPhone or iPod Touch. It supports WordPress 2.5.1 and higher as well as WordPress MU.

-

I downloaded it but experienced a problem where application would just close by itself right after starting up. Sincerely - it started to happen after I also downloaded a few games as well. Not sure whether different apps started to conflict with each other or iPod developed some sort of Windows-ish need-to-be-rebooted-often-to-work-properly syndrome.

-

So to fix it I removed a few games and performed the following "soft reboot" procedure:

-

Press and hold down the Sleep/Wake button and the Home button (top edge of your device) simultaneously for a few seconds. The iPhone/iPod's display will clear. Then the Apple logo appears. In a few more seconds the whole system gets back to normal. Reboot/restart is done.

-

After that my new WordPress App worked properly.

How to prevent wordpress from messing up with your rich editing tags

August 30, 2008 by · 6 Comments 

After spending countless hours fighting with wordpress changing my tags and text formatting in it's rich text editor I finally decided to create a tiny little cute plugin that makes wordpress to leave alone my HTML formatting, tags and line breaks. Essentially the source code of the whole thing is this:
function myautop ($text) { return $text; }
function mytext  ($text) { return $text; }
remove_filter ('the_content', 'wpautop');
add_filter    ('the_content', 'myautop');
remove_filter ('the_content', 'wptexturize');
add_filter    ('the_content', 'mytext');
You may download actual plugin from the link below. Just unzip, copy it into ./plugins directory, activate and enjoy. Note: to fix another big annoyance with WordPress eliminating line breaks - this is what I use to "create" line breaks that WordPress doesn't kill. In HTML mode insert this code:
<div style="margin:2em;"><span style="display:none;">-</span></div>
Advantage of this method is that you can regulate size of your "custom line break" by changing value in "margin" CSS tag. Bonus TIP: Actually I just found a better way to keep linebreaks: Advanced TinyMCE plugin seems to add lot more features to TinyMCE editor as well as has an option to stop WordPress's messing up with line breaks.
-

Download: WP-AllowTags Wordpress Plugin that allows inserting tags

Perfect Setup: Ubuntu Hardy+Nginx+MySQL5+PHP5+Wordress

August 16, 2008 by · 61 Comments 

The Perfect Setup:

Ubuntu Server 8.04.1 LTS Hardy (supported to 2013) + EngineX (NGINX) Web Server built from sources + MySQL 5 + PHP 5.
(Or LEMP )

Tested on 256MB VPS slice at SliceHost. Should work for other hardware.

From baremetal/barebone/empty fresh install of Ubuntu Server to shiny, fast and SEO-friendly WordPress Portal propelled by WP Super Cache plugin.
All configured and powered by NGinx WEB Server.
Step by step copy/paste instructions - from "zero to hero" with everything on a single page (albeit long one) and in the right order. Just what your granma was asking for!

Every time I need to quickly utilize new product or technology it always made me wonder "why don't someone came up with a simple step by step instructions on which buttons to press to make this thing work?". So instead of waiting for someone to do it this time I decided to make one myself.

After spending countless hours and days hunting for scripts, searching for clues, scrolling through misleading posts, extracting bits from articles, eliminating blubber and fluff, bugging busy geeky people for hints and getting all necessary pieces together in the right order I finally came up with this instructional post. It all boils down to step-by-step copy/paste instructions that should take you less than 1 hour to get from freshly installed Ubunty server to fully functioning, search engine optimized business-ready WordPress-powered website.

I tested it all on 256MB VPS image offered by SliceHost but the same instructions should work just just fine on any real hardware as well.
Most credits goes to excellent set of articles by PickedOnion at SliceHost plus to some more sources, acknowledged within this post.

This article assumes your username is 'jsmith' and your domain is 'mydomain.com'.

Now it's time to get our hands dirty!

Secure and tidy-up your fresh Ubuntu Server installation
  • Login as root.
  • Change root password:
    passwd
  • Add new username - yourself:
    adduser jsmith
    visudo
  • Append this line to end of file (to navigate within 'vi' editor to create next line - use these: L, $, a, <ENTER>):
    jsmith ALL=(ALL) ALL
    To save and exit do: <ESC>, :wq, <ENTER>

  • SSH configuration:
    nano /etc/ssh/sshd_config - Find
    Port 22 - and change number to something different (12345) to make hacking more difficult.
    - Set these to:
    PermitRootLogin no
    X11Forwarding no
    UsePAM no
    - Append these lines to the very end:
    UseDNS no
    AllowUsers jsmith

  • Secure slice with iptables
    iptables-save > /etc/iptables.up.rules
    nano /etc/iptables.test.rules
  • 1. Copy contents of this file -> and paste it into 'iptables.test.rules'.
    2. Change port number to your port number on this line:
    ...
    -A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
    ...
    3. Save and exit (Ctrl+O, Ctrl+X).

  • Apply new iptables rules:
    iptables-restore < /etc/iptables.test.rules
  • Save iptables rules permanently:
    iptables-save > /etc/iptables.up.rules
  • Make sure iptables rules will apply when server is rebooted as well: nano /etc/network/interfaces
  • Add new line after these 2:
    auto lo
    iface lo inet loopback
    pre-up iptables-restore < /etc/iptables.up.rules
    Save and exit.
  • Reload SSH to use new ports and configurations:
    /etc/init.d/ssh reload
  • Keep 'root' session running and open second session.
    SSH login to your slice to new port, with your new username and password:
    - Linux: ssh -p 12345 jsmith@123.45.6.78 - Windows: putty jsmith@123.45.6.78 12345
  • If you logged on successfully via your new username: 'jsmith' - you may close 'root' session now.
    If not - you still have 'root' session opened to fix problems. In the worst case - you can use web based console shell login from your manage.slicehost.com dashboard to fix issues. sudo aptitude -y install screen
  • Enter screen:
    screen Screen is the great little utility that allows your terminal session activity to keep running (say lengthy builds) even if you were cut off or disconnected. You may reenter your abandoned screen session at a later time to check progress and continue working.
    - Usage notes:
    - new screen session: screen
    - attach to existing screen session: screen -r
    - list all existing screen sessions: screen -list (output: 12045.pts-0.MENSK (Detached), etc...)
    - attach to existing screen session by number: screen -r 12045
    - detach from screen session and back to main terminal: Ctrl+A, D
    - to rename screen session from inside of it: Ctrl+A, Shift+A - and enter it's name.
    - to kill current screen session: exit or Ctrl+A
    - to kill all screen sessions: Ctrl+A,\

  • Edit .bashrc file to make terminal window a bit more helpful:
    nano ~/.bashrc
  • Append these lines to the end of it:
    export PS1="\[\e[32;1m\]\u\[\e[0m\]\[\e[32m\]@\h\[\e[36m\]\w \[\e[33m\]\$ \[\e[0m\]"
    alias ll="ls -la"
    alias a2r="sudo /etc/init.d/apache2 stop && sleep 2 && sudo /etc/init.d/apache2 start"
    alias n2r="sudo /etc/init.d/nginx stop && sleep 2 && sudo /etc/init.d/nginx start"
    alias ver="cat /etc/lsb-release"
    Save and exit.

  • Reload .bashrc to make changes active:
    source ~/.bashrc
  • Update sources: sudo aptitude update
  • Set system locale:
    sudo locale-gen en_US.UTF-8
    sudo /usr/sbin/update-locale LANG=en_US.UTF-8
  • Upgrade system now:
    sudo aptitude -y safe-upgrade
    sudo aptitude -y full-upgrade
Install PHP 5, Build Essentials and related libraries
  • Install Build essentials:
    sudo aptitude -y install build-essential
  • Install PHP with php client and without apache (one long line):
    sudo aptitude -y install php5-common php5-dev php5-mysql php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-cgi php5-mcrypt php5-curl php5-gd php5-memcache php5-mhash php5-pspell php5-snmp php5-sqlite libmagick9-dev php5-cli
  • Fix issues with imagick:
    sudo aptitude -y install make php-pear
    sudo pecl install imagick
    (Just press <ENTER> at prompt)

  • Adjust php.ini:
    sudo nano /etc/php5/cgi/php.ini Adjust memory limit to accomodate WordPress requirements:
    Find line:
    memory_limit = 16M and change it to: memory_limit = 48M

    Append to the end of this file this line:
    extension=imagick.so

  • Install MySQL server, secure it and create database for wordpress (or other dynamic web app you will be using)
    sudo aptitude -y install mysql-server mysql-client libmysqlclient15-devSecure MySQL server:
    mysql_secure_installation
  • Install subversion (best to install and upgrade wordpress is via subversion):
    sudo aptitude -y install subversion
Install Postfix to prepare e-mail capabilities for your web application
  • First - login into slicemanager at manage.slicehost.com, click "DNS" tab and "Reverse DNS".
    Replace record with: mail.mydomain.com.
  • sudo nano /etc/hostname Replace slicename with mail.mydomain.com

  • sudo nano /etc/hosts
    Replace 127.0.0.1 slicename with 127.0.0.1 mail.mydomain.com
  • Reboot slice:
    sudo reboot
  • When rebooted - check slice hostname (it must be mail.mydomain.com):
    hostname -f
  • Install dns utils and check RDNS (by using your slice's IP address)
    sudo aptitude -y install dnsutils
  • Check if RDNS propagated already:
    dig -x 123.45.6.78
    If "ANSWER SECTION" still shows old name (or anytihng other than mail.mydomain.com) - you'll have to wait until propagation will finish before proceeding.
  • sudo aptitude -y install postfix telnet mailx Select "Internet Site", and then for "System mail name:" -> "mail.mydomain.com".
  • Redirect all email destined to 'root' toward 'jsmith':
    sudo nano /etc/aliasesAppend this line to the end of file:
    root: jsmith
  • Refresh aliases database now:
    sudo newaliases
  • Edit main.cf file:
    sudo nano /etc/postfix/main.cf
    - Replace: myorigin = /etc/mailname
    - with this: myorigin = $mydomain

    - Replace this: mydestination = mail.mydomain.com, localhost.mydomain.com, , localhost
    - with this: mydestination = $mydomain, localhost.$mydomain, localhost

    - Replace this: mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    - with this: mynetworks = 127.0.0.0/8

  • Restart postfix to make changes take effect: sudo /etc/init.d/postfix restart
  • Test email sending capabilities. Run little php console prog to do it. Check if you receive email message.
    php -a
    mail ('your@email.com', "Hello from slice!", "My email setup works!");
    exit ();
  • Follow this article if you want to setup postfix to receive emails as well (opening port 25 in firewall and configuring stuff):
    But what we've done already is enough to have hosted portal with full outgoing email capabilities.
Install and configure NGINX
  • Install NGINX. Dependencies first. Check sysoev.ru website first for newer versions though.
    sudo aptitude -y install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev
    mkdir ~/sources
    cd ~/sources/
    wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz
    tar -zxvf nginx-0.6.32.tar.gz
    cd nginx-0.6.32
    ./configure --sbin-path=/usr/local/sbin --with-http_ssl_module
    make
    sudo make install
  • Start Nginx:
    sudo /usr/local/sbin/nginx
  • Navigate to your slice's IP address to test that it works: http://123.45.6.78
  • Stop Nginx:
    sudo kill `cat /usr/local/nginx/logs/nginx.pid`
  • Create NGINX init script
    sudo nano /etc/init.d/nginx Copy/paste this text into it:
    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          nginx
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts the nginx web server
    # Description:       starts nginx using start-stop-daemon
    ### END INIT INFO
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    
    
    
    
    DAEMON=/usr/local/sbin/nginx
    NAME=nginx
    DESC=nginx
    
    test -x $DAEMON || exit 0
    
    # Include nginx defaults if available
    if [ -f /etc/default/nginx ] ; then
            . /etc/default/nginx
    fi
    
    set -e
    
    case "$1" in
      start)
            echo -n "Starting $DESC: "
            start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                    --exec $DAEMON -- $DAEMON_OPTS
            echo "$NAME."
            ;;
      stop)
            echo -n "Stopping $DESC: "
            start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                    --exec $DAEMON
            echo "$NAME."
            ;;
    
      restart|force-reload)
            echo -n "Restarting $DESC: "
            start-stop-daemon --stop --quiet --pidfile \
                    /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
            sleep 1
            start-stop-daemon --start --quiet --pidfile \
                    /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
            echo "$NAME."
            ;;
      reload)
          echo -n "Reloading $DESC configuration: "
          start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
              --exec $DAEMON
          echo "$NAME."
          ;;
      *)
            N=/etc/init.d/$NAME
            echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
            exit 1
            ;;
    esac
    
    exit 0
    
  • Set it executable:
    sudo chmod +x /etc/init.d/nginx
  • Add it to the default run levels:
    sudo /usr/sbin/update-rc.d -f nginx defaults
  • Create folder layout:
    sudo mkdir /usr/local/nginx/sites-available
    sudo mkdir /usr/local/nginx/sites-enabled
  • Adjust main NGINX configuration file to look in sites-enabled folder for vhosts: sudo nano /usr/local/nginx/conf/nginx.conf Delete all contents of this file and replace it with this:
    user www-data www-data;
    worker_processes  4;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     off;
        keepalive_timeout  5;
    
        gzip  on;
        gzip_comp_level 2;
        gzip_proxied any;
        gzip_types      text/plain text/html text/css application/x-javascript text/xml application/xml
        application/xml+rss text/javascript;
    
        include /usr/local/nginx/sites-enabled/*;
    }
        

  • Create default vhost in 'sites-available' folder:
    sudo nano /usr/local/nginx/sites-available/defaultCopy/paste this text into it:
    server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
    
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    
    }
    
  • Enable vhost by creating symlink:
    sudo ln -s /usr/local/nginx/sites-available/mydomain.com /usr/local/nginx/sites-enabled/mydomain.com
  • Start NGINX:
    sudo /etc/init.d/nginx start Make sure that navigating to slice IP will show "Welcome to nginx!" default page.

  • Create layouts for domains to be served.
    sudo mkdir /home/public_html
    sudo mkdir -p /home/public_html/mydomain.com/{public,private,log,backup}
  • Setup users and groups to manage portal:
    sudo -i
    addgroup webmasters
    usermod -G webmasters jsmith
    OPTIONAL: Do it for every user who will be allowed to manage files for the portal:
    usermod -G webmasters user_2
    usermod -G webmasters user_3
    Change ownership of main web files directory:
    chown -R jsmith.webmasters /home/public_html
    chmod -R g+w /home/public_html
    Set group id to 'webmasters' for all newly created files and dirs.
    find /home/public_html -type d -exec chmod g+s {} \;
    exit
  • Create initial index.html file for the domain:
    sudo nano /home/public_html/mydomain.com/public/index.phpPaste this into the file:
    <?php echo phpinfo(); ?>        
    First - create supporting wordpress-specific configuration files. 'wordpress_params.regular' - is basic wordpress config file that allows support for nice permalinks.
    sudo nano /usr/local/nginx/conf/wordpress_params.regular...And paste into it the following contents:
      # WordPress pretty URLs: (as per dominiek.com)
      if (-f $request_filename) {
      break;
      }
      if (-d $request_filename) {
      break;
      }
      rewrite ^(.+)$ /index.php?q=$1 last;
    
    
      # Enable nice permalinks for WordPress: (as per Yawn.it)
      error_page  404  = //index.php?q=$uri;
    
    
    Save and exit.
    Next - create second version of NGinx-specific WordPress config file that allows support for nice permalinks + WP Super Cache plugin. WP Super Caching gives you extra horse power and juice to handle intense traffic and getting your portal seriously ready to be DIGG-ed.
    sudo nano /usr/local/nginx/conf/wordpress_params.super_cache...And paste into it the following contents (Credits: Matt Stevens):
    # if the requested file exists, return it immediately
    if (-f $request_filename) {
    break;
    }
    
    set $supercache_file '';
    set $supercache_uri $request_uri;
    
    if ($request_method = POST) {
    set $supercache_uri '';
    }
    
    # Using pretty permalinks, so bypass the cache for any query string
    if ($query_string) {
    set $supercache_uri '';
    }
    
    if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
    set $supercache_uri '';
    }
    
    # if we haven't bypassed the cache, specify our supercache file
    if ($supercache_uri ~ ^(.+)$) {
    set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
    }
    
    # only rewrite to the supercache file if it actually exists
    if (-f $document_root$supercache_file) {
    rewrite ^(.*)$ $supercache_file break;
    }
    
    # all other requests go to WordPress
    if (!-e $request_filename) {
    rewrite . /index.php last;
    }
    
    
    Create vhost for domain mydomain.com:
    sudo nano /usr/local/nginx/sites-available/mydomain.com...And paste into it the following contents:
    server {
    
                listen   80;
                server_name  mydomain.com;
                rewrite ^/(.*) http://www.mydomain.com/$1 permanent;
    
               }
    
    
    server {
    
                listen   80;
                server_name www.mydomain.com;
    
                access_log /home/public_html/mydomain.com/log/access.log;
                error_log /home/public_html/mydomain.com/log/error.log;
    
                location / {
    
                            root   /home/public_html/mydomain.com/public/;
                            index  index.php index.html;
    
                            # Basic version of WordPress parameters, supporting nice permalinks.
                            # include /usr/local/nginx/conf/wordpress_params.regular;
                            # Advanced version of WordPress parameters supporting nice permalinks and WP Super Cache plugin
                            include /usr/local/nginx/conf/wordpress_params.super_cache;
                            }
    
                # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
                #
                location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include /usr/local/nginx/conf/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /home/public_html/mydomain.com/public/$fastcgi_script_name;
                }
          }
       
      
    Above will append 'www' to all non-www requests - all requests for http://mydomain.com/dir/page will be redirected to -> http://www.mydomain.com/dir/page.
    As you can also see above we enabled 'wordpress_params.super_cache' settings. If for some reason you'll have problems - you may comment ' ....wordpress_params.super_cache' line out, disable wordpress WP Super Cache plugin via WordPress admin panel and uncomment '...wordpress_params.regular' settings (+restart Nginx). From my own test - they both works with or without WP Super Cache enabled and I'd definitely prefer WP Super Cache to be up and running.
  • Enable site:
    sudo ln -s /usr/local/nginx/sites-available/mydomain.com /usr/local/nginx/sites-enabled/mydomain.com
  • Making NGinx to serve PHP and make it all start automatically after system restart (Credits):
    sudo aptitude -y install libfcgi0
    cd /etc/default/
    sudo wget -O php-fastcgi http://www.mensk.com/uploads/php-fastcgi.txt
    cd /etc/init.d/
    sudo wget -O php-fastcgi http://www.mensk.com/uploads/php-fastcgi.rc.txt
    sudo chmod +x php-fastcgi
    sudo /usr/sbin/update-rc.d -f php-fastcgi defaults
    sudo /etc/init.d/php-fastcgi start
    Restart NGINX:
    n2r (or sudo /etc/init.d/nginx stop, sudo /etc/init.d/nginx start)

  • Navigate to your website: http://mydomain.com you should be redirected to http://www.mydomain.com and then see phpinfo() screen...
  • Reboot your slice and make sure that after restart everything still works (NGINX & Co restarts properly)
    sudo reboot
Install and configure WordPress + configure WP Super Cache WordPress plugin to work with NGINX
  • Install WordPress. Login to mysql console as mysql's root user: mysql -u root -p
  • Issue this command to create new username for WordPress database (replace username, password and database name with your values):
    mysql> grant all privileges on *.* to wp_user@localhost identified by "wp_pa55w0rd";
    mysql> create database wp_dbase;
    mysql> quit
  • Get WordPress files directly from SVN repository. See this great article about using subversion to install and update WordPress.
    cd /home/public_html/mydomain.com/public
    sudo rm index.php
    svn co http://svn.automattic.com/wordpress/tags/2.6 .
    mv wp-config-sample.php wp-config.php
    sudo nano wp-config.php
    Set database name, DB user name and password, Change DB prefix to something different (good security measure), save and exit.

  • Adjust permissions:
    sudo chmod -R 777 /home/public_html/mydomain.com/public/wp-content
    sudo chmod 666 /home/public_html/mydomain.com/public/wp-config.php
  • Access your site: http://www.mydomain.com/
    - Enter blog name, remember the password that wordpress gave you.
    - Login as admin/password
    - Click Users tab at upper right in admin panel
    - Click on 'admin' user
    - Change password to something secure and you'd remember.
    - Logoff, Logon again with your new password.
    - Goto Settings->Permalinks
    - Set (x) "Custom Structure" -> /%category%/%postname%/, [Save Changes], ignore WordPress warning: "You should update your .htaccess now." - it cannot find .htaccess - we are not running apache.
    - Access your blog's "About" page - and voila - it should work just fine as this: http://www.mydomain.com/about/ (instead of default ugly: http://www.mydomain.com/?p=123)
  • Download and unzip WP Super Cache plugin into '/home/public_html/mydomain.com/public/wp-content/plugins' directory. Activate it via Admin panel.
    For FTP-ing purposes I use FileZilla configured to use SFTP. (I don't elaborate on specifics of installing and activating WordPress plugins in this document).
    - Goto Plugins, activate "WP Super Cache".
    - Goto Settings->WP Super Cache and set (x) WP Super Cache Status to "ON". [Update Status].
    You'll see bunch of warnings on this page regarding "mod rewrite" rules and ".htaccess" file. Just ignore these - we are not using Apache so WP Super Cache cannot find apache specific places to write settings. We did it for WP Super Cache already inside of 'wordpress_params.super_cache' - which contains "translation" of caching rules from Apache to Nginx.
    Your WP Super Cache-ed blog should be up and running now at fullest speed.
  • Make 'wp-content' directory a bit more secure: sudo chmod -R 755 /home/public_html/mydomain.com/public/wp-content - Goto Manage->Categories. Create few categories with subcategories.
    - Goto Write->Post - create few posts and assign them to subcategory, publish, save.
    - Access your posts - and see that they all have nice SEO-friendly URLs, thanks to custom wordpress-specific setups we included in our '/usr/local/nginx/sites-available/mydomain.com' file.
    - This also works just fine with John Godley's excellent redirection plugin that supports flexible custom redirects with regular expressions.
  • Customize your theme and go wild!
Done!

Ottawa Sales Leadership Initiative – the missing link?

July 19, 2008 by · Leave a Comment 

I was interviewed recently for Ottawa Business Journal regarding newly formed local organization named Sales Leadership Initiative. The concept behind it is that Ottawa's local Technology and R&D talent is lacking selling skills and expertise - and that's what SLE will be attempting to fix. I do agree with that. "I have great idea -  let's do it" syndrome was responsible for as many startups as many failures and tons of cash burned to ashes in relatively short periods of time. We all need extra sales and marketing education. How to find potential customer, how to approach potential customer, how to educate customer, how to establish lasting mutually beneficial relationships - those are the skills that greatly help to converts idea, product, service and technology to cash.
So I hope to see great sales, marketing and educational events, speakers and materials to be available to local tech companies soon.

The Missing Link?

Although there is one thing that I didn't find anywhere on SLE website (at least at the time of writing this post) - anything about educating local techies on specifics of Internet Marketing.

I currently working for Epiphan Systems - company that markets their niche hardware products almost exclusively through the internet channels. We sell products to 70 countries all over the world. Only about half of our sales are from North America - so this made us somewhat resilient to US economic downturns and rollercoaster credit crunch rides. Without internet - we as technology company would have really hard time to do business and survive, even if we'd have the best local sales team at hands. Only about 1% of our sales coming from Ottawa and only 5% from Canada.

So, how about educating local technology companies on how to wisely use internet to propell their business and sales?{+++}

I'd love to see more Internet Marketing and Sales education available to local technology companies. This would make them stronger and make our local economy stronger.

Gleb Esman

How to get precise search volume for any keyword or phrase

July 13, 2008 by · Leave a Comment 

Imagine knowing exact number of searches for your targeted keyword phrase (or it's synonyms). This information would let you know instantly whether it's worthwhile to target certain niche or pass it on for better ones. While it used to be closely guarded data behind Google's corporate data centers - it is available now on first come - first serve basis. Google just decided to offer more information about keywords and keyphrases search volume. In fact almost precise numbers as well as average monthly search volume numbers. Any paid subscibers to wordtracker around? Sorry guys, we just got an access to precise numbers from the king of kings. No more questionable guesswork at a premium fee is needed. Here is goes:
  1. Go ahead to Google Keyword Tool
  2. Click on: How would you like to generate keyword ideas?
  3. Select "Descriptive words or phrases"
  4. In the field: "Enter one keyword or phrase per line:" enter your favorite keyphrase
  5. Press button "Get keyword ideas". Wait a few seconds...
Together with suggested keywords and all of it's possible variations - Google will return "Approximate Search Volume" numbers together with "Approx Average Search Volume" numbers for the current month. Handy indeed. Enjoy! Gleb Esman

Use Google Webmaster Tools to see through the walls …

July 12, 2008 by · Leave a Comment 

Well, no quite through the wall - but Google Webmasters Tools allows you to see something that no other service, product or person could do. It allows you to see top search queries in which your site appeared on google organic results (impressions - even though no one clicked on your link, you still know what people were searching for!) as well as top clicked queries that generated the most clicks (traffic). How cool is that?! This will allow you to see which phrases you started to rank for (even though people haven't clicked on your site yet). This cool feature will let you discover trends and niches on internet - something that people are searching for, even though no one clicked on your site. It's like getting inside googleplex and peeking on their closely guarded databases. To access these stats: And it's free of course!

Tips for Affiliate Marketers

July 12, 2008 by · Leave a Comment 

Here are few tips to help you started with affiliate marketing.

    If you already up and running this direction - you might get a few gems out of this article.
  • Good idea is not necessarily a good business! Test the market before investing lots of time and money to create a product. To test the market:
    • Open Google Adwords account
    • Sign up for affiliate programs at ClickBank or Commission Junction programs for free.
    • Find existing products that targets the same (or closely related markets) to the product/service that you are planning to create.
    • Create simple landing page on your website promoting existing affiliate product or service. Alternatively, instead of trying to sell anything you can send visitors to fill-in your online survey about their needs and wants or simply offer them page full of useful information + ability to opt-in to receive more information. Aweber has all tools to manage your email and opt-in needs. Once people opted in - you will be able to market them your or other products repeatedly without paying anything to Google.
    • Spend $50 - $100 worth on Adwords sending targeted traffic to your landing page.
    • See how many visitors you got and how many converted to buyers/customers. If after spending $100 on ads you won't get any customers - this might not be a good niche. This also could mean that approach to convert visitors to buyers might need to be changed.
  • If you create a useful (or so you think) informational product that no one seems to buy - offer it at no charge, but through an opt-in box on your site. This way you will grow database of people who are interested in this market and later on you can offer them other affiliate products and make your money worth and more.
  • When sending emails to your opt-in list approach them like a friend, not like salesman. This could increase trust and conversions.
  • Offering something cheaper than your competitors not necessarily will make you more successful. Opposite quite often is true - clever, innovative, agressive marketing with high price tag product could work wonders in the right niches.
  • Video sales letters converts better than regular online text salesletters.
  • Use competitive intelligence to help your business. Spy on your competition or other successful affiliate marketers with DomainTools. Domain tools paid account ($15/mo, $149/yr) allows you to list all domains hosted under same IP address. So if you know website name of successful affiliate marketer - you can see what other "cards he has under his sleeve" by peeking at his other domains. TIP: Alternatively you may use live.com query to find all domain under IP address, type this at live.com search box: ip:123.45.6.78
  • Some internet marketing gurus are raving about Spyfu.com service using which you can spy on other websites (presumably your competitors), see what keywords they are bidding on and what their daily ad budget. I checked their site against domains that I personally manage and have to say this: - They don't get even close to the daily budget I am spending on Adwords. That's understandable - only Google knows that - they obviously has no and cannot have any clue about it. This factor may or may not be important for your needs. - They do report organic rankings ok - anyone could get this just by Googling. - They do report pay per click competitors ok - same - anyone could get this just by Googling. - They does not report our most moneymaking keywords, although I don't have paid account with them and haven't seen all keywords that they could report. - They doing great job marketing their service! Something we all can learn from.
  • If you use Aweber to market to your list - do not leave "thank you" page as it's default. You're leaving money on the table. "Thank you" page could redirect opted-in visitor to another sales letter and/or be as simple as affiliate link itself for relevant products.
  • "Old" domain names are as good as old quality aged wine. If you own one or could afford to purchase one (especially rather generically looking name) - this will definitely help to quickly gain trust at Google, compare to brand new registered domains.
  • Every portal must have privacy policy, contact us and about us page. This is useful for visitors and good for search engines to see that you're serious to do online business up to standards. Having sitemap is a must for quicker indexing and ranking. Having separate link to sitemap from your main page is a good idea.
  • Do you have the list? How often do you mail them? Marketing experts suggest to create at least 52 separate email messages (you may outsource their creation to rentacoder, elance or other outsourcing places). If you have account with Aweber or other email marketing service - upload these messages over there and let your messages to be sent to your list at least once a week. This way you'll be set for the whole year, without touching anything else. Of course, if you discovered new product or service within affiliate space that is worth promoting to your list - just create one extra message and send it out to your list. Other 52 - will keep your list "in touch" with your business year round and will be your automated generator of residual income.
Good luck with your online ventures!

How to start your online affiliate business – in baby steps

July 12, 2008 by · Leave a Comment 

How to start your own affiliate business, what to do, in which order, which mistakes to avoid

  1. Sign up for a few popular affiliate networks, such as Commission Junction (all kind of products, services) or ClickBank (electronic downloadable products or membership subscriptions).
  2. Sign up for Google Adwords.
  3. It is well known wisdom that good idea is not necessarily a good business, so first things first - TEST your idea or niche. Do not look for niche or market that has no competition. No competition - most often means no market. Lots of competition is good - more products to promote in the marketplace, more potential partnerships to create, more mutually beneficial joint ventures to found. Here are few online places you can check which products, services or markets are currently active:
    1. Download.com - there you can search and sort and see which products are active. Which ones are praised and receive lots of good comments. Visit vendor's pages and see if these have affiliate programs attached to them.
    2. Type search queries on Google trends top see if they are active. Compare search queries to each other. Compare and see which countries, regions and even cities are actively (or not so) are searching. Have fun with Google Hot Trends to see which search queries are very active right now! Fun to object trends and get ideas.
    3. Check Digg.com for entries that received the highest number of "diggs". These should give you an ideas of what popular among opinionated geek crowd (in case you want to target this market). Blaming Bush, praising Obama, Apple and Firefox seems to be the hot topics.
    4. Find out the most expensive adwords, type them on Google, look at their ads and see what these portals are doing. They paying a lot of money for every single click (sometimes $50 and more) and they presumably very successful businesses. Great to observe and learn from.
    5. Check Ebay on what are the hottest selling items. This is the page not many people seems to know about - most popular items on Ebay. Great to observe and study current trends.
    6. Check Amazon.com. Amazon also has a page of the most popular selling items, updating on a hourly basis. Great way to learn current market trends and employ information for your business.
  4. Once you figure out your area of marketing - create simple website with just one landing page promoting affiliate product. Be willing to spend $50-$100 to test the market, test how responsive are visitors and whether you see any conversions. Don't expect to make money right away (although it's perfectly possible) but if you don't see any conversions after spending $100 on Adwords - this might be a sign of not-so-good niche to be at. If you see sales from this test campaign - you know that you have a chance to make money money and improve from now on. Alternatively to selling a product - create an opt-in page that gives some useful information to your target niche and inviting people to signup to your list. Aweber is a popular, flexible and reliable service to do email marketing. This way you ad dollars will be spent on generating a list to which you can market on forever. Remember - having mailing list of targeted interested people will allow you to make money instantly, sometimes by sending a single email promoting new affiliate product.
  5. If your list is growing, sales are happening - this will be a good time to grow. Start adding more contents to your site. Have capability for people to ask questions through your website. Make every effort to make it easy for people to join your list. Every time you add a new page to your page - use great free service OnlyWire to quickly notify many other social tagging, bookmaring and linking sites about your new pages. Use pingomatic.com and ping.in to notify blogging engines about your new pages.
  6. Remember - affiliate programs are easy as they does not require one to create much of anything. People love to be lazy and make money fast without doing anything. As a result of it - approaching business from the "I wanna be affiliate" side has it's limit. The real money on internet and beyond are in having your own product. After tests above you observed that niche is good an active. Start creating your own product targeting this niche and this will put you in command. Invite other people to become affiliates to market your product.
  7. Play with creating super simple products and "magnet" pages:
    1. Promotional Videos. Buy e-book or product or join membership site of your interest that has affiliate program with it. Create simple guidance video explanaing benefits of the product and guiding visitor on how to use it. Have video showing your website and sign up URL with your affiliate link for the product. Videos are great way to attract targeted converting traffic and make extra sales.
    2. Create Frequently Asked Questions about popular product or service and place your affiliate links around it. If page has useful rich contents - it will eventually attract free organic traffic of potential customers. You may speed up the process with the help of onlywire.com and pingomatic.com
That's it - you're good to go. Good luck in your online business!

How to keep competitors away and keep search engines happy

July 12, 2008 by · Leave a Comment 

The more one way organic incoming links your website has - the higher it ranks in google and other search engnies. Problem 1: If you own 2 or more domains and link from domain1.com to domain2.com - this absolutely has no effect on ranking of domain2.com. Search engines knows that you own both domains soit will not grant more ranking "juice" to domain2.com. Problem 2: If you into affiliate marketing - you do not want your competition to "spy" on your business, duplicate it and steal your profits. You don't want others to know all your websites, you want to keep your businesses "under the radar" as much as possible. Here are suggestions to solve these problems:
  1. Register domains under "pen" name.
  2. Use P.O.Box that only takes mail from that pen name.
  3. Get a dedicated server and have every domain, or group of domains, under their own IP addresses.
  4. Do not host your websites on a single IP address. It is easy to list all websites under single IP address by either using domaintools for a small fee, or running query on live.com, such as: ip:123.4.56.78
  5. It is not always a good idea to have "proxy" or "private" registration. Search engines suspicious of that and you may have problems missing important messages regarding your domains. See #1 + #2.

« Previous PageNext Page »

Bottom