WordPress Best Practices (Technical SEO)
Here is a list of best practices that SlickStack embraces and hopes to evangelize. In some cases, these practices are “forced” into our configuration and scripts, and in other cases they are optional but enabled by default. We welcome all feedback in our various community channels.
- ICANN-certified domain registrars. No resellers or reseller APIs to avoid more “hops” and DNS instability.
- Domain expires at least 5+ years in the future. Don’t wait to autorenew your domains every year, if you have a “money” site where reputation matters, show the world you’re in business for the long-term and keep your domains registered at least 5+ years into the future at all times.
- AnyCast DNS only. These days AnyCast is mostly everywhere, but some registrars still don’t use it. If you’re on Cloudflare, AnyCast is active… but your registrar should have it too.
- Centralized DNS records. Do not use your domain registrar to manage your DNS records… incredibly, most domain registrars have a horrible interface, and poor/buggy technology for managing DNS records (with a few exceptions). Instead, use a major DNS management provider like Cloudflare or others to manage all your DNS records in a central location. Technology is great, but often times user error and registrar bugs cause just as many problems (or more). Keeping all your records centralized, and not using an API to access e.g. Cloudflare, goes a long way to achieving stability of your DNS records and independence.
- Avoid using CNAME when possible. A records resolve faster than CNAME and in the age of Anycast DNS, there is less reason to need CNAME anyways. For the purpose of single use cloud servers like SlickStack, there is especially no good reason to use CNAME records.
- Noindex Tags. Tags should be for internal navigation and usability, and not for search engines indexing, at least by default.
- Noindex Author Pages. Blog author profile pages should be noindexed by default, as the vast majority of sites have empty profile descriptions. Usually only high traffic news websites or very tech savvy companies customize the profile pages into something worth indexing by search engines.
- Noindex Archives. There is almost no reason to allow search engines to index date-based archives.
- Noindex pagination (always). There is no reasons to index paginated pages for really any type of URL entity, it only risks duplicate content or low value content penalties. It can also risk a paginated page getting more rank and etc that the proper parent (root) content.
- Avoid certain WordPress plugins. With tens of thousands of WP plugins out in the wild, there are a few categories of plugins you should avoid installing in order to achieve long-term stability, security, and performance.
- Independent custom post types (CPTs). One of the worst trends in recent years is for “premium” WP themes to bundle a plugin or script that generates CPTs that match their design concept. This is a horrible idea, because if you want to change themes, you can’t, and are stuck… until you spend a lot of time or money converting all your old post types into new pages/posts that match the new theme you want to change to. Instead of bundling CPTs, “premium” themes should ALWAYS use or recommend an independent plugin to generate the CPTs, and then within the theme’s settings you can choose (connect) which CPTs should be associated with whatever template/layout. For example, a Portfolio or Real Estate listings post type generated with a third party plugin like the popular Custom Post Type UI plugin can be connected in your theme settings with the proper template or layout. Not only does this accomplish portability, which is one of the main purposes of using a FOSS CMS like WordPress, but it also results in much better stability and security, since bundled CPT scripts are almost always poorly maintained.
- Concatenate JS at the edge: There are not many services offering this feature besides Cloudflare these days. Whenever possible, if you’re going to concatenate (combine/minify) your JS scripts into a single requests and/or defer/async, do this at the CDN edge instead of using WordPress plugins… in Cloudflare, this free feature is called Rocket Loader, and it’s incredibly powerful.