freelancing web design lessons

Over Hours, Under Paid: Lessons from A Freelance WordPress Developer

I recently had a client that hired me for a very simple website project. They needed 2 websites combined into one, with a fresh new look. Initially it seemed like the biggest issue would be content organization and content compiling as there was a lot of duplicate information between the 2 websites.

Content organization and design proceeded as expected.

Once the site was done, the real work began

The client did not go with my top recommendation for hosting (Kinsta) and asked for other options. I begrudgingly offered 2 other well known hosting providers. The client decided to go with the absolute cheapest option – the basic WordPress Hosting account from Bluehost.

I expected the migration to take less than hour. If they had chosen Kinsta, the migration, domain pointing, SSL certificate installation, domain search and replace all would have taken 10-15 mins. I know this from experience installing and pushing live over 200 sites in the last 6 months on Kinsta (the ease of migration is one of the reasons I became an affiliate!). With Bluehost, however, it racked up over 5 hours.

Endless issues with Bluehost migration & domain pointing

First, the Bluehost “free migration” tool did not work – as in, the button in the Bluehost account dashboard was inactive. I was able to inspect the button with my browser web developer tools and find the URL that contained the instructions. I followed the instructions, which involved installing the Bluehost migration plugin on the new site. Although the new site passed the compatibility check, the migration itself would not run.

Not wanting to waste more time on this, I decided to do a manual migration, copying over all plugins and themes through ftp, using the Worpdress export/import tools, exporting & importing files for each plugin. Of course the media didn’t import correctly initially and had to be executed separately. Then I clicked through the customizer and matched theme settings on the new install to the new site.

Once the bulk of the site was setup and looking good, I moved on to pointing the domain to Bluehost. My first complaint is that they only provide instructions on editing the DNS records to their DNS. I didn’t want to use this method because the client has a separate email service setup and 3 different sets of MX records for email. Client was not sure of email service provider so rather than disrupt the email service and copy over all 20+ mx records from godaddy to Bluehost, I wanted to simply update the A record with the Bluehost IP.

At least the live chat was effective

The correct site IP is not listed in the Bluehost dashboard, so I spent 30 mins on the live chat service retrieving the correct IP address from a customer service rep.

Once the A record was updated in Godaddy and it had a chance to propagate, the new site was appearing on the clients live domain! Except there was no SSL certificate installed, so the browser was displaying security warnings. And the images were were all throwing ‘not found’ errors.

After exploring the Bluehost dashboard for an SSL certificate installer (there was none) I dug around the Cpanel interface and found the SSL certificates and installed them. Unlike Kinsta, there is no tool to force https:// so I had to add an SSL plugin to the new WordPress site. This isn’t a huge deal except that it adds additional site bloat.

Searching & Replacing the Temp URLs & Dev URLs

Since Bluehost doesn’t offer a search and replace tool for removing and updating THEIR temporary domain, I had to install another plugin for that. I like to use the “Better Search & Replace“. It works really well and offers a “dry run” to test tables before applying changes. (Note – always be sure to create a site backup before editing the database!)

Final Review of Migrated WordPress Website

Now that the site is on the live domain, the SSL certificate is installed, the site assets are all under the correct protocol and all in-content URL’s have been updated to the live domain, the last step is to click through the site looking for any bugs. Aside from a minor page ID update, and widget updates, everthing was looking good.

The Freelancing Lesson from Today?

Don’t let the client ignore your recommendations. Stick to what you know. You are the expert, you know what will work smoothly. What you don’t know is what you don’t know – so if the client refuses to abide by your recommendations and requests their own hosting provider, the best course of action is to clearly state that work required to meet their specifications will be billed hourly. Period.