Protecting Your Reputation by Protecting Your Email

Your online reputation is one of your most precious possessions. Because of this, you need to do everything in your power to protect it. The problem is that the more powerful your reputation becomes online, the more that people with bad intentions want to take control of it and use it for their own purposes. Nowhere is this easier online than email.

Email started as a trust system. I trust the email server I used to send my email. It trusts any number of servers to help deliver the email along the way. The recipient of my email trusts their email server.

In the beginning, email didn’t necessarily go from you to your server, to your recipient’s server, to your recipient. The internet was still fragile, so email was designed to hand mail to any server and trust that that server would either deliver it, hold it until it could deliver it, or hand it off to another server for delivery. Trust, however, has a price, and once bad people figured out that email was based on trust, they started making us pay that price.

Because bad people figured out they could send emails that look like they are coming from anyone on the Internet, people much smarter than me knew they had to do something to secure our email system. If someone could send you an email that said it was from your mom, and that email contained a link to show you cute puppies, you trusted that it was from your mom, so you clicked the link; thus Phishing was born.

These days, email is a lot more secure. The smart good people have figured out ways to build technologies like Sender Policy Framework (SPF) and DomainKeys Identified Mail (DKIM). These systems help protect emails by protecting who can send emails for a given domain. If you have SFP and DKIM setup, most email servers will recognize them and use them to make sure that the email it just received that SAID it was from you, actually IS from you.

The biggest problem with SPF and DKIM is that they are not easy to setup. To configure them, you need to understand DNS and how to create specific types of records. This has hampered the widespread adoption of these concepts in the past.

Thankfully, these days, there are good hosts like SiteGround.com out there that set them up for you automatically. When you set up a domain on a good host, one of the things they do is not only set up your mail system but also set up SFP and DKIM to protect others from fraudulently sending emails that look like they come from you.

If your host does not automatically set up DKIM and SPF for you then all is not lost. There are many good tutorials available and with some time, you can set them up yourself. There are even online checkers you can use to make sure you have done it correctly.

Or, if you’ve got better things to do with your time than figure out DNS, you can host with a host like SiteGround.com. Your call.

[subscribe_cta]

PHP 8 Available on Our Servers (What’s New + Game)

We’re happy to announce that we have deployed the latest release candidate version of PHP 8 on all our servers. As always we are among the first companies to provide the new PHP on their hosting platform. PHP 8 is expected to facilitate developers to write cleaner code with better quality that gets executed faster. Since release candidates are not suitable for live sites, we invite you to try it out on a staging copy of your site or on projects that are not live yet. We’ll give away awesome PHP elephants to 10 of the early adopters who share their opinion about PHP 8 with us. 

PHP 8.4: Stay Updated! 🚀 Check out our latest blog post to explore the newest features and enhancements in PHP 8.4.

What are the PHP 8 improvements and features

Faster code execution

The latest PHP version brings a lot of new things but the one we are obsessed with is JIT (just in time compiler). It is the first time that PHP version has a compiler – JIT – that caches a version of your already interpreted code and generates a machine code as an output (machine code is on with 0’s and 1’s only). The “just in time” compiler promises speed improvements for complex tasks and algorithms and opens new opportunities for the PHP language to broaden its reach and applications. 

Some of you may wonder how JIT relates to the Opcache, which brought significant performance gains to many websites? The main job of the Opcache is to cut the processes of tokenization, parsing, and compiling of Opcodes, which then get processed by the Zend engine. The role of JIT is to save on the execution of the Opcodes by the Zend engine, so it joins forces and intervenes to spare resources where the Opcache cannot help.

It’s worth mentioning a few downsides we have noticed so far:

  • Running PHP 8 with JIT might make it harder for you to troubleshoot code errors because it may be harder to locate which piece of your code in this interpreted version is actually at fault.
  • If you are running a WordPress site you may not be able to note significant performance improvements thanks to JIT. The WP developers are still working on making WP compatible with PHP 8 and are now calling for testers, meaning you won’t be really able to test PHP8 on your WP site right away. Also, because of the way WP interacts with MySQL, a lot of the waiting time does not come from the PHP compilation, but from the MySQL response time, which cannot be solved with the help of the JIT compiler.  

Code with higher quality 

One of the major differences that you will notice is that many of the warnings and notices that weren’t catchable are now exceptions or errors, which can be caught and logged. It is possible that due to this change, a lot of problems that remained hidden with the previous PHP versions will now surface. This is a great improvement, as it will allow developers to spot potential issues easier. However,  have in mind that it may be a good idea to set display_errors=Off if you decide to use PHP 8 on a live site to not show such errors to your site visitors.

Cleaner, shorter code

Some of the new elements, such as the nullsafe operator, greatly improve the readability of the code, making it shorter and neater.  Instead of nesting several “if’s” you can use the “null” operator to write all those in just 1 line of code. 

The “type” trend

For several versions now, PHP has been trying to define the arguments that each method could adopt and become more of a typed language. In this latest release, there is a feature called “union types” which allows you to define 2 value types for each function, which is a natural continuation of that trend. As the example below shows, the function can return an integer or a float: 

public function getNumber(): int|float {
return $this->number;
}

The list of new features keeps going and we suggest this article as a good reference point for PHP developers:

https://stitcher.io/blog/new-in-php-8
https://stitcher.io/blog/php-jit
https://wiki.php.net/rfc/nullsafe_operator

How to take advantage of PHP 8 on our platform?

All our clients can change the PHP version of their sites from their control panel – Site Tools > Dev section, or cPanel > PHP versions. With PHP8 still being a Release Candidate, we strongly advise that you do not enable it for your live sites, but run tests with it on our staging environment (staging is available for GrowBig, GoGeek and Cloud plans), or create copies of your sites in your accounts if you do not have the staging functionality. 

At the moment, we have deployed PHP 8 without the following modules: mcrypt, geoip, ioncube.

Tell us what you think and win a PHP elephant

We tried to give you the big picture on what the new PHP8 is all about. Now we would like to hear what you actually think about it, once you get the chance to try it out. What do you like and what do you dislike? How does it work on your website? Do you see any performance improvements? We are looking to explore how our more experienced users take advantage of this early release candidate before it becomes official.

To stimulate you to share your tests and opinions with us, we have styled and branded the original PHP elephants to celebrate this new release. We’ll give away 10 elephants to 10 random users who share their thoughts on PHP8 by November 26, 2020 in a comment under this post, or on Facebook or Twitter, tagging @SiteGround and using the hashtag #PHP8 in their post.

[subscribe_cta]

Status Report on the Switch from cPanel to Site Tools

It has been а little over a year since we launched our new client interfaces – the revamped Client Area and the in-house developed Site Tools that is replacing cPanel. In August 2019 we started onboarding all new clients to the new interfaces and shortly after we began working on the migration of our existing clients. As of now, all our clients are using the new Client Area and we have also successfully converted more than 9000 servers from cPanel to Site Tools. 

Looking back on the past 12 months, evaluating the complexity of the transfer process and the non-transfer related challenges 2020 has placed in front of us, I believe that we have managed to keep a healthy migration pace. This was achieved thanks to the tremendous amount of work of all teams involved in the transfer and despite the occasional slowdowns coming from various circumstances.

Still, we have a lot more accounts and servers to convert and many of you may be wondering why it is taking time and when is your site’s turn coming. That is why we decided to do a follow-up and tell you the story of what we have done behind the scenes during the past year and what’s the forecast for the upcoming months. 

The innate complexity of the migration

It is not surprising that the migration of over a million live sites from cPanel to Site Tools is a tremendously complex process. I might say it is comparable in terms of efforts and resources needed for the creation of the new interfaces and systems themselves. It is quite a challenge to move operational sites from one platform with a certain structure to a new platform with a completely different one, without affecting the availability and functioning of these sites. 

On the surface, it seems that there is just one simple difference between the two frameworks —  no addon sites under one hood. What this actually means is that we have to be able to untangle any subordinate sites from the main cPanel account and recreate them as separate stand-alone accounts in our new platform. And to illustrate how complex this process may be for different website setups I will list a few examples below:

Multiple addon domains using one and the same database

Normally, this is not a reasonable thing to happen, as each website, even addon ones, should be using their own database. However, this was technically possible with cPanel and there are actual sites set up this way by our customers. When such a site needs to be migrated, our migration script has to detect the case and create a separate database for every site and copy the data. After that, the script automatically reconfigures each website to use the respective database.

Applications with absolute paths in their configuration

Another thing that the migration script should fix is multiple applications set to use absolute paths in their configuration. The system has to detect those and once they become independent sites with different system users, to automatically reconfigure them to use the new system paths.

The Addon/Parked/Subdomain infinite setup options 

The infinite number of ways users can set up and sometimes mess up their document root paths for the different applications when using the addon, parked, and subdomain functionalities in cPanel is the biggest challenge for our transfer process. We have managed to list more than 30 different ways of unorthodox document root path cases. One of the most common examples is when more than one addon domains are configured to use the same folder.

This is a common “hack” of the cPanel system people use to park a second domain to an addon site — an option that is officially not allowed in cPanel. So in such setups, the system has to automatically decide which site is each domain going to and in what role (primary or parked). In some cases, the setup is so complex that the domains cannot be configured automatically and the migration should be attended manually.

Serious Development Assignment 

Automating all possible processes

We started our first migrations in September last year very cautiously. The migrated sites were manually reviewed and each of the issues described above, plus many more that appeared, have been addressed with new iterations of the migration script. Needless to say, the manual checks of the first migrations took a lot of time and was not something that could be sustainable in the long run, so we have added several additional automations to the migration script. 

We now do automated pre-checks of all accounts to be migrated. If there is an indication of a possible problem, we fix it before the migration has started. After that, the account is actually migrated from cPanel to Site Tools. Once the migration is over, we run another automatic check for post-migration issues. If any issue is detected the account is marked for manual review.

Additionally, we have developed an automated system for communicating the progress of this process with the customer whоse accounts are being migrated. With all these systems now being in use, we are able to convert about 900 cPanel accounts per day with a very low fail rate. 

Switching to the New Customer Area first

In the beginning, we planned to migrate each customer simultaneously to the new Client Area and the new Site Tools. However, we soon realized that it will be much better to untangle the new Client Area from Site Tools and move all clients to the new Client Area first. There were several reasons for this decision: 

  • First, the Client Area migration was in itself less risky, as it did not directly affect the hosted websites functionality. 
  • Second, we figured out that providing the Client Area first will give all our customers some time to get used to the new interfaces. We do appreciate the effort needed to learn a new interface, so by getting used to our new UX logic with the Client Area, we wanted to make the transition to the more functionality-dense Site Tools smoother for our users. 
  • And third, daily maintenance of two Client Area interfaces was taking away precious time from our technical teams. Time that could have been spent on perfecting the migration scripts.

The decision to untangle the transfer to both interfaces required temporary focus change, as we now had to invest some development time into accommodating cPanel accounts in the new Client Area interface, which was not initially planned. However, in the long run, we believe that this decision brought the end date of the whole migration closer. We are very proud to have all our clients successfully using the new Client Area since May 2020. 

The challenges of 2020

As we all know this year has been extremely unpredictable and for perfectionists like our managerial team, planning has become a nightmare with too many variables and dynamic factors that inevitably slowed down the migrations during the year. 

Transfer to Google Cloud Platform

One of the things that made us reorganize our initial plans was really positive — the finalization of our contract with Google Cloud. Moving our service to a cloud-based platform was the other big project we had been working on in the past years. We knew that moving to Google Cloud would provide a lot of immediate benefits to all our customers and completing this migration first would enable us to dedicate all resources to the much more complex switch to Site Tools.

Therefore, once we finalized the contract with Google, the migration to Google Cloud was prioritized in the queue of our DevOps and SysAdmin teams. They worked fast and did a great job – we managed to migrate our whole platform to Google Cloud in less than 4 months. And we are talking about more than 4 PB of data! Though a big part of our resources was invested in the Google migration for several months, we still managed to do considerable work on polishing the Site Tools migration scripts in the meantime.  

The COVID-19 effect

Of course, we cannot forget the COVID-19 effect. During April and May, with quarantines affecting many of our geographical markets, we have seen an unprecedented uprisal in support inquiries. It was only natural, as the online presence has suddenly become much more important for a great number of people and businesses, leading to a higher level of activity by all website owners.

We were truly swamped and for the first time since we started operations, we had to literally throw all our resources into customer support. Despite hiring new people, the volume of work was so big that every department had to focus and contribute in some way to the provisioning of the service and optimization of how that service was delivered. Again, that was putting the focus away from the migrations and even though we kept a core team working on them, the managerial and operation attention was elsewhere and migrations were going slower during this period.

That being said, I still believe we managed to address both of the big 2020 events quite well and managed to remain reasonably on track with our third main endeavor — the transfer to the new interfaces. 

Current status of the migration

At the moment Cloud accounts are being migrated with the highest priority. We aim to complete the migration of the majority of the clouds by mid-December. There is a small percentage of Cloud accounts that are not included in this plan. These are accounts where existing WHM functionality was used to create custom cPanel plans. This means that custom resource limits were set by the cloud owner to the separate cPanel accounts on the cloud. As preserving these settings is a serious additional complexity to be addressed by the migration script, we will have to postpone such accounts’ migration. (In case you own such a cloud account, and you believe you do not need to keep your custom cPanel account settings, you may contact us through the Other Technical Issues category in your Help Desk and request your cloud inclusion in the current migration schedule.)

In the meantime, we are also working hard on the shared server migrations. Due to the larger volume of data on them and the different setup specifics, their migration rate is much lower at the moment. However, now that we are close to finishing the cloud account migration, we have focused more resources on optimizing the shared servers migration process and expect to see a larger number of shared accounts migrated in the next several weeks. 

On behalf of the whole SiteGround team, I would like to thank you all for the patience this year. We are fully aware we have created expectations for a change and it may be taking longer than you have anticipated, but we really do our best to make this super complex switch happen as soon as possible and at the same time to be a safe and easy experience for all our customers.

[subscribe_cta]

New, Ultrafast PHP for up to 30% Faster Websites

Custom PHP Setup on Site Tools

Speed is one of the pillars of our hosting services and wе’re constantly working on making our infrastructure faster and more reliable. One of the essentials for a fast loading speed is the way the PHP is handled on the web server and now, with our new Site Tools platform and without the constraints of the old system, our DevOps team got the opportunity to develop a new and ultrafast PHP setup that is up to 30% faster and as secure as everything we do.

Ultrafast, yet Super Secure PHP Setup

On its own, running a fast PHP is not a difficult task. However, if you want a fast, stable, and secure PHP while supporting Apache and the variety of .htaccess rules defined by users and apps, things get complicated. We wanted to solve these problems and at the same time increase the page loading speed and improve the server stability during traffic spikes. So once we released the new Client area and Site Tools and got rid of major constraints that our old platform was putting on us, modifying our PHP setup became one of the priorities of our DevOps team.  

After several iterations, we managed to overcome the biggest “speed over security” challenge and delivered a fast PHP with our WAF and account isolation integrated, thus getting better performance results without compromising with security. The new implementation is super fast, secure, and efficient.

Our Ultrafast PHP vs Our Standard PHP

While the new, ultrafast PHP setup is faster and is recommended for websites with a lot of traffic, the standard PHP setup provides some extra flexibility for PHP versions and variables management.  

The websites that will benefit most from the ultrafast PHP are those that get solid traffic and may be experiencing resource deficit on the current plan they use. Based on the preliminary statistics we have run, we see the following raw data:

  • Faster page response: up to 50% drop in the TTFB (time to first byte), which will make your pages load faster than before.
  • Increased server capacity: the host node will be able to process about 20-30% more requests, which means it will be able to handle traffic spikes even better than before. 
  • Lower server memory usage: up to 15% drop in the memory usage, which again vacates server resources for handling more of your traffic faster.
  • Expected overall performance improvement: currently the new, ultrafast PHP averages at being 30% faster than the old setup.

Note: the numbers above are average and are based on internal tests. Results may vary per site. 

The new PHP setup is available for websites hosted on GrowBig, GoGeek and Cloud plans, as these plans usually host the type of sites that are most likely to benefit from the performance improvements it brings. It’s important to point out that it works for sites running on PHP 7.3 or higher and is not compatible with older versions. Furthermore, when using the ultrafast PHP service, all subdomains under your site will inherit the PHP version and variables settings from the site’s primary domain.

Our Standard PHP Allows Different PHP Settings for Each Subdomain 

The standard PHP setup is the one all StartUp accounts use. It is also available as an alternative to the ultrafast PHP setup on Site Tools-based GrowBig, GoGeek and Cloud accounts. Its performance is excellent for small and standard sites. Its biggest advantage is that it enables you to manage the PHP versions and variables separately for every subdomain in your site. 

As the standard PHP gives more flexibility for experiments, all staging sites are set up with it too. So if you need to use an older PHP than 7.3 or you need a setup with different PHP versions and variables per subdomain, the standard PHP setup is the one for you.

How to Switch to the Ultrafast PHP?

ultrafast PHP setup
  • All new sites created on Site Tools-based GrowBig, GoGeek or Cloud plan come with the new, ultrafast PHP switched on by default. 
  • For existing sites hosted on  Site Tools-based GrowBig, GoGeek and Cloud Plans, the ultrafast PHP is now available in Site Tools > PHP Manager and clients can instantly enable it from there. 
  • If you are a SiteGround client and have a Site Tools-based StartUp plan, you may upgrade it to a higher plan to get access to the ultrafast PHP setup.

[subscribe_cta]

How to Optimize Your Agency’s Workflow with WP-CLI Commands

Is your agency spending a lot of time on busy work and repeating the same efforts time and time again, from one client to the next? Is the development team wasting a lot of their focus and mental energy on menial tasks and boilerplate work? What if you could free up some or all of these resources and invest them into the added value that the client will see and evaluate instead?

WP-CLI is a command-line tool that can help you accelerate the way you interact with WordPress websites. It is also a framework you can use to formalize and automate all of the processes that are shared amongst your clients if you’re a developer or an agency. Because of its versatility and simplicity of use, WP-CLI has been part of SiteGround’s preinstalled toolkit since 2013. SiteGround has also been one of the first sponsors of the project and continues to do so for the past 3 years, 2020 including.

One of the main reasons for SiteGround’s support is the fact that WP-CLI perfectly complements their mission to provide powerful, yet simple to use tools for WordPress processes automation and optimization. In fact, together with SiteGround, we released this awesome webinar for everyone who hasn’t had the opportunity yet to find out how useful WP-CLI can be:

As one of the main co-maintainers of the WP-CLI ecosystem, I was really glad to accept this new invitation from SiteGround’s and share some practical tips on how you can make use of WP-CLI to level up your workflows and have your clients get more bang for their buck!

Accelerating administrative efforts

WP-CLI is first and foremost a direct replacement to a WordPress site’s admin dashboard. Instead of providing a graphical web interface where you click through menus to get things done, it provides a text-driven command-line interface to perform these same tasks using written wp-cli commands. What at first sounds like added effort eventually turns out to be an infinitely more expressive way of letting the site know what you need to have done, and this makes it scale so much better for complex use cases.

As a result, while it is not necessarily faster to type a command to make a change to a post than it is to click the corresponding button on that same post, the difference becomes more apparent once you deal with multiple posts instead. While you might shudder at the thought of manually making a change on the admin backend to thousands of posts on a large site, all you need for doing so with WP-CLI still happens to be a fairly simple command, usually a one-liner. Granted, it will take a bit more time to execute than it would for a single post, but you can just leave it running in the background and focus on something else in the meantime.

To show an example of this effect, let’s imagine you have a huge multisite network with thousands of sites. An existing user has proven their worth in terms of helping moderate the entire network and is to be promoted to being an administrator on all the sites. How would you go about doing this via the graphical admin backend?

It turns out that this is quite easy to do via WP-CLI:

wp site list --field=url | xargs -n1 -I {} wp --url={} user set-role <user-to-promote> administrator

The above command will retrieve the list of all site URLs for the network, and for each of these sites, set the role of the user in question to that of “administrator”. And while this might take a few minutes to complete, it is a one-liner that does the work for you. Using the web-based admin backend would probably cost you hours to do the same, or require you to write a one-off plugin to do so in a more efficient way.

For an overview of all the bundled commands that come by default with WP-CLI, you can browse the command reference at https://developer.wordpress.org/cli/commands/.

Using agency-wide defaults

WP-CLI supports configuration files at the global level as well as at the project level.

The global configuration file is best used for defining a developer’s personal preferences. The project-specific configuration file however should best be managed centrally across the agency and treated as a part of the project, just like your composer.json file.

To use a project-specific configuration file, all you need to do is create a wp-cli.yml file within the site’s root folder. It will accept a few entries that are specific to configuration files, like providing an array of commands to disable for that specific site. But it will also accept default values for any of the available commands with a unified syntax.

Let’s look at an example configuration file for a hypothetical project:

# WordPress Core is installed in a subfolder.
path: wp-core/
# Load WP-CLI-specific init code before executing a command.
require: wp-cli-init.php

# Provide default flags for the config create command.
config create:
    dbuser: root
    dbpass: 
    extra-php: |
        define( 'WP_DEBUG', true );
        define( 'WP_POST_REVISIONS', 50 );

# '_' is a special value denoting options for this wp-cli.yml.
_:
    # Inherit configuration from an arbitrary YAML file.
    inherit: agency-defaults.yml
    # Merge subcommand defaults instead of overriding.
    merge: true

As you can see, it is pretty straight-forward to provide defaults for any known command. Also, you can load centralized YAML files within such a project-specific config file as well, if you need it.

You can read more about WP-CLI configuration files at https://make.wordpress.org/cli/handbook/references/config/.

Automating recurring tasks

After you’ve used the command-line for a while to deal with administrative site work, you might start to notice recurring patterns. Are you always installing the same set of plugins to get started? Are you deleting a set of options from the database every time you want to test the onboarding flow? Maybe you constantly need to reset a user’s meta values to trigger that one piece of logic in your member’s area that is constantly being changed?

Instead of needing to remember a list of multiple commands and hopefully typing them without spelling mistakes, you should take a minute and put these into a shell script to automate that work. After all, a shell script is nothing more than a “step-by-step replay” of doing something manually in the console.

As an example, here’s a script that will automate the installation of a new WordPress site:

#!/usr/bin/env bash

# Configure the script to exit immediately if any command fails.
set -e

# Download WordPress core files.
wp core download

# Create wp-config.php file.
echo "Please enter your database credentials:"
wp config create --prompt

# Install WordPress.
echo "Please enter your WordPress installation details:"
wp core install --prompt

# Install standard plugins.
echo "Installing plugins..."
wp plugin install query-monitor user-switching wordpress-seo

# Activate and configure a few plugins:
echo "Configuring plugins..."
wp plugin activate wordpress-seo
wp option patch update wpseo_titles metadesc-home-wpseo "My new website"

echo "Done!"

You can, of course, improve this script over time to add more bells & whistles or to give more precise feedback. Sharing it with all of the agency’s developers makes sure you only need to invest once into the automation part, for everyone to reap the benefits later.

Furthermore, a collection of such scripts makes for excellent onboarding help when new developers join your team.

Extending for custom use cases

With more complex projects come more complex administrative requirements. WP-CLI provides its framework to developers so they can easily create their own custom commands to solve very specific business needs in an efficient way.

Running bulk checks across the entire range of an online shop’s products? No need to build an extra user interface for that – just wrap the checking logic in a WP-CLI command and you’re good to go. Then, take it a step further and automate these checks by running that command at a recurring schedule via a cron job!

Note that you can either include these custom commands within a site’s plugin or theme, or you can publish them as a separate package that can be installed via WP-CLI’s built-in package manager:

wp package install awesome-company/manage-all-the-things

While the range of commands bundled with WP-CLI already covers quite a few use cases, the possibility to build your own custom commands removes any remaining limits and leaves it up to your imagination only as to what you can do.

Executing tasks on remote sites

WP-CLI can connect to remote sites directly via the –ssh flag, provided that the WP-CLI binary is also installed and accessible on the remote machine:

wp --ssh=admin_user@123.456.78.90/var/www/my_site config set WP_DEBUG --raw true

What’s more, you can define aliases to denote the individual machines:

wp cli alias add @staging --set-ssh=123.456.78.90 --set-path/var/www/my_site --set-user=admin_user
wp @staging config set WP_DEBUG --raw true

The most powerful property of this is yet to come: you can group these aliases, and run a command on a group of machines instead of only a single machine. The built-in group @all is added by default, running the command on all the machines for which the alias was defined. But you can add your own groups that define a custom subset of machines. Groups can overlap, of course, and groups can contain other groups as well, letting you create an entire hierarchy of site management goodness! With these groups in place, you’ll do things like update all plugins on all staging sites, or add a user to all of your multisite networks, etc…

Browse to this link to learn more about connecting remotely to your servers or development machines.

Reaching for the black belt

To truly reap the biggest benefits from WP-CLI, you’ll want to combine the use of script automation, shared configuration, custom commands, and site aliases to ensure you cannot only address all of your agency’s usual needs but also do so at the exact point they are needed in one fell swoop.

Keep in mind that most of that work can be shared by and to all the members of the team. The return on the time you invest in this form of tooling will be multiplied by the members on your team that make use of them – it’s therefore very hard not to get a substantial benefit out of this!

In the end, optimizing the time it requires to deal with menial tasks and streamlining your workflows is what regains this time so you can use it where it matters most – creating value for your clients and gaining a competitive edge in a crowded market!

Getting started

The best place to get started right now is to read the WP-CLI documentation at https://make.wordpress.org/cli/handbook/ or you can read SiteGround’s details tutorials on WP-CLI. If you hit blocking issues or just have the odd question, head on over to the make.wordpress.org Slack team via https://make.wordpress.org/chat/ and join the #cli channel!

[subscribe_cta]

New Webmail App To Manage Email Settings

We have just released a stand-alone Webmail application for hosting plans using Site Tools, which allows all email users to change their password and set up different email automation like autoresponders, filters, and forwarders. Until now users could access their mail through a browser (yourdomain.com/webmail* or via the server name), but certain control features were a privilege of the hosting account owner through Site Tools only. 

Users can change passwords and manage settings from their webmail interface

Hosting account owners have had access to a number of tools through Site Tools that allowed them to change passwords and set configurations for all the email accounts created and hosted on their hosting plan. Through the Webmail app now each individual email user gets access to the same tools for their account only:

  • Email users can change their email password directly from the Webmail app. 
  • Users can download an auto-config file for setting up their email account on different email clients or just get the needed settings to do it manually. 
  • Autoresponders can now be created and managed through the Webmail app. 
  • Webmail users can set up their own forwarding rules. 
  • Different email filters can be configured directly in the Webmail application to enable email users to organize and automate the distribution of their incoming emails. 
how to login in siteground webmail

More convenience for our clients and their users

Thanks to the new Webmail app, our clients and hosting account owners can now grant access to their users to all relevant email tools they need to manage their individual email accounts. That will offload part of the email maintenance work you may have been doing for your clients. 

 siteground new webmail app

When accessed through the webmail app, these tools work exclusively for the specific email account in which the user is logged. All the changes made through the Webmail are automatically reflected in Site Tools (the same applies in the opposite direction, too). That will allow you, the account owner, to monitor the changes your users make through Site Tools and intervene if anyone needs help.

If you need more guidance, feel free to check out our tutorial on how to use webmail in Site Tools

NOTE:

Just a reminder that you can access yourdomain.com/webmail only if your domain is pointed to our servers and if you have an SSL installed. If you don’t have an SSL, the browser will display an error.

[subscribe_cta]

What’s New in WordPress 5.5 (+ Screenshots and Tips)

what's new in WordPress 5.5

It’s that time again! WordPress 5.5 will be out today if everything goes as planned. I feel quite excited about this new version. I had the chance to be part of the magic that happened behind the scenes of this WordPress release as a mentor and  I would love to share the most important WordPress 5.5 features and improvements that will soon come your way. Our customers will receive the new version shortly after its official release, as always depending on the individual settings in the WordPress auto-updater for each of their installations.

Security Improvements

Easy Control of Plugins and Themes Automatic updates

Since WordPress 3.7 users have been able to turn on/off WordPress native auto-update for their plugins and themes through their wp-config file. Now with WordPress 5.5 turning on/off plugin and themes, auto-updates can be done much easier by clicking a link in the admin interface. 

Plugin Auto-updates

Most of the massive attacks on WordPress websites happen through outdated vulnerable plugins. That is why making the option for plugin auto-update so accessible to all users in the interface has the potential to greatly improve WordPress security. 

To review the Plugins auto-update feature in WordPress 5.5 when it rolls out, go to “All Plugins”, and you will see a new column “Automatic Updates”. We highly recommend that you keep plugin auto-updates ON for all your plugins, as this is the easiest way to receive security updates as soon as possible and keep your site safe. 

plugin auto-update in WordPress 5.5

The SiteGround auto-updater also provides an option for plugin updates in its interface. We check for new versions of your plugins when we do core WordPress auto-updates and we do automatic backups of your WP installation right before the upgrade begins to guarantee a safe failover in case anything goes wrong. Choosing which plugin auto-update option to use is up to you: if you want to get your plugins updated as soon as a new version gets out, make sure you enable the new WordPress feature. It will work fine, regardless of the plugin auto-update setting in our own auto-updater. If you feel you better wait and get a backup before any update, you may rely only on our system. 

Themes Auto-updates

Based on our experience, auto-updating themes can be a trickier process than auto-updating plugins. That is why we have not included such an option so far in SiteGround WordPress auto-updater. After all, changing something in the theme can change the outlook of your website and you may not want this to happen automatically without being pre-viewed by you. 

Still, we believe it is a good idea to keep your themes up-to-date from a security point of view. The best way is to create a staging copy of your site when there is a theme update, check how your site with the updated theme there, and if everything is OK, update the theme on your production installation. 

If you none-the-less want to switch on the themes auto-updates, you need to click on each theme you have installed and enable the option from the theme screen.

theme auto-update in WordPress 5.5

Speed Improvements

There are a lot of factors that determine the performance of your website. However, images are one of the main culprits when it comes to slow web pages. WordPress 5.5 introduces image Lazy loading as a default feature in the WordPress core. This is a great optimization that stops images from loading in bulk when you open a web page and load them gradually instead as you scroll through. 

At SiteGround we have been big fans of Lazy Load for a long time. It is a feature we provide to our users through of SiteGround Optimizer plugin since 2018. Since we initially launched the Lazy Loading optimization we have been actively developing it adding support for iframes, videos, WooCommerce products, shortcodes, and much more. At this point, Lazy load options in the SiteGround Optimizer are more advanced than what is introduced in the WordPress core. That is why, for people that have Lazy load enabled through the SiteGround Optimizer, we will disable the native Lazy load. 

SEO Improvements

Search engine optimization is always evolving and writing unique, useful content that responds to people’s search intents is still the main differentiator between websites that rank well and those that rank poorly. 

However, on top of meaningful copywriting, you should also help your SEO standing by using some more technical tools, like XML Sitemaps for example. XML sitemaps make it easier for search engines to crawl all content elements included in your site and more likely for them to be indexed and shown in searches.

Starting with WordPress 5.5 you will be able to get an XML sitemap generated directly from your WordPress installation without relying on third-party plugins to achieve this.

native sitemaps in WordPress 5.5

This native option is great if you want a map that will list:

  • Pages
  • Posts
  • Categories
  • Tags
  • Users

If you want a more complex sitemap, that includes images, news, and videos, you’ll still need to rely on a third party plugin but I think this is definitely a great option for website owners that don’t want to add plugins.

If you want to dig deeper into more practical SEO tips, check out our series of articles from guest author and SEO expert Rebecca Gill.

Gutenberg UI and functionality

The block editor got a major UI overhaul, as well. Eleven versions of the Gutenberg plugin have been merged into WordPress 5.5, bringing with them new functionality, speed improvements, and a changed UI. 

New Block Editor UI

You will immediately notice how the modal bar that appears when you click into a block is bigger, with more contrast and more compact. The options are still there, and more!

new gutenberg features in wordpress 5.5
improvements gutenberg in wordpress 5.5

New Block Patterns

You will be able to add block patterns, which are combinations of blocks commonly used together. Text and media, two or three buttons in a row, headers with text, you name it. This is a great way to save time when you write your blog posts and an encouragement to be more creative with your content design.

block patterns in WordPress 5.5

Inline Image Editing

During WordCamp Europe 2020 Online, Matt Mullenweg, co-founder of WordPress.org and Matias Ventura, one of the leading engineers of the Gutenberg project, gave a demo of this new feature. You can now zoom, crop, and rotate images directly into the block image. You can see it for yourself in the video recording of the conversation and think about how this can also speed up and improve your editorial workflow. 

And much more

With eleven versions of Gutenberg going into WordPress 5.5 as you can imagine there are a lot more exciting features included. To see them all in detail, you can check out the release posts in the Core blog.

Accessibility Changes

No WordPress major release would be complete without some Accessibility improvements and 5.5 is no different. In this release a number of changes were introduced, with these being the most notable:

  • The first iteration of alternative view modes for list tables
  • Link-list widgets can now be converted to HTML5 navigation blocks.
  • Primary buttons actually look disabled when they are disabled
  • Meta boxes can now be moved with the keyboard.

Pro Tips For Developers

There are a lot of changes under the hood as well, which will be especially interesting for our developer customers. Don’t forget to check the Field Guide with all the Dev Notes related to major changes. I would also recommend you sign up for the Core blog: it’s very active and it’s the best way to keep up to date with changes that might affect your code. The more time you have to test changes, the better… don’t wait for release day to discover that something broke.

Over to you

Have you tried some of the things mentioned above, maybe through the Beta Tester plugin or the Gutenberg plugin? Even if you haven’t tried anything yet, what are you excited and curious to try?

[subscribe_cta]

Keyword Analysis and Selection – Master the Art of SEO

In my last SEO article, we explored my favorite tools sources for building up a robust keyword universe and got some excellent keyword research tips. In today’s article, I’ll walk through evaluating these keywords for usage within your website or blog, or, in other words, we’ll learn how to do keyword analysis. 

We’ll also review how to easily locate Google search volumes, we’ll learn what search intent is and why it matters, and then I’ll provide some additional insights into narrowing this list for the best keyword opportunities to win in search and convert these searches into revenue.

Creating a Solid Keyword Strategy by Pulling Search Volumes for Your Keyword List

The last time we were together I gave readers all my favorite tools for finding keyword ideas and options, then I had tasked readers with the process of researching keyword phrases. 

Now that you have your list of keyword ideas, it is time to pull data on the phrases so you can decide which keywords would be best to use on your website or blog. 

We can’t target everything, so we need to pick and choose wisely. I like to use data for this phase of the planning process. Data helps guide me down the right path and it helps me stay away from futile pursuits of unrealistic keyword options.

For this task, I love using KW Finder for the purpose of keyword analysis. Actually, it’s the only SEO tool I’ll use for pulling data on keyword volumes, trends, and trends.

Using KW Finder for Keyword Analysis and Selection

  • Start by going to https://app.kwfinder.com/.
  • Locate the Import option in the top navigation bar.
  • Once there you can drag your file over from your hard drive, copy and paste keywords straight into the tool, or use the Choose a file button to import a file.
creating keyword strategy with kw finder
  • In this example, I used copy and paste, when set my location to the United States.
  • Next, I simply click on the green Process Keywords button.
  • Once the import occurs, I’ll see a fresh screen that shows all my keywords with search data specific to the United States.
keyword analysis
  • I can sort the columns by their headers to start viewing my keywords ranked by criteria like monthly search volumes, PPC ad costs, or keyword competition.
  • I can also click on any keyword row to see ranking data and trends on the right side of the page. This will help you see if a keyword is moving up or down with popularity and if you’d have easy or hard competitors. In the below example, SEO consulting has been trending down. My agency page (Web Savvy) is in position six on Google and it has some stiff competition from websites like Clutch.co and OutspokenMedia.com. Both have solid domain authority and backlinks. 
keyword selection and evaluation
  • I can view this data online and easily export my SEO keyword analysis to Excel. To do so, I simply click the check all box and then Export. I’ve highlighted both in red below.
exporting keyword research to Excel
  • The next step is to review the data offline. This export will look like the following once I eliminate the columns I do not want.

This data will help me evaluate keyword phrases to decide if they are something I would like to focus on as I move forward with keyword mapping and creating an editorial plan.

Understanding Search Intent is Key when it Comes to Keyword Analysis

 Before we start finalizing keywords, we need to take a step back and think about search intent. This will keep us from going down a path of inaccurate phrases that don’t align with our target market and offering.

Search intent sounds scary, but you don’t have to let it be intimidated. The concept isn’t that hard to understand if you try and think like Google.

Search intent simply refers to a human’s intentions when performing a search. For example, when a user searches in Google for “hot dog” did he mean a dog that is hot from the sun or did he really want results that pertained to the food hot dog? 

what is search intent in keywords

Understanding what the user expected to receive for a given search phrase is search intent. You might be surprised to know Google is pretty darn good at figuring this out these days.

The Different Types of Search Intent

There are four main types of search intent and they are:

  1. Navigational – Navigational searches are performed with the intent of surfing directly to a specific website. These are direct searches for a brand, company, website, or a person.
  2. Informational – This is the largest category and typically represents people looking for quick answers like recipes, sports scores, local weather, the cure to their current ailment or illness.
  3. Commercial – Investigational searches (leading up to purchaseс) that help a buyer find information. These could be consumer or business-related.
  4. Transactional – These searches are largely for purchases or completing a task such as signing up for a service.

In my above list of keywords, the phrase “what is digital marketing” is an informational search. The user is searching for information and not yet ready to purchase. In this search term results we’ll see a mix of Google’s Knowledge Graph data that includes a Knowledge Panel, People Also Ask, Videos, Top Stories, Business Industries, and Creative Hobbies.

search intent in seo

The search term “SEO consultant” would be more commercial or transactional, because it indicates that the searchers are now looking for someone to help do digital marketing for them. Google knows this phrase is for a person to do SEO, so it places the local map results at the top of the search engine results screen.

different types of search intent

Takeaway: A key takeaway here is the search intent matters to both national and local searches. Google My Business uses search intent to determine what phrases to associate to map-based results.

Does Search Intent Really Matter to Website Owners?

Many years ago, we used to be able to manipulate search results because search intent was not as important as it is in today’s search environment. By “manipulate” I mean I could reach for phrases that are outside my core focus area.

In today’s world of SEO, it is much more difficult to stretch for keywords and phrases that don’t directly relate to your content. The reason for this is Google is smart and Google understands what the user wants and will make sure the results match up closely to this want.

Don’t stray from search intent or you will find yourself frustrated and sitting on page 20 of the search engines results page!

[subscribe_cta]

Narrowing Your Keyword List Based on Relevance

You will not rank on every keyword phrase you want, so you have to pick your battles. I like to start with a large list as I brainstorm ideas, then I reduce those down to a manageable level.

As you go through your keyword list to make your selection, you always have to stay focused on your target market and what they need. This is why we started our articles series spending so much time on website personas and your target markets’ pain points!

Review each phrase in your list and think through what phrases would appeal most to your audience. And then think through how these phrases align to what you offer. If a phrase doesn’t match up to your target market and your offering you need to eliminate it.

A Few Tips to Keep You Sane and Successful

1. Know That with Keyword Zero Isn’t Really Zero

The search volumes you see will present blank values at times and this blank indicates a zero search volume. That said, zero isn’t really zero and I have actual Google data to support this theory.

As part of my seed list development process, I will pull phrases from Google Analytics and Google Search Console. These phrases were used by a real human to reach my website or that of my client. Thus, I know there is a search volume for these phrases.

When I plug these phrases into KW Finder, I receive zero search activity. How can that be since KW Finder pulls its data from Google’s API? After all, there is search volume and Google Search Console told me so.

It is a mystery and the only answer I can come up with is that Google doesn’t consider the phrase pay per click-worthy, so it fails to show volume.

This is frustrating to me and it will be frustrating to you. So just remember zero may mean zero or it could just be that Google won’t provide data.

2. Review PPC Bids 

Let me state that I am not suggesting PPC and the payment for ads. I’m an SEO girl through and through. That won’t change anytime soon.

That said, I do like to look at PPD bid amounts because I think this data point can be an indication of high converting search terms. We want high converting search terms, so always review PPC amounts to see if you’d like to grab organic search for those terms.

3. Prioritize Your Keywords

Now that we have our list of keywords and search volumes, we can begin reviewing these in detail. I like to do this using a scoring methodology. 

I give a simple rank of 1-High, 2-Medium, 3-Low, and 4-None to phrases as I review them. The numbers will allow us to quickly sort the spreadsheet by ranking. 

As you rank your keyword phrases you are ranking them in order based on how closely they align to your target market, their pain points, and what you do to solve those pain points. I’m repeating myself here and this is because you need to stay mindful of this idea as it is the core of successful keyword research and selection.

In my above examples, I pulled searches for PPC and SEO terms. I only really do SEO and Google knows this, because it knows who I am and what I do. It would be a waste of my time to target PPC terms since I won’t sell anything PPC related. I’m better off staying close to what I do and targeting those phrases. Thus I would eliminate any PPC related phrases as they will be a waste of my time and effort.

Before you fully sign off on your targeted keyword list, I want you to review them in Google’s search results. This is an easy task, but an important one!

Here are the steps:

  1. Grab your list of targeted keywords. 
  2. Open up a fresh browser window with no history or signed in accounts to Google. I typically use Chrome for all my normal activity and use an alternate browser like Firefox for searches because I have it set to store zero history.
  3. Take your first focused keyword phrase and search for it on Google. Then take a moment to review the results. 
  4. Ask yourself some questions:
  • Do the search results align to my target market?
  • Do the search results align to what I offer?
  • Do the search results include national, local, or a mix of results?
  • How good is the content presented? Is it old and dated or short and incomplete?
  • Can you create better content?

Finally, remove anything that scares you or just doesn’t seem like a fit.

Finalize Your Keyword List

Now that you’ve gone through keyword prioritization and vetting your terms in search, you should have a solid list of phrases to use in keyword mapping.

Before we move onto that, I want to answer one question I am always asked: How many keywords do I need to finalize? 

There is no firm answer because it varies greatly by the type of website or blog, industry, geographic focus, etc.

Just select an amount that feels like it will help provide you with a solid plan for moving forward with SEO. If you have enough keywords to bring in the traffic you want, then you should be good to go. At least for now. I tend to do keyword research every six months and once you start, you’ll probably want to too.

Coming Up Next!

We’ve come a long way together in these first three articles and we’ll continue our SEO journey next with keyword mapping and content planning. 

Once we wrap up our keyword mapping you’ll have a solid plan and strategy for SEO efforts!

[subscribe_cta]

Securing User Passwords with “Have I Been Pwned”

securing passwords

Most developers are familiar with the website “Have I Been Pwned?“. Most non-developer and non-techie people have probably never heard of it. That’s ok, that’s what this blog post is for – to not only tell you about it, but to show you how to use it to keep your WordPress site safer.

First, the term “Pwned” originated in a game. It was a typo because the letters “P” and “O” are so close to the keyboard. Like many good mistakes in gaming, it was appropriated and now is common slang in technical and gaming circles for “Owned.” Depending on the context, it can mean that someone really beat you bad in a game, or that someone has compromised your server and now has access to it. Either way, you’ve been pwned. Pwned is never a good thing. 🙂

What’s “Have I Been Pwned?”

The website “Have I Been Pwned?” is more tech than a game. It was set up by Troy Hunt because, after every major data breach, he would do a post breech analysis of the data released over and over again, and see the same credentials and passwords being used. When a data breach occurs, the attackers will sell or release any user credentials they obtain.

Most users have the bad habit of reusing logins and passwords, so the credentials that work on one site may also work on another site. Thus if a user’s data is released from one site, it can be potentially disastrous for a user because the attackers can try their login and password on a multitude of other sites and gain access to more and more sites and data.

How to Use It?

So Troy gathered any data he could get from a data breach and put it all in one big database. Then he built a website where you can enter your email address and see if it was included in any of the breeches he has access to. Just for fun, go ahead, click the link and check your email address. You’ll probably be surprised, and not in a good way, pwned is never a good thing. 

These days the website also provides an API that other websites can use. The main function of this website is to prevent a user from reusing a password that has already been compromised. WordPress has several plugins that hook into the registration process and check the password a user is trying to use against haveibeenpwned.com’s API. The API takes a prefix of a “hash” of the password. The password itself is never sent across the wire. It returns all the hashes that start with that prefix.

The plugin then looks for its exact hash. If it finds it, it will give the number of times that password has been released, regardless of the site that was breached or the user name. The plugin then makes a decision on whether or not to let the user use that password.

This, by itself, will not make your site safe. As I discuss in “Is My Website Safe”, there is only one way to secure a computer from the Internet – turn it off. However, adding this layer to your security stack is one more way to make it more secure. Add enough layers of security, and your site is not an easy target, so attackers move on to another one.

[subscribe_cta]

Free CPU and RAM Added to All our Cloud Accounts

Starting today we are increasing the resources available to all our new and existing cloud plans with 1CPU Core and 2 GB RAM at no additional cost. The upgrade will make our cloud service faster and more reliable than ever. During the last few months, we have implemented multiple service improvements and the current cloud update is another enhancement made possible by our recent switch to Google Cloud Platform.

More Value With Our Managed Cloud Service on GCP

When we decided to move our infrastructure from bare metal servers to cloud infrastructure, we wanted to get the most out of that switch. We considered all the data redundancy factors, network capabilities, and of course the speed of the new platform compared to the old infrastructure. What was offered by Google Cloud on these parameters was really impressive. We knew that even the mere switch from the previous platform to the new one would result in performance improvements. But what motivated us, even more, to move to Google Cloud Platform were the opportunities we saw to optimize our resource usage, become more efficient and give more value to our clients. The current cloud upgrade is a direct result of the optimization opportunities we have on the new platform. Now our cloud services are not only hosted on a better infrastructure provided by Google Cloud but also receive more resources at the same price as before.  

New Clouds – More Resources at the Old Price

All our cloud offers now come with 1CPU Core and 2 GB RAM more without any change in their current price. Therefore, our entry cloud plan now includes 3CPU cores, 6 GB RAM, and 40 GB space at just 80 USD per month*, which sets the base for any configuration of CPU, RAM, and storage that you wish to create. Additional resource units can be added to this new base at the same prices as before. 

Current Cloud Plans – a Free Upgrade

In the next few days, all our existing cloud users will also receive a free update of their cloud features and will have 1CPU Core and 2 GB RAM added to their existing plan. 

No downtime is expected during this upgrade. However, the option to upgrade or downgrade cloud resources will be temporarily disabled in the Client Area during the upgrade process. Only the Autoscale option will be available to accommodate any urgent need for additional CPU or RAM that may arise during the short period of the feature update. 

* Prices depends on geographical region of the client starting from: 80 USD/mo; 64 EUR/mo; 48 GBP/mo; 80 AUD/mo

[subscribe_cta]