How to do Magento 2 performance optimization ?

Magento 2 is a pretty complex application. If you did not configure it correctly you will find it very slow. To do performance optimization, I am adding some pointers here as follows.

  1. Image optimization and lazy loading
  2. JavaScript optimization
  3. Font Optimization
  4. CSS optimization
  5. Caching techniques
  6. Server optimization
  7. Latest version of everything
  8. Light Weight theme
  9. Production mode
  10. Database optimization
  11. Code optimization
  12. Disable non required module
  13. Latest protocol http2
  14. Using Facade pattern for chat loader
  15. Serving static data from non cookie domain

How to do Magento 2 performance optimization ? Read More »

Securing Your Magento 2 Store: Defending Against Search URL Spamming with a Custom Solution

As an e-commerce platform, Magento 2 offers robust features to create a seamless shopping experience for customers. However, one aspect that often requires attention is protecting the search URL from spamming. Unchecked spam can not only disrupt the search functionality but also hinder the overall performance of your Magento 2 store. In this article, we will explore the challenges posed by search URL spamming and discuss a custom solution to mitigate this issue effectively.

The Challenges of Search URL Spamming:

Search URL spamming occurs when malicious users or bots exploit the search functionality to flood the system with irrelevant or harmful queries. This can lead to various issues, including:

  1. Server Overload: The continuous influx of spam requests can cause server overload, leading to slow website performance or even crashes during peak traffic periods.
  2. Negative User Experience: When spam queries flood the search results, legitimate users may struggle to find relevant products or information, resulting in a poor user experience.
  3. Impact on SEO: Excessive spamming can negatively impact your website’s rankings, as search engines may perceive your site as providing poor quality or irrelevant content.
  4. Data Integrity: Spam queries can also affect the integrity of your data, making it challenging to extract meaningful insights or analyze customer behavior accurately.

To protect the Magento 2 search URL from spamming, I have developed a custom solution that combines several techniques to ensure a secure and efficient search experience. Here’s an overview of the solution:

Rate Limiting: Implementing rate limiting mechanisms allows you to control the number of requests a user or IP address can make within a specific timeframe. This helps prevent spamming by restricting the number of search queries from a single source.

Query Validation: Implement a robust query validation system to check the validity and relevance of search queries. By filtering out spam queries or those that do not meet certain criteria, you can ensure that only legitimate and meaningful searches are processed.

Please find the GitHub link for it: https://github.com/kushaljindal92/rate-limiting

Note: This works only for English websites, but you can update your regex as per your language.

Securing Your Magento 2 Store: Defending Against Search URL Spamming with a Custom Solution Read More »

Magento 2 Cloudflare integration hosted on AWS with load balancer

Integrating Magento 2 with Cloudflare while hosting on AWS with a load balancer can provide enhanced performance, scalability, and security for your e-commerce website. Here’s an overview of the integration process:

  1. Set up Magento 2 on AWS:
    • Provision AWS infrastructure with EC2 instances for hosting Magento 2.
    • Configure an Amazon RDS database for storing website data.
    • Set up an Elastic Load Balancer (ELB) or an Application Load Balancer (ALB) to distribute traffic across multiple instances.
  2. Configure Cloudflare:
    • Sign up for a Cloudflare account and add your website.
    • Update your domain’s DNS settings to point to Cloudflare’s nameservers.
    • Enable Cloudflare’s CDN (Content Delivery Network) to cache and deliver static content globally.
  3. Configure Cloudflare Load Balancing:
    • Set up a Load Balancer in Cloudflare to distribute incoming traffic across your AWS instances.
    • Configure health checks to monitor the availability of your AWS instances.
    • Define load-balancing methods and rules based on your specific requirements.
  4. Enable Cloudflare Security Features:
    • Activate Cloudflare’s DDoS protection to safeguard your website against malicious attacks.
    • Enable Web Application Firewall (WAF) rules to protect against common web vulnerabilities.
    • Implement SSL/TLS encryption by enabling Cloudflare’s SSL/TLS feature or using your own SSL certificate.
  5. Optimize Performance:
    • Utilize Cloudflare’s performance features like Auto Minify to compress and optimize HTML, CSS, and JavaScript files.
    • Enable Brotli or Gzip compression to reduce file sizes and improve page load times.
    • Leverage Cloudflare’s Railgun technology for faster delivery of dynamic content.
  6. Fine-tune Cloudflare Settings:
    • Customize caching rules to ensure optimal caching of Magento 2 pages and resources.
    • Configure Page Rules to implement specific behaviors for different URLs or sections of your website.
    • Utilize Cloudflare Workers for advanced customization and logic implementation.
  7. Test and Monitor:
    • Thoroughly test your Magento 2 website after the integration to ensure proper functionality and performance.
    • Monitor website performance and security through Cloudflare analytics and monitoring tools.
    • Regularly review Cloudflare logs and reports to identify any potential issues or suspicious activity.

By integrating Magento 2 with Cloudflare while hosting on AWS with a load balancer, you can leverage the power of Cloudflare’s CDN, security features, and performance optimizations to deliver a fast, secure, and reliable e-commerce experience to your customers.

Magento 2 Cloudflare integration hosted on AWS with load balancer Read More »

Magento 2 checklist

Magento 2 Website Go-Live Checklist: Ensure a Smooth Launch

Are you preparing to launch your Magento 2 website? Before making it live, it’s essential to conduct a thorough review to ensure a seamless and error-free user experience. To help you, we’ve compiled a detailed checklist covering every aspect. Let’s dive in:

  1. Content Review:
    • Ensure the accuracy, grammar, and spelling of all website content.
    • Verify the correctness of product descriptions, images, and prices.
    • Double-check static pages (About Us, Contact Us, etc.) for accurate information.
  2. Website Design and Layout:
    • Review the overall design and layout, ensuring consistency and branding.
    • Confirm that your website is mobile-friendly and responsive across devices.
    • Test page loading speed, and fix any visual or formatting issues.
    • Verify navigation menus and links for smooth functionality.
  3. Functional Testing:
    • Test the search functionality for accurate results.
    • Verify the shopping cart and checkout process, including discounts and purchases.
    • Ensure proper functioning of email notifications for orders, shipping, and payments.
    • Test user registration and account creation features.
    • Check for broken or incorrect links throughout the website.
    • Evaluate compatibility and functionality of custom modules or extensions.
  4. Performance Optimization:
    • Optimize images to reduce file sizes and enhance website loading speed.
    • Enable caching to improve overall performance.
    • Minify and compress CSS and JavaScript files.
    • Enable GZIP compression to reduce file sizes during data transfer.
    • Measure website performance using tools like Google PageSpeed Insights or GTmetrix.
  5. Security:
    • Update Magento 2 to the latest version, including security patches.
    • Implement SSL (Secure Socket Layer) encryption for secure data transmission.
    • Set up robust passwords for admin and user accounts.
    • Enable Two-Factor Authentication for enhanced security.
  6. SEO Optimization:
    • Set up relevant meta tags, including title tags, meta descriptions, and keywords.
    • Optimize the URL structure for better search engine visibility.
    • Implement XML sitemaps and submit them to search engines.
    • Use canonical tags to prevent duplicate content issues.
    • Verify indexing and crawlability for search engine optimization.
  7. Payment Gateway and Shipping Methods:
    • Test payment gateway integration to ensure seamless processing.
    • Verify the accuracy and functionality of supported payment methods.
    • Thoroughly test shipping methods and rates for precise calculations.
  8. Backup and Disaster Recovery:
    • Set up regular backups for your website and database.
    • Test the backup and restore process to ensure data recovery readiness.
  9. Cross-Browser and Cross-Device Compatibility:
    • Test your website on different browsers (Chrome, Firefox, Safari, Edge) for consistent functionality and appearance.
    • Ensure your website is responsive and compatible with various devices (desktop, laptop, tablet, mobile).
  10. Legal Compliance:
    • Comply with data protection and privacy regulations, such as GDPR or CCPA.
    • Review and update your website’s privacy policy and terms of service, if applicable.

By following this comprehensive checklist, you can minimize the risk of encountering major issues during the launch of your Magento 2 website. Conduct thorough testing across all aspects to provide a seamless user experience while maintaining functionality, security, and search engine optimization.

Below is use case or on more granular level.

Functional Components are to be validated before making it live, Please comment on things I missed to create a global list.

  1. Search results
  2. Minicart
  3. Banner/Sliders
  4. Contact form/forms
  5. Customer account create/Login/Logout
  6. Filters
  7. Megamenu
  8. Paginations
  9. add to cart/add to wishlist
  10. emails
  11. shipping method
  12. payment methods
  13. Tax
  14. product listing
  15. reviews display and posting
  16. indexing status and working
  17. Admin login/logout/creation
  18. place order
  19. captchas if enabled
  20. sale rules/discount configured
  21. pages/blocks/widgets –> creation/updation/deletion
  22. sitemap
  23. index.php/.htaccess configuration for multi-website
  24. newsletter
  25. cron configurations
  26. SEO/pixels
  27. third party modules functionality
  28. Reporting
  29. Speed page insight

Magento 2 checklist Read More »

Image Optimization For best performance in Magento 2

In webpages, Most of the bandwidth is taken by images and it affects webpage performance drastically. So, Image optimization becomes important for the best performance. I will not turn the wheel again. I will add the most important information here only.

Lazy/Preload loading for image optimization

Concept: You can take a look at it here.
Solution: You can use a free extension from mageplaza here.
Documentation: Documentation of extension can be found here

Layout shift for image optimization

Concept: You can take a look at it here.
Solution: The solution is itself in the above link. You can add height and width for images.

Image compression/Image format/Image size

Concept: Always use images with good compression and the size of images should be as per requirement.
Solution: Optimizer, Converter

Sprite Images for image optimization

Concept: This concept is used when there is a no of small images. we combine them in one image to reduce no of requests on the server.
Solution: you can find a good tool to create CSS sprite images here

Responsive images for image optimization

Concept: You can take look at it here
Solution: The solution is itself in the above link. You can add height and width for images.

You can find more information for speed optimization here

For custom requests, you can contact me here

Image Optimization For best performance in Magento 2 Read More »

Install composer 1.10 using php composer

Copy and paste this in terminal and hit enter. Composer version 1.10.23 will be installed in local directory. you can use it as php composer.phar install

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --version=1.10.23
php -r "unlink('composer-setup.php');"

Install composer 1.10 using php composer Read More »

Magento 2 backup script for developer

Magento 2 developer usually require taking backup of live environment and setup on local or creating staging environment. We need to take backup of Database, App folder and composer.json minimal. We can add media and other assets for full fledged setup. I created a simple script to create backup of these two folder after reading env.php file. It will decrease time to take backup. We just need to put these script at root and run it. It is very flexible and you can make changes to your requirement as well. I will keep updating it and will add new features.

<?php 
//create backup file
$envData = include('app/etc/env.php');

//taking database backup
echo "Taking database backup \n";
if(isset($envData['db'])){
    $mysqlDump = 'mysqldump --user='.$envData['db']['connection']['default']['username'].' --password='.$envData['db']['connection']['default']['password'].' --host='.$envData['db']['connection']['default']['host'] .' '.$envData['db']['connection']['default']['dbname'] .' > db.sql;'; 
    exec($mysqlDump);
}

//zipping files
echo "Zipping required files to setup environment \n";
exec('zip -r files.zip db.sql composer.json app/');

die('finished');
?>

Magento 2 backup script for developer Read More »

Magento 2.x – Cannot process definition to array for type tinytext

I faced issue while setup:upgrade in magento 2 instance. I fixed this issue in three steps as below.

Step 1: I open this file : /vendor/magento/framework/Setup/Declaration/Schema/Db/DefinitionAggregator.php

Find this function and replace code:

   public function fromDefinition(array $data)
    {
        $type = $data['type'];
        if (!isset($this->definitionProcessors[$type])) {
            echo "<pre>"; print_r($data); exit();
            throw new \InvalidArgumentException(
                sprintf("Cannot process definition to array for type %s", $type)
            );
        }
        $definitionProcessor = $this->definitionProcessors[$type];
        return $definitionProcessor->fromDefinition($data);
    }

Step 2 : Run setup upgrade and you will find out column name and it’s details. Now login in to mysql console and replace invoiceNumber by column which we found in last step. You will get all table information.

SELECT table_name, column_name from information_schema.columns WHERE column_name LIKE '%invoiceNumber%';

Step 3: Now update that column using below command. Run again setup:upgrade

ALTER TABLE TableName MODIFY InvoiceNumber VARCHAR(250);

Magento 2.x – Cannot process definition to array for type tinytext Read More »

Remove magento 2 redundant modules

Magento 2 has added lot of new module and feature as compared to magento1x. It has some hidden dependencies. so, it slowdown magento 2 store. It is most common list of modules which generally do not required. You can add and remove module as per your requirement. You just need to add these modules in composer.json file and then run composer update.

"replace": {
        "magento/module-authorizenet": "*",
        "magento/module-google-adwords": "*",
        "magento/module-send-friend": "*",
        "magento/module-signifyd": "*",
        "magento/module-bundle-graph-ql": "*",
        "magento/module-catalog-graph-ql": "*",
        "magento/module-catalog-inventory-graph-ql": "*",
        "magento/module-catalog-url-rewrite-graph-ql": "*",
        "magento/module-cms-graph-ql": "*",
        "magento/module-cms-url-rewrite-graph-ql": "*",
        "magento/module-inventory-graph-ql": "*",
        "magento/module-configurable-product-graph-ql": "*",
        "magento/module-customer-graph-ql": "*",
        "magento/module-downloadable-graph-ql": "*",
        "magento/module-eav-graph-ql": "*",
        "magento/module-graph-ql": "*",
        "magento/module-grouped-product-graph-ql": "*",
        "magento/module-quote-graph-ql": "*",
        "magento/module-store-graph-ql": "*",
        "magento/module-swatches-graph-ql": "*",
        "magento/module-tax-graph-ql": "*",
        "magento/module-url-rewrite-graph-ql": "*",
        "magento/module-weee-graph-ql": "*",
        "temando/module-shipping-m2": "*",
        "dotmailer/dotmailer-magento2-extension": "*",
        "klarna/module-kp": "*",
        "klarna/module-ordermanagement": "*",
        "klarna/module-core": "*",
        "amzn/amazon-pay-sdk-php": "*",
        "amzn/amazon-pay-and-login-with-amazon-core-module": "*",
        "amzn/login-with-amazon-module": "*",
        "amzn/amazon-pay-module": "*",
        "vertex/module-tax": "*",
        "vertex/sdk": "*",
        "yotpo/magento2-module-yotpo-reviews": "*"
    },

Remove magento 2 redundant modules Read More »

Font optimization to avoid invisible text

Every Magento 2 store needs fonts to display styled text. Like other static assets it use bandwidth. It affects performance, if do not download before text required it. I am adding few suggestions for font optimization and some resources links as well. I will keep updated information for font here

  1. Try to use google font (why? read this link)
  2. Use no more than two fonts and check their size as well.
  3. Load them on priority basis using preload and swap to avoid invisible text during font loading (check this link)
  4. Use proper caching for fonts (check this link)
  5. Use less variants of fonts

You can check complete speed optimization guide Magento 2 speed optimization

Font optimization to avoid invisible text Read More »