What is Dropshipping: The Ultimate Guide

Dropshipping has gained popularity in recent years; that said, there’s a lot of people who don’t know what dropshipping entails or what it means, exactly. That’s why we’ve created this guide, which will help you to determine whether you should be starting your own dropshipping business this year.

Dropshipping Definition

Dropshipping is a business model where the retailer or business owner doesn’t keep products in stock. Instead, he or she partners with a manufacturer or dropship supplier who ships orders directly to the retailer’s client.

How Dropshipping Works?

Dropshipping is started when a client makes an order. You, the dropshipper, will then send the information to the supplier. The supplier will take the information you send them and have the desired product shipped to the client directly from its warehouse.

Dropshipping Model

The main way to make money through dropshipping is with a commission. That’s because dropshipping business owners don’t have an inventory; instead, they recommend suppliers or retailers to clients.

Dropshipping Model

Benefits and Pitfalls

To help you get a better understanding of whether dropshipping is right for you, here are some of the dropshipping cons and pros you might find in dropshipping.

Benefits

  • When you use drop shipping, you have fewer chances of losing revenue because you don’t have extra inventory.
  • You can use upselling to increase revenue
  • You don’t need to have a storage area
  • Everything is digital

Setbacks and Pitfalls

  • You can expect there to be high competition
  • You might not be profitable for a while
  • Dropshipping is considered unsafe when it comes to products

Dropshipping: Benefits and Pitfalls

Who Can Use Dropshipping and Succeed?

Pretty much anyone can use dropshipping. Still, here’s a small list of the various kinds of entrepreneurs who may want to start a dropshipping business.

  • Beginners: If you’re new to the business world, you may not have a complete grasp on how everything works. Because of this, you may want to turn toward dropshipping for its simplicity and its low-cost.
  • On a budget: Now we can move onto budget entrepreneurs. Other kinds of businesses can require a large startup cost. All you truly need with dropshipping is a domain name and host for the store.
  • eCommerce Business Owners: eCommerce business owners are some of the most qualified to run a dropshipping business. That’s because they likely know their target audience and the tools at their disposal to increase leads and conversions.

How to Start a Dropship Business: Can You Dropship Products Easily?

If everything you’ve read so far sounds good, you may now be wondering how to start your own dropship business without tons of work and procedures.

Investigate a Market

The first thing to do is look at the market you’re interested in delving into. You need to know which niche you’ll be working in and which platform you’ll build your business on. WooCommerce, Shopify, and Magento are all solid options for anyone who wants to start a business.

Magento® provides a large number of extensions so that every site is unique and customizable.

Woocommerce is a free plugin that you can install with WordPress.

Shopify is a good alternative for anyone who is looking to scale their business.

Finding the Perfect Dropshipping Products to Sell

You need to choose your products carefully if you want to have a successful business. If you have specific dropshipping niches in mind, you may want to look at different products that will sell within the chosen niche.

Finding the Right Dropshipping Supplier

Finding the right people to supply your business with products is a must. Since you’re the one taking orders, you want to make sure that your company is reliable. Part of this reliability comes from your suppliers.

If you’re looking for suppliers, you might be finding suppliers for dropshipping in other countries. Dropshipping suppliers USA, for example, often decide to find suppliers in China.

Amazon Dropshipping

If you choose to, you can turn toward Amazon for your dropshipping business. If you want to use Amazon, though, you’ll want to be aware of the following two conditions: you can’t use the name of another supplier for any packaging slips you send to clients and you can’t buy products from a supplier just to have them sent to a customer.

Aliexpress Dropshipping

You can use Aliexpress for any number of items. There are some dropshippers who prefer to specialize in home care, while others work with jewelry more than anything. The great thing about Aliexpress is that it has a large following and you can buy products from suppliers to sell them for the amount you want. Usually, delivery takes significantly longer than other platforms; however, the prices are hard to beat.

Alibaba Dropshipping

The slogan for Alibaba is “Global trade starts here”. This site works like a middleman, which will make a connection between buyers and suppliers so that everyone has the best experience possible. You’ll often find that this site will not charge you money when a transaction is made.

eBay Dropshipping

When you decide to use eBay, you’ll have complete responsibility for the quality of the service. If a supplier doesn’t send a package on time, for example, you’re held responsible. Because of this, you need to choose the right suppliers.

Find Clients

Your entire business relies on the clients you have. When you have loyal clients, you can trust that your dropshipping store will become successful. Still, you have to find these loyal clients.

The first thing you should do is turn toward your close friends and relatives. If they order your products and like what they receive, you can ask them directly to leave you reviews. You should also look into your different marketing options to determine how you can reach a large number of people.

Streamline Business Processes: Taking and Sending Orders

Dropshipping works efficiently because the dropshipping company does not need to have any inventory; instead, the dropshipper will receive an order from a customer and will send this order to the supplying company. This company will then send the order to the client or customer.

In doing so, dropshippers can save themselves a significant amount of time and can focus more on customer service.

Running Your Drop Shipping Business

Dropshipping itself is rather straightforward; however, there are a few things you can do to increase your chances and successfully running a dropshipping business.

Start Dropshipping in Social Media

If you want to succeed in this business, you need to consider social media. That’s because platforms like Twitter, Instagram, Facebook, can provide you with an unlimited number of options. You can create different accounts to improve your SEO. You can also decide to buy ads that will show up on the profiles of potential customers.

Create a Simple eCommerce Site

Creating your dropshipping site is easy because you don’t need much to complete it. All you truly need is to have a domain name. You can use platforms like WordPress, Shopify, or Magento to create your online store. You can use extensions to personalize this store and to ensure that your customers know what they can expect when they order from you.

Growing Your Dropshipping Business

We want to share some practical steps that we’ve collected from the most successful entrepreneurs, and you can use them after you start your dropshipping business.

  1. Try to check the supplier with your own order. Buy some product and ship to you and your friend’s address, and check the delivery time, package and all the discussed conditions.
  2. Use only the effective advertisement on the Internet, but from the beginning use the free options. With the verified advertisement methods, you can test your business model faster and more effectively.
  3. Spend little by little. Don’t use big budget and analyze your actions, and you will come up with revenue.
  4. Try to focus on the products that you interested in, because you may sell them with more probability.
  5. Analyze the level of competition, because some product line has it at a high level and for the newcomer, it might be harder to carve out a niche.
  6. Besides the dropshipping, you can try to earn money with an affiliate program.

Overall, you’ll have to focus on your customer service and marketing if you want to succeed.

How to Grow Your Clothing Business: 9 Practical Tips

Are you planning to grow your commercial business? Read our 9 marketing tips, try them, and see the results right away. 

Tip 1. Develop Your Brand

First, what you need to do along with defining your target audience is to create your brand visuals and overall brand identity. If you want to be memorable in people’s minds, you need to have a “face” of your business. This includes logo, mission, vision, and making the list of what type of clients do you serve to. After the research of the market, customers, and competitors, you are ready to make your brand standing out from the crowd.

Tip 2. Build a Sales Funnel

If you want to have a successful business, there are a few things you should do first. A sales funnel is the journey your customers make on their way to purchasing your products. To know more about how to build a sales funnel, read this paragraph.

Research the Audience

If you want to build a business, you need to know who’s going to be shopping at your store. You also need to understand what your potential customers expect of you so that you can figure out how to meet their needs.

In the process, you should research what your target audience doesn’t like about shopping. You can use Google Trends and statistics from leading research websites like Statista to predict what the demand will be on your product.

Create Buyer Personas

Because your customers are unique, you’ll want to create different personas that are based on several factors. You’ll want to consider why different people buy their products, how they use products, and what motivates them to purchase products.

When you consider all these factors, you’re going to create your buyer persona. You will write their age, gender, salary, and particular user flow to show why they will buy your product. Then, you name each persona. Next, you will have your 3-4 buyer personas and will use them to create your marketing strategy.

Tip 3. Develop eCommerce Business Marketing Strategies

This part is especially useful if you’re wondering how to grow your sales. The way you market your business is one of the most critical factors in running it. This will help you to attract customers, increase the number of your leads, and double your sales results.

Create Valuable Content

When you have a qualitative content as one of the points in your marketing strategy, this ensures that your customers keep coming back. That’s because your customers will be interested in what your business has to say, and as such, you can see your sales increase drastically.

Examples of valuable content include blogs, videos, social media posts, advertisements. Look at famous brands’ examples. Puma made a campaign called #rundalism that has gathered Puma running teams from all over the world to conquer half marathon in the Lisbon.

Why did they do it?

First, to attract customers’ attention to their Hybrid collection of sneakers. They’ve gained the loyalty of people by making the event in Lisbon and used different channels to promote the whole campaign (Instagram, YouTube).

Also, like sportswear and accessories company, they used influencers, professional runners, and enthusiasts to attract different people to jogging as a lifestyle. An excellent way to improve your business’s content is to have influencers develop it. As such, your customers can read about your products from people who have tried them.

Involve Influencers

Influencers are some of the best ways for you to spread the word about your clothing store. You can send them free samples of your clothing so that they can post their personal opinion about your products. This will give your customers a real sense of your business, and they’ll be more inclined to buy from you. Influencers can create a video, photo, and other content types based on your marketing strategy and needs. It will save you time and make your content richer and customer-oriented.

To effectively start with influencer marketing, try some useful tools to find them, and analyze the results of your cooperation:

  • HypeAuditor – help you to find the best influencers in Instagram and get the report about their account activity to choose the best match for your clothing brand;
  • Brandwatch – explore the database of Twitter users and find influencers to reach the right audience;
  • Kred – paid tool for finding influencers as well as monitoring, analyzing, and involving them to your marketing campaigns;
  • Traackr – a program for managing your influencers’ network and measure the results of content, events, and campaigns with them.

We also found a great example of successful influencer marketing from Boxed Water. They use micro-influencers from Instagram to attract people to their environmental initiative campaigns.

Boxed Water’s Post on Instagram

Thousands of influencers and their followers are involved and participate in initiatives called Better Planet. It is great when you commit to world problems and promote your brand through social and environmental initiatives.

Try to identify the demand by creating a sustainable clothing line and use it as the advantage of your brand. You can check the examples of Scandinavian clothing stores and their sustainable campaigns in our previous article.

That’s not all. Next, you will explore how to connect with your customers in other ways.

Tip 4. Identify New Opportunities

Recognizing when you have an opportunity to improve your marketing strategy, it’s important to use all possible ways to attract customers to your store by providing them something valuable.

Build an Email List

You can do this by creating a pop-up section on your website so that interested customers can sign up to receive emails. In doing so, you can provide them with updates and information about your online clothing store. You can also add a subscription box to your footer, add an abandoned cart extension to return customers to their carts.

Look at the example of Riley Rose – Forever 21 beauty boutique. They made a recognizable pop up on the main page by giving 15% off for the subscription.

Riley Rose Pop Up on the Website’s Main Page

The second great placement for an email subscription box is a footer. They named customers who will join their newsletter as VIP clients. That makes it a unique personalization for any customer to feel valuable.

Riley Rose Subscription Box on the Footer Area

Create a Customer Loyalty Program

This is one of the best ways for you to get your customers to spend more money more often. Clothing companies like Forever 21 have been doing this for years. This company provides customers with points for every dollar they spend, and after they’ve accumulated enough points, the points translate into money they get back. For every 300 points they gain, they earn $5.

Tip 5. Open a Pop-Up Store to Test a New Market

If you want to test out a new market, you should consider using a pop-up store to help you decide whether your products would work in this market. That’s because you never know how you’re going to do in a new city or with a new target population and as such, a pop-up store is more effective than immediately renting out space.

Tip 6. Partner with Other Companies

You may want to collaborate with a famous brand to develop your fanbase more efficiently. When brands collaborate and create eCommerce business partnerships, their fanbases can be combined. As such, you may find your consumer base increase considerably when you decide to do this.

An example of this is H&M and Kenzo, who launched their collection in 2016. This eclectic collaboration was named Kenzo X H&M and was designed for customers to have the perfect summer look.

Kenzo X H&M Collaboration

Tip 7. Learn From Other’s Examples

If there’s anyone you particularly admire or a business plan that you want to model, you may want to consider researching how these business owners have run their businesses. This can provide you with a good idea of how you can improve your business and how you can adopt more efficient strategies to grow it.

Watch the video about how to create an eCommerce brand with Gretta Van Riel, an eCommerce entrepreneur who run 4 businesses and made 8 figures selling products online.

Tip 8. Keep Your Eyes on Trends

When you have a clothing brand, it’s important that you keep up with trends. This will ensure your clothing is always in style and as such, you don’t have to worry about your customers outgrowing your clothing.

Market Most Popular Products

If you already selling some products that you think won’t make you succeed, you need to look at the trending products to sell. These are the products that are popular all over the world or in specific markets. We can’t provide you with a full list of such products, because the trends are changing continuously. However, we have a complete guide on how to search and monitor changes in trending products.

Tip 9. Diversify Your Product and Service Offerings

One of the best ways for you to reach a large number of people is to have a different way to promote your existing products for new consumers or find a new market opportunity to expand your current product line. The more diverse your products, the more people you can speak to. When it comes to clothing, every individual has their style, and if you can produce products that talk to some of them, you’re ensuring that your store will be selling more.

Consider a Franchise Model

There are all kinds of business models that you can follow. One of the best ones for you could be a franchise model. In this, you can take the opportunity to expand your clothing business exceptionally. In doing so, you can have stores in many towns and countries that function across different populations.

A perfect example of this model, adoption has the GAP company. It offers franchise opportunities for international markets. It is available for business owners who have extensive experience in retail.

Think Outside the Box

This is a lifetime advise, but you know that creativity stands in the first place when it comes to developing something. Look at what you have now, and think about how you can change or improve some business processes or products/services that you sell.

For sure, this list can be extended to more tips. But, we’ve highlighted only tested strategies that you can use now for your business benefits.

How to Clear Magento Cache

If you run a store on Magento, you know that page caching helps to increase the speed of Magento based website. Below we explain how to clear cache in your Magento store from admin or command line.

How to Clear Magento Cache

Step 1: Login to your Magento Admin Panel
Step 2: Go to System >> Cache Management

Magento Admin - Cache Management Menu

Step 3: Next, you need to identify what cache type that you want to refresh. Each cache type has description, you can read it before deciding which one you need to enable.

Cache Management Menu - Enable Cache

Step 4: In the next step, in order to clear cache, please choose the types of Cache that you have enabled >> Refresh >> Submit

“Flush Magento Cache” help to remove all the items from the cache that have Magento tag.

“Flush Cache Storage” removes all the items from Cache both those with Magento tag and those without it.

Let’s move on to the small guide on how to clear cache from the command line.

How to Clear Magento 2 Cache from Command Line

To flush Magento 2 cache:

  1. Go to Magento root directory
  2. Type: php bin/magento cache:clean and php bin/magento cache:flush

php bin/magento cache:flush

Removes all items in the default Magento cache (var/cache) and the var/full_page cache that have a Magento tag.

php bin/magento cache:clean

This command removes all items in the cache. This is the equivalent of deleting the entire contents of the cache folder on the server. If your system uses an alternate cache location, any cached files used by other applications will be removed.

If you are looking for the extensions to have Magento 2 full page cache and control your website performance, you can check our list of the Top 3 Magento Full Page Cache Extensions.

Another Story About the Broken Shopping Cart in Magento 2

We’ve already investigated the broken cart bug in cases when administrators delete simple child products. But, as it turns out, there can be other reasons for this bug.

Magento 2 has a very convenient feature for store administrators: they can change product type as they wish. When creating a product, an administrator can set the product weight, resulting in the product having the type “simple.” They can also not set the weight, resulting in a “virtual” product. Moreover, when administrators remove the weight from an existing “simple” product and save it, they get a “virtual” product and vice versa. They can also take any simple product that isn’t part of a configurable one and make it configurable on the product editing page, using the configuration component.

We will elaborate on this last scenario since in the hands of inexperienced users it could create issues for store users. This article will be about how to use this feature properly.

Chapter 1: Background

Chapter 1. Story Background

Let’s say there’s a Magento 2 store with the following cast of characters:

  • the developer who made a site based on functional specifications and provides support for it.
  • the store administrator who creates products, process orders, etc.
  • the customer who is buying something in the store.

This store sells clothing and hats since these are products that usually require configuration.

The administrator created a simple product and made it available for purchase: a cap with a white pattern on a black background (CAP1).

Chapter 2: Product Changes

Chapter 2: Product Changes

The customer goes to the store and adds this product to their cart, but for some reason, they don’t make a purchase and the product stays in the cart. The customer doesn’t return to the site again for some time. Then, the same exact cap appeared in the store’s inventory, but with a black pattern on a white background.

The administrator decided to turn the existing product, CAP1, into a configurable product with a color attribute. This is easy to do on the product editing page. In this instance, the product becomes configurable after saving, and two simple child products are automatically created.

This couldn’t be done in Magento 1 since product type could only be set when creating a product. You had to create a new configurable product and link the child simple products to it. The new product would have a new URL, and that would start age-old SEO problems.

Chapter 3: Error

Chapter 3: Error

So, the administrator turned the simple product into a configurable one, and a drop-down list with color choices (or visual swatches) appeared on the product page on the front end. Now the customer decides to log in again and complete the purchase, but when they go to their cart, they get a 503 error.

The customer can’t proceed to checkout to complete the order, so they go to the Contact Us page and write a complaint to the manager. The manager then creates a bug report for the developer. The developer looks at the server logs and sees the following error:

[Tue Mar 05 19:20:54.026160 2019] [php7:error] [pid 8691] [client 127.0.0.1:58142] PHP Fatal error:  Uncaught Error: Call to a member function getValue() on null in /var/www/magento23/vendor/magento/module-configurable-product/Model/Quote/Item/CartItemProcessor.php:86\nStack trace:\n#0 /var/www/magento23/generated/code/Magento/ConfigurableProduct/Model/Quote/Item/CartItemProcessor/Proxy.php(103): Magento\\ConfigurableProduct\\Model\\Quote\\Item\\CartItemProcessor->processOptions(Object(Magento\\Quote\\Model\\Quote\\Item))\n#1 /var/www/magento23/vendor/magento/module-quote/Model/Quote/Item/CartItemOptionsProcessor.php(84): Magento\\ConfigurableProduct\\Model\\Quote\\Item\\CartItemProcessor\\Proxy->processOptions(Object(Magento\\Quote\\Model\\Quote\\Item))\n#2 /var/www/magento23/vendor/magento/module-quote/Model/Quote/Item/Repository.php(74): Magento\\Quote\\Model\\Quote\\Item\\CartItemOptionsProcessor->addProductOptions('configurable', Object(Magento\\Quote\\Model\\Quote\\Item))\n#3 /var/www/magento23/vendor/magento/module-checkout/Model/DefaultConfigProvider.php(430): Magento\\Quote\\Model\\Quote\\Item\\Repository->getList('1')\n#4 /var/www/magen in /var/www/magento23/vendor/magento/module-configurable-product/Model/Quote/Item/CartItemProcessor.php on line 86, referer: http://magento23.loc/index.php/

This is the error for Magento version 2.3. Earlier versions will show a slightly different error, but the essence is the same. The error occurs because when automatically converting the product type, the product type in the cart changed, too.

The configurable product in the cart should have a child element, as well as configuration options—but it doesn’t since the product wasn’t configurable when it was added to the cart. The error appears in the processOptions method when attempting to receive the value of the ‘attributes’ option, which for the reason mentioned above does not exist. The method code is below.

public function processOptions(CartItemInterface $cartItem)
{
    $attributesOption = $cartItem->getProduct()->getCustomOption('attributes');
    $selectedConfigurableOptions = $this->serializer->unserialize($attributesOption->getValue());
    if (is_array($selectedConfigurableOptions)) {
        $configurableOptions = [];
        foreach ($selectedConfigurableOptions as $optionId => $optionValue) {
            /** @var \Magento\ConfigurableProduct\Api\Data\ConfigurableItemOptionValueInterface $option */
            $option = $this->itemOptionValueFactory->create();
            $option->setOptionId($optionId);
            $option->setOptionValue($optionValue);
            $configurableOptions[] = $option;
        }
        $productOption = $cartItem->getProductOption()
            ? $cartItem->getProductOption()
            : $this->productOptionFactory->create();
        /** @var  \Magento\Quote\Api\Data\ProductOptionExtensionInterface $extensibleAttribute */
        $extensibleAttribute =  $productOption->getExtensionAttributes()
            ? $productOption->getExtensionAttributes()
            : $this->extensionFactory->create();
        $extensibleAttribute->setConfigurableItemOptions($configurableOptions);
        $productOption->setExtensionAttributes($extensibleAttribute);
        $cartItem->setProductOption($productOption);
    }
    return $cartItem;
}

Chapter 4: Solution for Broken Cart Using Product Aftersave Event Observer

The developer thought about the situation and decided that the user’s cart shouldn’t be broken, regardless of what the store administrator did. The developer implemented the following solution: they added a product aftersave event observer to the broken cart module.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_product_save_after">
        <observer name="fix-customer-cart" instance="Web4pro\BrokenCart\Model\Observer" shared="false" />
    </event>
</config>
class Observer implements  \Magento\Framework\Event\ObserverInterface
{
    protected $cartCleaner;
    public function __construct(\Web4pro\BrokenCart\Model\QuoteItemsCleaner $cartCleaner)
    {
        $this->cartCleaner = $cartCleaner;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        if($product = $observer->getEvent()->getProduct()){
            if(($product->getTypeId()=='configurable')&&($product->getOrigData('type_id')!='configurable')){
                $this->cartCleaner->execute($product);
            }
        }
    }
}

If a configurable product’s type becomes configurable when it’s saved, the product should be removed from all users’ carts. Indeed, after its type was changed, the product in the example is no longer the same cap with a white pattern on a black background that the customer added to their cart.

eCommerce rules dictate that the product should be deleted from the user’s cart. Now the store administrator can change the product type at will, without it resulting in the problem described above.

Which Magento Dropshipping Extensions to Use In 2019?

If you are experiencing some difficulties with how you manage your warehouses and orders, then you should consider using a dropship extension.

This is by far the best eCommerce solution to achieve efficient management and optimization of the drop shipping business.

These tools enable you to start up an eCommerce store whether you are dropshipping with Magento or any other eCommerce site. With these dropshipping extensions, you won’t have to worry about any complicated shipping procedures as they do offer simpler solutions when it comes to fulfilling orders.

Using these tools allow you to store products in different warehouses located in different parts of the region and thus making it easy to fulfill the order by shipping directly from the nearest depot rather than getting the goods from the store.

Anyway, Magento is one of the popular eCommerce platforms, let us look at a few Magento dropshipping extensions that you can use in 2019.

List of 7 Magento Dropshipping Extensions

Without any further ado, here are some excellent Magento dropship extensions you can use.

Dropship by Unirgy

dropshipping with magento

If your business is growing fast and you don’t have any idea on how you can handle a lot of products from your many suppliers, this is what you need. This extension offers great features that can allow you to manage your business even when dealing with multiple clients without any issues.

Aside from letting you manage your products, this extension comes with extra features as add-ons to make it more powerful.

Some few main features include such options:

  • manage the lists of your suppliers,
  • generate the purchase orders automatically for suppliers based orders from the customers,
  • flexible commission structure and calculations,
  • support for both the standard and external check out like PayPal,
  • send automatic shipment notifications to your clients.

Additionally, the extension also has an easy to use user interface to help you control all the customer-vendor interactions.

Packages available

The extension supports both Magento versions, Magento 1.x and 2.x.

Price

A pricing plan starting at $950. You will also get your money back if you will not have been satisfied within the first 30 days of purchasing this extension.

Dropship by Xento for Magento 1&2

Dropship by Xento for Magento 1&2

If you are a Magento user and you are tired of managing your orders manually, it’s time you considered getting some help. Yes, I’m talking about purchasing one of the many available Magento 2 dropship extensions, one more like Xento.

This is another perfect solution for Magento users as it will enable you to manage your orders quite easily by using its automated features.

Xento allows its users:

  • manage any warehouse or any fulfillment center completely free of charge,
  • send orders to your customers depending on your customization,
  • product export and stock import,
  • track number import to let your clients know that their items have been dispatched and are on the way.

Packages available

The tool currently supports both Magento versions 1 and 2.

Price

No subscriptions or any fixed annual fees only a one-time payment of about $726.

Dropship by Magestore

Dropship by Magestore

Magestore is also another big name that has been in the game for quite some time, developing Magento 1 and 2 extensions. With over 40 extensions in the market, you can already tell they are some of the best e-commerce solution providers.Using this Magento dropship extension will see you save a lot of time and also cut down on the costs of keeping and inventory.

Other advantages you can enjoy using this extension:

  • manage multiple projects, customization, payment integration,
  • show order listings to your clients and allow you to create orders and cancel requests,
  • easy order fulfillment among others.

With all the POS features offered by this extension, you will be able to cut down the waiting time by a huge percentage and therefore guaranteeing you 100% customer satisfaction.

Packages available

This extension is available for Magento 1 and 2 versions.

Price

Available upon the request.

Dropship by Boostmyshop for Magento 1 & 2

Dropship by Boostmyshop for Magento 1 & 2

With everything pretty much automated and an easy to use user interface, you can improve your business greatly.

The extension can also allow you to track both your purchases and private sales easily. You can manage the rules to select the best supplier, controlling the workflow and select the items to dropship.

It is a part of the Embedded ERP Extension Suite, so you can get even more features from this extension development company.

This dropshipping extension to help in three major fields including:

  • order management,
  • vendor management,
  • inventory or stock management.

Packages available

This extension is available for Magento 1 and 2 versions as well as for Open Source and Commerce edition.

Price

Using this tool will however require you to pay a small monthly fee or pay annually depending on the plan you like. The price starts from €199.00.

Using this provided guarantees you great customer support, no code encryption, regular updates and most of all, you will get to have your money back if you are not happy with it after 15 days of purchasing the product.

Dropship by Webkul

Dropship by Webkul

Here is another great Magento dropshipping extension from Webkul developers that you can use to improve your business. This is achieved by using the platform to optimize all your shipping activities and managing your warehouses.

You can also use it to import items to your store without any hassle. This is an excellent solution for those looking to create a store without having a warehouse and thereby saving the customers some time.

Among other features you get such options:

  • set more than one shipping method The buyers can then choose them according to what they like,
  • locate your different warehouses with the help of Google maps,
  • import products from AliExpress, manage warehouses and select a shipping method for each one of them.

Packages available

The module currently supports Magento 2.

Price

It is available at around $199.

Dropship M2 by Medma

Dropship M2 by Medma

This is the first release of this dropshipping extension supporting Magento 2.x version.

This extension offers a platform for traders to be able to order bulk items and ship them to different warehouses while also assigning orders for each of these warehouses.

Among some features provided by this module include:

  • the ability to export customer feedback,
  • configurations to enable or disable sign up questionnaires,
  • allow or forbid different store functionalities to a client depending on their status and a user approval system that forbids the customers to use the bulk order feature.

Packages available

This extension is available for Magento 2.1 Open Source (Community) only.

Price

This is a great e-commerce solution for those who would often want to know their clients first before doing any business with them thus enhancing the security of the store. You can currently get this great module at $99 only.

Dropship by Webshopapps

Dropship by Webshopapps

If you are looking to bring some powerful flexibility to your Magento eCommerce store, you should try using this module. It currently supports Magento 1 and 2 versions.

This Magento dropship extension is integrated with ShipperHQ module and can allow multiple providers to log in to a warehouse among other functionalities.

The module is regarded as one of the best when it comes to shipping products from various geographical locations.

With this module, you also can:

  • choose your carrier and place orders for each warehouse,
  • allow your customers to choose their desired shipping method,
  • automatically send email notifications to alert your customers when their orders have been dispatched.

Packages available

This extension is available for Magento 1 & Magento 2.

Price

A 30 days free trial to see if it suits your needs.

Best Magento Aliexpress Dropship Extensions

Aliexpress is also a very well known name when it comes to the eCommerce sector and below are some Magento Aliexpress dropship extensions you can use for your site.

Aliexpress Dropshipping by CedCommerce

Aliexpress Dropshipping by CedCommerce

As mentioned before, Aliexpress is a major player in the eCommerce industry and when they decide to come up with an eCommerce solution like this one, you can be assured that it’s something worth checking out.

Other features that you will be able to enjoy include:

  • bulk imports from the Aliexpress stores,
  • setting synchronized pricing for the Magento 2 stores,
  • set different prices on different products and easy inventory management.

Packages available

This is a Magento 2 Aliexpress dropship solution, to mean it supports Magento version 2 thus allowing its users to easily connect and use Aliexpress dropshipping tools.

Price

You can get this amazing dropshipping solution at $299.

Magento AliExpress DropShip Automation by Webkul

Magento AliExpress DropShip Automation by Webkul

If you are looking for a dropship extension that is easy to configure and can also optimize your dropshipping activities, this is what you need. Magento 2 Aliexpress dropship automation is, therefore, a workable dropshipping extension that is worth checking out.

It comes with a lot of great features and also offers competitive prices and more products, making it a great solution for someone running a drop shipping business that is more consumer-oriented outside China.

This extension will improve your business by allowing you:

  • manage your stores easily, letting the shoppers choose their preferred shipping method,
  • easy shipment from different warehouses,
  • allow you to see the products inside the warehouse.

Packages available

DropShip automation is working only for Magento 1.x versions (i.e. 1.6.x.x, 1.7.x.x, 1.8.x.x, 1.9.x.x).

Price

This extension will only cost you $199 with some additional costs if you are looking to be offered support for either 3 months, 6 months or for a whole year.

In the past few years, the dropshipping business model has seen huge growth. With so much knowledge and awareness, the world has indeed become a global village. As the business is continuing to gain much popularity, many people are slowly jumping on board hence making the competition even much tougher and difficult to maintain on a small scale.

WooCommerce Review: Is It a Good Choice for Running the Store?

Are you thinking of building an eCommerce website suiting your business needs but are not sure how to? Are the crunching numbers of expenses worrying you? Well then, there is a perfect solution awaiting you! Creating websites on WordPress is now a universal trend; yet creating an eCommerce platform remains tough. We’ll consider how to conquer this task.

The Benefits of Using WordPress

WordPress is one of the most popular CMS that attracts a million users for its simplicity and cost-effectiveness. Among benefits are the simplicity of the interface, SEO-friendliness, and flexibility. Also, it is an attractive base not only for a blog, or a corporate site but for an eCommerce store. WordPress has a lot of plugins for its stable work and extended functionality.

WooCommerce Website’s Home Page

A WordPress plugin makes this job easier than you can imagine. Such is the task of WooCommerce. WooCommerce is essentially a WordPress plugin, which lets you create a useful eCommerce website. With this, you can easily generate and manage an online store.

Let’s Start with WooCommerce Features

WooCommerce Features List Page

WooCommerce provides you with many features and opportunities. These features include:

  • Mobile-friendly design
    WooCommerce is not only easy and user-friendly on your desktop and laptop but also on your mobile phone or smartphone.
  • Search Engine Optimization
    As WooCommerce runs under WordPress, it can enjoy all the features of WordPress. One such important feature is SEO tools and plugins. It has built-in SEO plugins like Yoast and offers well-structured CMS that can boost your online presence with its SEO tools.
  • Discounts
    Running an eCommerce website is not an easy task. WooCommerce makes this task as facile as possible. With it, you can create discount coupons and cards for your customers to enjoy on the website.
  • Analytics
    Assessing the performance and statistics of your website is essential. WooCommerce allows you to assess these data using analytics. You can also integrate your site with Google Analytics for free.
  • Stock level tracking
    With the help of WooCommerce, you can keep track of your stock and inventory levels accurately.
  • Sales Report
    The website will design for you a report by calculating the number of sales you generated from the eCommerce platform.
  • Product data panel
    A separate panel for the display and information about products will make your customers’ experience very smooth and easy going.
  • Automatic tax calculations
    With WooCommerce you no longer have to care for calculating taxes on the products bought. It automatically calculates taxes such as GST and VAT.
  • Geolocation support
    This is an advanced feature of WooCommerce site that connects your store’s location and provides support to customers.
  • Store management
    Online store management cannot be seamless than this. The various features of WooCommerce mark your store management as noteworthy.

Pros and Cons of WooCommerce

WooCommerce Pros and ConsWooCommerce provides many benefits to both its creator and users. These are:

  1. Free to download: The biggest benefit of WooCommerce is that it is completely free! The base plugin is freely downloadable. However, later if you purchase additional premium extensions you will have to pay for them.
  2. Professional look: If you are intimidated to design your eCommerce site then WooCommerce will do the work for you. With its design interface, your website will boast a professional look.
  3. Flexible: The interface of the website is highly flexible. You can customize features according to your needs such as categorization, sales price, independent attributes, order panel, invoice generation, and tracking.
  4. Simple to use: Despite WooCommerce having the outlook of a professional website, it is relatively simple to use. It is a user-friendly eCommerce solution. It has all the features needed for a professional site to operate and write blogs.
  5. Popular: According to BuiltWith, WordPress generates about 84.14% of all websites on the Internet. This gives them a massive platform, increasing the popularity of WooCommerce site which occupies 4.17 % of websites that use it in the Entire Internet.

Despite all the pros, WooCommerce has its cons too, which are:

  1. Learning curve: As WooCommerce is generated by WordPress, you have to be familiar with the main website first. Your ability to learn and ease of use depends on your understanding of WordPress.
  2. Additional work: WooCommerce is not exactly an independent website; thus it has some more work involved. These are web hosting, maintaining site security and the implementation of extensions and plugins.
  3. Negative reviews: Not all reviews of WooCommerce are positive. Some people who reviewed the site complained about the API, website issues and glitches, mounting costs and lack of customer service.

Apparent Ease of Use

WooCommerce is notably a website, which is facile to operate despite its professionalism. The product information panel is very straightforward, and so is the website navigation. With a little bit of surfing, you can be an expert too.

Server Requirements

The list of requirements to run a store on WooCommerce successfully is the following:

  • PHP version 7.3 or greater
  • MySQL version 5.6 or greater OR MariaDB version 10.0 or greater
  • The WordPress memory limit of 128 MB or greater
  • HTTPS support

How Much Does WooCommerce Cost?

Initially, you can start using WooCommerce free of cost. It is freely downloadable from various sources given you have WordPress.

However, later, you will have to pay for some charges. These include:

  • Extensions,
  • Plugins,
  • premium features,
  • domain name,
  • SSL certificate,
  • web hosting costs.

WooCommerce Templates

There is an abundance of templates and themes available exclusively for WooCommerce users. This is perfect for an eCommerce platform. You can adjust accordingly to the type of product and service you are providing with your website and according to your level of professionalism. The price varies from free options and up to $130.

WooCommerce Plugins and Extensions

You have all the extensions available on the WooCommerce website. Choose between simple and free to use extensions or paid ones. The cost of the paid extension is up to $299. With these, you can enhance the already existing features of accounting, payment gateways, marketing, reporting and more.

WooCommerce Marketing and SEO

WooCommerce has fantastic SEO tools. This means there is a higher chance of your website to appear when people search. Not all other eCommerce platforms provide such facility. This automatically enhances its marketing capabilities and reach. Great SEO tools like Yoast or all in One SEO Pack can help you to make your store visible on the web.

Payment Processing Options

After providing the information regarding your location and currency, you will get many options to make payment. WooCommerce has such out-of-the-box payment capabilities:

  • Direct Bank Transfer
  • Cash on Delivery
  • Check Payment
  • PayPal
  • Stripe

Businesses in the U.S. typically pay by PayPal, Stripe or Square as their merchant agent. Third party payment options are also available such as Authorize or Amazon. It also accepts bank transfers, check payments, or cash on delivery. WooCommerce has added Apple Pay by users’ request. Payments with Apple Pay will be processed through Stripe. Besides, you can choose any payment processors among 100 available on the WooCommerce site.

Another popular payment system is QuickPay. This plugin works well with WooCommerce and allows you to secure capturing of the payment from order overview. You also can return money or cancel the order from one place.

Security Level

The security level of your eCommerce site will depend on the security offered by WordPress and your web host provider. You can enhance the security levels by purchasing an SSL certificate. It will ensure secure connections from a web server to the browser. The CMS itself is safe. However, for more robust security, you need to look at security patches as additional protection of your store data.

WooCommerce Customer Service Quality

Customer support options in WooCommerce are limited, such that there is no option for live chat or call. Furthermore, customer support is not available to third-party products. However, there is an option to send emails to clients. You can also refer to the WordPress development agency to get WooCommerce paid support. However, the rate may differ from the service range and company.

We’ve considered all the main WooCommerce features, pros and cons as well as some advanced characteristics. We hope that it will help you to decide whether it is suitable for your business or you need another platform. In the end, we want to highlight what customers say about WooCommerce in action:

What Customers Say About Woo?ommerce?

List of the Best eCommerce Website Builders

A first step in creating a successful online shop is to ask which eCommerce website builder fits the business needs most effectively. With the plethora of choices out there, the best also relies on necessary features and available budget. Does it have enough scalability? Can you create an amazing website with it? Add new functionality? Build a site without years of coding experience? Does it offer the biggest bang for the buck?

Given the reach and functionality required, one solution will be best to create eCommerce site for you. Today, we explore the costs, upsides and downsides, and features of the highest quality CMSs of 2019.

The Best Website Builders

If you’re in the field, you’re acquainted with the common eCommerce site builders: Squarespace and Shopify. Then there are the less well-known builders like BigCommerce, Volusion, and WooCommerce. Finally, an article on this topic would be incomplete if it did not mention a favorite CMS of ours: Magento®.

Before we start, let’s refer to the statistics. According to BuiltWith, the most demanded platforms that are used the most by businesses are:

Platforms eCommerce Usage Distribution on the Entire Internet

The statistics are based on the total number of websites existed on the entire Internet. Now, we’ve got the understanding of which platforms businesses prefer over others to build a store, and we move on to the review of the best website builders.We’ve considered the worldwide popularity, functionality, pricing plans and overall usability and benefit for eCommerce business. The sections that follow will delve deeper into each to help you choose right from the start.

Magento

Magento Logo

Magento is a premier CMS solution for eCommerce. It can be challenging to use, but it’s completely customizable, scalable, and adaptable. Plus, even with this versatility, it requires less intense coding knowledge than some of the other CMS solutions with similar capacity.

If you are looking to scale your business further than look towards Magento. It is a promising platform with huge support, emerging technologies implemented into the latest extensions and functionality available on Magento 2 versions.

Magento Features

  • Stock multilingual support
  • More than 5,000 ready-built extensions
  • Web service API
  • A wide range of payment options
  • Customer groups
  • Customer service
  • Order processing
  • Solutions for managing inventory
  • Gifts
  • Shipping charge extensions
  • Extensions for coupons
  • Easy Site management
  • Marketing tools
  • Newsletter features
  • Product bundling options
  • Mobile-Optimized
  • Excellent stock of SEO features

Pricing

  • Open Source: This version is free. Simply download, install, and begin implementation immediately.
  • Commerce: Here’s where you’ll be paying more for the advanced features list. Pricing is based on customization and site needs. On the lower end, it’ll cost about $15,000 annually. On the highest end, expect around $50,000 annually. This package provides supreme customization, dedicated hosting, and all you could imagine wanting in your website.
ProsCons
Loaded with featuresExperience- and time-Intensive due to coding
Fully scalableDedicated hosting requires higher initial and per-month investment
User-friendly adminMaintaining, developing, and supporting the site will cost more
Constant development and support of the platform by community

WordPress with WooCommerce

WooCommerce Logo

WordPress powers about 33% of sites on the Internet and remains one of the simplest and most powerful ways to create your own site or blog. WooCommerce is WordPress’s answer to eCommerce, a way to turn your WordPress site into a lucrative online store. Support is one of the most challenging aspects of a WooCommerce store. However, the pricing is competitive, and it’s loaded with features.

So, if you know how to use WooCommerce, you’ll find yourself set up with a high-performance website at a great value.

WooCommerce Features

  • Unlimited products
  • Unparalleled options for B2B WooCommerce
  • Product reviews and ratings
  • Categories, tags, and attributes make products easier to find
  • 400 stock extensions
  • Unlimited galleries and images
  • Product filtering and sorting
  • Customizable by location
  • Open development
  • WordPress-built
  • Checkout, product, and more can be embedded on all pages
  • Unrestricted customization
  • Blogging is built-in
  • Different themes available
  • Documentation
  • REST API for order and product management

Packages Pricing

  • Starter Package: $13.99/mo
    Web space limited to 100 GB.
  • Plus Package: $17.99/mo
    Unlimited space.
  • Pro Package: $31.99/mo
    The advanced backup feature included.
ProsCons
Fully loaded with Advanced Tools and ExtensionsAdditional features can incur hidden costs
Accounts for Administrators and usersNo central support – Support for each extension and plugin is through separate channels
A rich selection of designs and themesRequires experience for easy use

BigCommerce

BigCommerce Logo

So what is BigCommerce? It’s a CMS that focuses on creating customizable, responsive sites. BigCommerce websites are created on the principles of mobile-optimized omnichannel access, easy migration, and supreme ease of online selling in all its aspects. The design is centered on conversions, the key to success for any eCommerce site.

A huge benefit to working with BigCommerce is that it’s unmatched in both scalability and SEO.

BigCommerce Features

  • Huge range of sales features
  • Conversion optimized for tablet, mobile, desktop shoppers
  • Multi-channel syncing to increase sales across all channels
  • Easy management for inventory and orders
  • Various payment portals
  • More features than any other CMS
  • BigCommerce control panel lets you run the entire business from one portal
  • Top-of-the-Line Launch assistance for new sites and site optimization
  • Allows easy migration for stores and importation of products
  • Focus on selling with a hosted eCommerce website
  • Features a hosted, PCI compliant eCommerce website
  • Fully customizable
  • Offers lightning fast eCommerce templates

Pricing Options

  • Standard plan: $29.95/mo (annual billing)
  • Plus Plan: $71.95/mo (highest value for small businesses)
  • Pro plan: $224.95/mo (increased scalability)
  • Enterprise plan (custom pricing and features)
ProsCons
Fantastic SEO toolsLacks a mobile app
Allows multi-channel salesRequires a strong understanding of tech terms
Outmatches competitors for scalabilitySome text

Volusion

Volusion Logo

A Volusion website shines in sales, but website building is complicated, especially for those without extensive experience. However, Volusion provides loads of features and tools to manage business operations. With a Volusion web store, it’s simple to showcase products with videos and manage product inventory.

Volusion eCommerce is ideal for products that need a strong visual presentation. Plus, you can expand customer engagement with the ‘Suggest Product’ option. However, one thing to keep in mind is that Volusion is only suitable for physical goods or services.

Volusion Features

  • CSS Editor
  • Logo Favicon upload
  • Homepage Slideshow
  • Search Functionality
  • Customizable Product Category Pages
  • Excellent Navigation Editor
  • Custom Domain for Easy Site Access
  • Rich Content Editor to Update your Site without Coding
  • Mobile-Friendly Responsive Themes
  • A wide range of payment platforms with no transaction fees
  • Seamless integration with third-party apps
  • Excellent stock mobile app for managing business operations

Pricing Packages

  • Mini: $15/mo
  • Plus: $35/mo
  • Pro: $75/mo
  • Premium: $135/mo
  • Business: $299/mo

Volusion also offers a discounted price of $13.50 monthly for annual payments. However, you’ll need to buy an SSL for any plan you pick.

ProsCons
Mobile appExtra cost for SSL certificate
A wide range of payment methodsNo blogging function
Excellent analytics toolsOnly good for physical products or services

Squarespace

Squarespace Logo

So, as eCommerce site builders go, is Squarespace good? A key to answering this question is which version you opt for. The editing interface for earlier versions of Squarespace was complicated and unwieldy. However, this has been addressed with the improvements of version 7. It comes with excellent tutorial documentation which fully describes all features and tools.

Squarespace is an excellent website builder, a feature which even some more expensive solutions lack. Another benefit for programmers and software engineers is that the Squarespace salary for these roles is highly competitive for the field.

Squarespace Features

  • Announcement Bar
  • Pop-Ups for Promotions
  • Stock integration for Zapier
  • MailChimp integration in the Newsletter and Form Blocks
  • Menu Block
  • Donation Block
  • Customer Accounts
  • Commerce and all online store features
  • Per-page and site-wide code injection
  • Information Bar mobile-optimized
  • OpenTable Block
  • Amazon Block
  • ChowNow integration
  • Code Block for iframe code and JavaScript
  • Facebook Pixel
  • Developer Platform
  • Acuity Block

Though this list describes only Basic Online and Business packages, they’re ideal for any small organizations and businesses. The Advanced Online package is best if you’re after scalability.

Pricing

  • Personal Package: $12/mo
    This solution is excellent unless you need an online store.
  • Business: $18/mo
    3% transaction fee and stock online shop.
  • Basic Online Store: $26/mo
    Zero transaction fee for online sales.
  • Advanced Online Store: $40/mo
    Advanced eCommerce features included.
ProsCons
24/7 live chat customer supportLacks Preview Mode (makes larger updates more challenging and leads to website downtime)
eCommerce with customer login optionsSEO (low page speed and unable to edit page title in blog posts)
Extensive choice of high-quality templates, mobile-optimizedSingle sub navigation option (not good for more complex sites)

Shopify

Shopify Logo

One great thing about Shopify is it’s been created entirely with eCommerce in mind. Shopify is excellent for all forms of selling, from products to services, digital or physical, locally or worldwide. Shopify business benefits include product organization or tracking, and the capacity to customize or scale an eCommerce website as needed. Add an app or adjust the cart system easily even without complicated coding. It has fast load times alongside loads of ready-made eCommerce stores, adjusted as necessary.

Shopify for sale is completely integrated eCommerce, giving you a single portal to handle every aspect of eCommerce operations.

Shopify Features

  • fraud analysis
  • excellent customer support
  • online storage and bandwidth are unlimited bandwidth
  • Shopify point of sale
  • overview dashboard
  • finance reports
  • orders can be created manually
  • no limit on products
  • multiple selling channels
  • discount code extensions
  • allows private accounts for staff

Pricing Options

Shopify is a middle option in terms of pricing. It isn’t the cheapest available, but even the basic package offers omnichannel solutions and no limits on products. Plus, there are loads of apps that let you tailor your site as needed.

  • Shopify Lite – $ 9/mo
    (Allows you to sell through a website and social media channels)
  • Basic Shopify – $29/mo
    (Credit card fee – 2.9% $0.30, Transaction fee – 2%,)
  • Shopify – $79/mo
    (Credit card fee – 2.6% $0.30, Transaction fee – 1%)
  • Advanced Shopify – $299/mo
    (Credit card fee – 2.4% $0.30, Transaction fee – 0.5%)
ProsCons
Add-ons for scalabilityApps must be bought separately
Abandoned Checkout Recovery helps to increase salesHosting must be bought separately
100+ payment options supported globallyLimited customizability
High performance and loading speedAdvanced features must be bought separately
Multi-channel sales
Easy CTA “Buy Button”
Shopify POS integration
Extensive self-help documentation
Digital and Physical sales supported

Now you have all the platforms’ characteristics, and you can consider creating the store using one of the best website builders listed above to succeed online.

What eCommerce Trends to Follow in 2019?

eCommerce has been growing steadily since the turn of the millennium, and this rate is expected to increase dramatically in the years to come. According to Absolunet, almost 60% of retail sales are influenced by digital experience in some form. Mobile sales grew more than 55% last year, and eCommerce now accounts for nearly a fifth of all retail revenue worldwide.

In order to stay competitive in the current market, it’s essential to keep up to date with the current eCommerce trends. Online sales is a dynamic field, with advancements in programming, available technology, and consumer behavior changing the face of eCommerce every year. It’s also become one of the key factors for keeping your business alive and strong. Even brick and mortar stores are discovering that their online presence is central to brand building and increasing sales. In-person and digital experiences are becoming more closely linked, and customers expect seamless integration between physical stores and their online counterparts.

Some trends have fallen out of favor in the current market. Among these are returns. Before now, offering free returns has been a huge incentive for online sales. However, according to Shopify, within the last year, returns alone accounted for nearly $500 billion dollars. Companies can no longer offer free returns without facing significant losses. Free tax is another technique eCommerce sites have used to drive sales, but with current changes in tax laws, it’s no longer profitable for businesses to continue this strategy. Apps are also dropping out of favor, replaced by fast, efficient PWA’s that customers can make use of without having to download them.

So, now with free returns, free tax, and apps on the way out, what trends are emerging in 2019? Let’s have a look at some of the biggest shifts that will impact eCommerce this year.

Current Trends vs. New TrendsIncrease Customer Engagement

Developing lasting customer relationships has always been the key to boosting sales and increasing profits, and it’s no different with eCommerce growth. Plus, the digital experience offers a host of unique ways to connect with customers and create a customized, immersive experience.

On the website alone, chatbots, personalization, and interactive product technology have risen to the top of current strategies to boost engagement.

More and more eCommerce sites each year are making use of video content and augmented and virtual reality. Many brands also offer online courses and tutorials for their products, a strategy which has been popular in the fashion and technology industries to date.

In addition to the digital approach, brick and mortar stores are popping up to support eCommerce sites with a physical location. This provides a physical product experience and interactions in-person, making the store more accessible and strengthening the brand. It’s also become popular to provide digital kiosks within the store to integrate online and in-store experiences.

Expand On-Site Personalization

One of the biggest challenges traditionally faced by online stores is to personalize the experience. In a physical store, clerks can engage directly with a customer, offering advice and making personalized recommendations to fit their customer’s needs. On average, according to Ziffity, when the experience is personalized, a customer will spend about 48% more per purchase. One of the most important trends in 2019 is to increase personalization to mimic this in-store experience.

Online retail sales statistics show that about 57% of customers are happy to provide personal information for the purpose of improving their shopping experience. Some of the best strategies for this include using purchase history, page visits, and search queries to offer personalized recommendations. In addition, recent advancements in personalization technology allow your site to offer ads based on previous views and search queries and targeted marketing copy.

Work on Convenience and UX

Convenience is the name of the game when it comes to eCommerce. You want to do all that you can to make the user experience easy. With the rapid growth of mobile sales, this means working with mobile-first sites. Make sure that your site loads quickly, that it’s easy to navigate and includes important features like geolocation services and a PWA (Progressive Web App) that lets customers make use of all the functionality of your site without having to download an app.

Another rising trend is to turn your targeted brand into a marketplace. If you have an established brand, you can broaden your customer base and boost sales by branching out and providing other products, or by featuring third-party retailers through your site. Omnichannel is becoming more important every year, so make sure to make use of social media and mobile marketing with options to convert directly through these channels. Image search and voice search are other great features that increase convenience and improve user experience.

Lean towards Video Content Implementation

Video content has become increasingly more important in customer engagement. If a picture is worth a thousand words, a video is worth a million. Customers are more likely to take the time to watch a three-minute video than to read a half page of content. A video is ideal for showcasing product features and sharing the message of your brand. Plus, they are a great way to introduce related products and deliver influencer content.

Video personalizes the content and increases user engagement. Try to make use of it in several ways throughout the site, including the homepage, product page, and anywhere else you’d like to make an impact and hold the customer’s attention.

Include Voice Search on Your Site

One of the most important new trends in retail industry is voice search. This is a great way to add convenience to the online experience. By 2020, voice search is expected to account for half of all searches. For the retail industry, it will account for around $40 billion in sales in the United States alone.

According to Shopify, smart speakers are already being used with Google Home and Amazon Alexa, and 22% of customers with these services use voice search to purchase online. In addition, 50% of customers that use voice search to find a local store will visit that store on the same day. More than a third of these visits result in sales. This is a phenomenal conversion rate and one that you will want to make use of in your eCommerce platform in the coming year.

Think about Artificial Intelligence Usage

Current developments in the field of artificial intelligence have opened up new avenues in the world of retail and eCommerce. AIs can now be used for a wide range of eCommerce solutions.

One of the most important applications is in product content. Content is king in the online industry. It is required for each product and category sold on your site. And, as your repertoire grows, your product content has to grow as well.

AIs can be used to generate product-specific attributes and detailed product information. They can also link this content with semantic search terms, improving your conversion rates and boosting sales. Whether you need translation, classification, organization, or content creation, AI-based solutions are now becoming accessible to provide these services faster and more efficiently than a live team.

Use Chatbots with AI

Another important use of artificial intelligence is with a chatbot AI. Chatbots are taking the role of online sales clerks, able to engage with the customer and personalize their experience. They can also handle inquiries and manage inventory.

Chatbots are also learning algorithms. With each customer experience, customer interaction becomes more refined and more efficient. They literally evolve as they serve your business, providing higher quality user experience the longer they are used. Plus, their versatility allows them to perform several mundane tasks, allowing you to focus on the innovations that will keep your eCommerce site ahead of the competition.

Meet the Explosion of AR

One of the chief problems faced by online stores is the inability to interact physically with products. However, AR, or Augmented Reality, is helping to close this gap by allowing customers to visualize products three-dimensionally and try them out virtually.

The homeware and fashion industries have been quick to capitalize on this new technology, using AR to allow customers to virtually try on accessories or clothing or visualize how furniture or other products will look in the home.

This is one of the most exciting areas opened up to retailers by new advancements in technology, and it’s still in its infancy. It dramatically boosts customer engagement and helps customers to feel more confident about their purchases. Plus, it creates a richer and more fun shopping experience. Over the next few years, you can expect AR to be utilized by a majority of successful brands.

Offer Various Web Payments

Flexible payment options are one of the most important trends for 2019. It’s important for you to allow customers to pay with more traditional methods, such as credit and debit cards. At the same time, digital wallets have gained far more trust and recognition, and are now a common form of payment as well.

PayPal has been around for a while, but other wallets are gaining popularity as well. Some of the top options are Apple Pay, Samsung Pay, and Google Pay. Other couples to keep in mind are ZipPay and AfterPay. These are less well known, but they give customers the option to buy now and pay later without interest rates. The cryptocurrency market is beginning to become a major payment method as well.

The benefit of both digital wallets and cryptocurrency is that purchases can be made online without having to enter secure card details. Plus, since these payment methods are expected to exceed card and cash payments within the next ten years, this is a great way to increase mobile conversions and prevent lost sales.

Be Responsible About the Environmental Impact

Every year, customers are getting savvier about sustainability and environmental impact. They want to know that their purchases are responsible and healthy for the planet and are on the lookout for the ecological costs of internet purchases. This is especially important in packaging.

You’ll want to consider making boxes only as large as they need to be, avoiding excess packaging materials, and finding efficient delivery routes. Plus, it’s an added bonus to include messages on the packaging that highlight the company’s efforts at sustainability. These messages should focus on the reuse of materials and waste reduction. It’s also helpful to include messages about social and ecological responsibility on your site. This will align your brand with consumer values and make them more comfortable purchasing from your site.

The key to connecting with customers this year and in the years to come is to create a comfortable and balanced user experience. If you place yourself in the position of a new visitor to your site and consider what you would like to feel upon your visit, you’ll see exactly how to customize your site for best effect.

Top 10 Magento 2 Popup Extensions

Popup ads are online forms of advertisements meant to capture email addresses of the customers to increase traffic in the website. Popups are new browser windows which attract prospects’ attention to the website. They suddenly appear on the screen of the device until you press a particular function key to select one of the commands. The popup ads then disappear.

Magento 2 popup extensions have outstanding features making them versatile for the eCommerce website.  Firstly, you can set a flexible display rule based on your customer store view to have a popup position on the webpage.

Secondly, It’s easy to get and add to your eCommerce shop. With it, you market your products effortlessly without IT knowledge.

Thirdly, It displays several popups in one campaign to build trust in your eCommerce business.

And lastly, you can generate banner slider HTML code which reduces the risk of duplication when integrating hence saving both time and funds. Let’s move on to the list of best Magento pop-up extensions on the market.

5 Best Magento 2 Popup Extensions

Online stores require Magento 2 popup extensions to propel marketing and business goals. Here are the best 10 Magento Popup extensions and newsletters.

Popup for Magento 2 by Magesolution

Popup for Magento 2 by Magesolution

Popup for Magento 2 by Magesolution is a trusted solution for business merchants who want their customers to know the latest stuff in their online store. It has a demo version to look at how it works on the frontend and how to manage it from the backend.

Magesolution designs themes for customers. If you need a stylish modern online store, this extension and theme development company is your ever present help.

A pop-up by Magesolution is a vast extension to build them with HTML content. It is an attractive window used to collect business information to promote ads and products of the business. It’s quite easy to man the manifestation of your popup when you define widgets and show them for a specific customer group.

Popup for Magento 2: BSScommerce

Popup for Magento 2 by BSScommerce

Pop-up for Magento 2 by BSScommerce helps business people invent multipurpose pop-ups. It’s upon one to decide where to establish the pop-up and set demo animation for clients to see. The company has served many customers all over the world. They offer innovative Magento 2 extensions with free installations.

The installation keeps your business miles away from the other competitors. It enriches your store to save management effort.

You can efficiently manage and configure the extension. To do this, you need to go to the store and click configure and then BSScommerce > Pop-up, and you will see the general configuration. Select yes to activate the setting. It has Manager Pop-up which displays all created pop-ups and their contents such as Views, Enable, Customer Group, etc. This tool helps you control everything that goes in and out of your popup.

Exit Intent Popup for Magento 2 by Mageplaza

Exit Intent Popup for Magento 2 by Mageplaza

Mageplaza is the best popup which improves customer retention. It draws attention to more subscribers. Most of the online shopping carts are relinquished at the checkout page which leads to sales decrease. However, with Magento 2 extensions you cut down the percentage of cart renouncement at the checkout page.

Mageplaza provides useful marketing tools which help the store to garner more leads. When your clients see a newspaper subscription invitation they offer their email hence providing a permanent link with your clients. This module has a report emails which shows the number of new subscribers on a weekly basis.

Popup Pro for Magento 2 by Aheadworks

Popup Pro for Magento 2 by Aheadworks

Popup Pro for Magento 2 triggers appearance of popup window based on different types of customer behavior. It has a flexible popup design that admin can alter to match any task. The popup may be used for promotions, cookie policy, and newsletter subscription among others.

It has more integration options which use Custom Static Blocks which many clients highly recommend. With a single promo, you can use it on any site which is valuable for both store owners and their clients.

These Popup Pro advantages outweigh the alleged disadvantages. For instance, it helps in sales promotions, product upsells, content participation and email captures. These simple processes help your store retain old customers besides having new clients.

Magento 2 Popup Widget Extension by Mageworx

Magento 2 Popup Widget Extension by Mageworx

Magento 2 popup widget extension is widely used because of its stability, performance, and Mageworx ever present solution to emerging problems. If you want to deliver the correct information to the right customers, create pop-ups for all sizes and shapes.

With this extension, you can easily add a duplicate pop-up button. Mageworx provides products which have a guarantee and a lifetime functionality update. With it, you can combine standard widgets with advanced extensions to have attractive popups. You do not need HTML proofs or design to apply templates. The current models allow you to design pompous promotional messages for any purpose to increase the efficiency of your popup messages aim at the needs and interests of the new clients.

Also, you can group your shoppers based on location, type of device used, customer category among other factors. These subdivisions help you to achieve your target quickly.

5 Best Magento Newsletter Popup Extensions

Magento newsletter popup display popup containing subscriptions. The customers receive a free discount coupon code. The discount offered makes the shop owner win the customers’ trust which translates to higher sales conversion rates.

Here are the five best Magento newsletter Popup extensions you can choose any of the three display methods: specified time delay, manually or when the user logs out. It’s upon the store owner to decide when to restrict popup messages to be displayed on specific devices.

Magento 2 Newsletter Popup Extension by Plumrocket

Magento 2 Newsletter Popup Extension by Plumrocket

Plumrocket solution through Magento 2 newsletter helps online store owners to increase their sales by giving good deals.

Magento 2 newsletter has critical features which help merchants give special promotions and discount codes. Such features include; display rules, animations, display rules, conversations among others.

Remember if you want to determine the efficiency of the popup campaign you can do so by accessing the user interactions with the newsletters.

Newsletter Popup For Magento 2 by MageAnts

Newsletter Popup For Magento 2 by MageAnts

MageAnts is a vital agent of newsletter pop-ups. If you want your business to bloom, add this marketing tool on your site. Source email addresses of clients who are interested in your business. Use them to generate leads, display popup rights and allow easy subscription of website viewers.

Businesses no longer use Flyers and posters to promote their Products. MageAnts has greatly is embraced the sending of newsletters via email. This process helps collect the important leads of customers interested in your company.

You can enable the extensions to acquire home page popup. This extension does well with email marketing. It ensures that you have sufficient clients who like your products due to maximum usability and customization.

Newsletter Pop-up For Magento 2 by IWD Agency

Newsletter Pop-Up for Magento 2 by IWD Agency

IWD Agency has a classic web design for responsive newsletter popups. With Magento 2 popup you can easily adjust the content and design to fit your sales. Magento 2 newsletter has intimate settings which you can alter to suit your promotional desires. You can activate the newsletter popup, control the width and set the time taken to show the popup to your clients.

Remember to enable newsletter configuration to be able to determine whether the customers did subscribe to your newsletter. A text link at the footer helps your clients activate the pop-up. To have more subscribers, enable social media icons with specifications of hover color per social icons. IWD Agency supports all social media accounts.

Popup Manager For Magento 2 by Tigren

Popup Manager for Magento 2 by Tigren

Tigren has an excellent popup manager for Magento 2. You don’t need knowledge on programming to work with it. With this Magento 2 popup extension, you can create unlimited pop-ups, freely customize, track popups with detailed statistics. Once all that is achieved your online clothing store increases traffic.

You can choose any page in your online store to show popup by few clicks. There are many positions on each page, each option offers the same results which make the popups enticing to the customers.

You realize that you can’t customize some parts of a designed website, but with popup manager, you can customize popup to suit your purpose. With it, you can create and manage all popups on your website.

In addition to open popup, you can create an entirely new popup in the back-end. Popup manager for Magento 2 uses Impressions, Window closed, Click inside popup and Goal completion to analyze indicators to determine whether you use them effectively.

Advanced Newsletter Popup for Magento 2 By Solwin Infotech

Advanced Newsletter Popup for Magento 2 by Solwin Infotech

Solwin Infotech has demonstrated that Advanced newsletter popup Magento 2 extension is the cornerstone for the online store. It displays newsletter popup when clients log in your website with a custom message. With a newsletter, you get several orders and new subscribers.

Solwin provides easy to install and manage customizable extensions and beginners needn’t worry about the advanced newsletters. They are also fully responsive to any device. It has also delay option of the popup window which can be adjusted to fit the time that the store owner wants.

In this extension, each newsletter subscription form is displayed for only one user popup window at a time. It becomes easy for the store owner to use a custom title or message to customize newsletter popup with the background color. You can also activate social links with custom social icons as admin.

Many store owners are extremely excited by the module. You can choose your extension from Solwin because they offer 100% open source that is easy to customize.

We considered the best Magento 2 Popup extensions for any kind of store. But, we would like to tell you a couple more tips on how to use pop-ups.

  1. Don’t hit your customers with pop-ups during the first encounter allow them to get acclimatized with the design and layout. Use only the main popup at the home page to attract customer with your current big offer.
  2. After users have browsed enough (more than 2-3 minutes), hit them with popups and expect a positive response. Small popups at the left or right corner of the screen are smooth and won’t distract the user from searching a product.
  3. Ensure that the pop-ups are easy to read, comprehend and exit at will and you’ll see them collecting tremendous benefits for your online store.

How to Install Magento Popup Extensions

It’s extremely easy to install Magento Popup extension.

Step 1. Using Ready to Paste, you download FileZilla or WinSCP clients.

Step 2. After downloading, log in to access downloadable products and then put the code into the folder.

Step 3. You can now extract the package and link to your server using WinSCP or FileZilla Clients and upload the folders to your server.

Step 4. To finish up, run the command line to confirm whether the installation is complete.

Debugging Magento 2 Using Logs

When working with Magento 2, sections of code are often processed unexpectedly. When this happens, developers need to understand the reason for the error and fix it.

Log files are convenient for debugging. In most cases, they help you quickly determine the cause of the error and fix it. In this article, we will examine the types of log files and the specifics of working with them.

Using Logs: Magento 2 Live Site Example

Let’s assume we’re working with a site on Magento 2 that is in production mode (the main “live” mode of Magento 2 sites) and is running on a UNIX-like OS.

Types of Logs

There are two types of logs available to developers: information logs and error logs. An information log can hold information a developer needs for debugging, while error logs hold information about runtime errors. The main information log is saved in your Magento 2 directory: var/log/system.log.

Types of Errors

There are three types of errors:

  • handled exceptions,
  • non-handled exceptions, and
  • fatal runtime errors.

We will consider each of these error types.

Magento 2 has a Psr logging library that implements embedded logging. To log something, you simply have to call the interface Psr\Log\LoggerInterface, which will be implemented using dependency injection of the class Magento\Framework\Logger\Monolog (the dependency is defined in the global app/etc/di.xml).

The interface declares several logging methods, and the class implements them. These methods differ only in terms of the additional information about critical messages shown in the log. The models inherited from AbstractModel, block collections, and helpers have a protected _logger property that can be used for logging. For all remaining classes, you can log using dependency injection in the constructor or using ObjectManager. In the examples below, we will assume that the class has _logger property.

The Principles of Magento Logging

Logging is simple. You just need to call $this->_logger->info(param), where param is some scalar variable that will be logged in the file var/log/system.log.

Calling the error or critical methods will write a scalar variable to this same file. If you pass an object of the class inherited from \Exception as a parameter, then the error will be logged in the file var/log/exception.log. In versions 2.0 and 2.1, the exception’s full trace was recorded to this file, making it possible to easily determine the location of the error and a way to fix it. But starting in version 2.2, only the exception message and the place where it was thrown are recorded.

To get the trace, you need to write $this->_logger->critical($e->_toString());, but the error and trace will be recorded in the file var/log/system.log. Nevertheless, this is convenient when you need to determine the full path to the location where the error occurred and also determine the current values of various parameters in order to understand the reason for the error. Exceptions can only be logged in the catch block of the construct.

try{
..}
catch(\Exception $e){
 $this->_logger->critical($e->__toString());
..}.

If the developer didn’t use exception handling, then sometimes this handling is already implemented at the core level, in particular when outputting blocks.

When an exception occurs when a block’s content is generated, the block will not be displayed, and a message about the error will be displayed in the file var/log/exception.log. Otherwise, if the exception is intercepted by a top-level handler, the server will return an error and the exception will be logged in a separate file in the directory var/report. If the error occurred when processing an API request, the error will be logged in a separate file in the directory var/report/api.

The cases above considered errors that Magento could process. But if a fatal error occurs when executing code, Magento will not be able to process it, and the error will go to the Web server log. Next, we will look at examples of fatal errors, where they appear, and why they appear.

Fatal Errors and the Reasons Behind Them

By default, these files are located in the server’s /var/log directory, with the rest of the path determined by the type of server (Apache, NGINX, PHP-FPM) and configuration features. On live servers (and others) developers often do not have the data in these directories for security reasons, or the server administrator may redirect logging of fatal errors to other files, which will be available. This is often done if several virtual hosts are implemented on one physical server and access to the hosts is limited to certain users.

Sometimes this log is available in Cpanel, if it is supported by the hosting. Since these errors are fatal, the HTTP request will return a 50x error. These types of errors can occur at the PHP level; they can be caused by insufficient memory allotted to runtime or insufficient disk space; and they can also occur at the Apache or NGINX level. One common error of this kind at the NGINX level is be caused by a connection timeout or buffer overflow, which can only be resolved by changing NGINX settings.

There are often redirect errors at the server level as well, which return 404 server errors. There are other types of 40x errors as well, such as transferring more to POST than the server can handle, but that’s a separate topic.

Let’s summarize what we’ve gone over so far.

  1. If the executed code isn’t working as expected, you should first check the Magento logs. More often than not, it’s easy to establish the reason for the error from these logs.
  2. If requests to the server return 40x or 50x errors, you should check the var/report directory and the Web server log, if possible.
  3. When debugging code, log critical variables and check their values.
  4. If existing core code isn’t writing all the necessary information to the log (this usually has to do with error handling) then when you are debugging and finding out the reason for the error, you can temporarily add logging. Don’t forget to roll back changes to the core, returning it to its original state after debugging.
  5. In some cases, logs are the only available means of debugging. For example, cron jobs, API requests, and payment methods can usually only be debugged using logs.
  6. Keep in mind that logs have the tendency to grow, so don’t forget to periodically delete old Magento log files. The automatic deletion of global logs after a certain period of time is usually configured on servers.
  7. Don’t forget to remove logging of safety-critical information from the code after debugging. This usually pertains to credit card information, but it could be other information as well.

Real Examples of Using Logs for Debugging

1. Optimizing a site that has seen a sharp increase in front-end page load speeds after upgrading to version 2.3.

This may be caused by conflicts between obsolete site modules and the new core version of Magento. There is speculation that the problem may be related to the generation of a menu in a custom extension. The menu displays categories and uses flat tables. When researching, you were able to establish that category information is received in the _loadNodes method of the \Magento\Catalog\Model\ResourceModel\Category\Flat class.

The method looks as follows:

protected function _loadNodes($parentNode = null, $recursionLevel = 0, $storeId = 0, $skipMenuFilter = false)
{
    $_conn = $this->getConnection();
    $startLevel = 1;
    $parentPath = '';
    if ($parentNode instanceof \Magento\Catalog\Model\Category) {
        $parentPath = $parentNode->getPath();
        $startLevel = $parentNode->getLevel();
    } elseif (is_numeric($parentNode)) {
        $selectParent = $_conn->select()->from(
            $this->getMainStoreTable($storeId)
        )->where(
            'entity_id = ?',
            $parentNode
        )->where(
            'store_id = ?',
            $storeId
        );
        $parentNode = $_conn->fetchRow($selectParent);
        if ($parentNode) {
            $parentPath = $parentNode['path'];
            $startLevel = $parentNode['level'];
        }
    }
    $select = $_conn->select()->from(
        ['main_table' => $this->getMainStoreTable($storeId)],
        [
            'entity_id',
            new \Zend_Db_Expr('main_table.' . $_conn->quoteIdentifier('name')),
            new \Zend_Db_Expr('main_table.' . $_conn->quoteIdentifier('path')),
            'is_active',
            'is_anchor'
        ]
    )->joinLeft(
        ['url_rewrite' => $this->getTable('url_rewrite')],
        'url_rewrite.entity_id = main_table.entity_id AND url_rewrite.is_autogenerated = 1'
        . $_conn->quoteInto(' AND url_rewrite.store_id = ?', $storeId)
        . $_conn->quoteInto(' AND url_rewrite.entity_type = ?', CategoryUrlRewriteGenerator::ENTITY_TYPE),
        ['request_path' => 'url_rewrite.request_path']
    )->where('main_table.is_active = 1');
    if (false == $skipMenuFilter) {
        $select->where('main_table.include_in_menu = ?', '1');
    }
    $select->order('main_table.position');
    if ($parentPath) {
        $select->where($_conn->quoteInto("main_table.path like ?", "{$parentPath}/%"));
    }
    if ($recursionLevel != 0) {
        $levelField = $_conn->quoteIdentifier('level');
        $select->where($levelField . ' <= ?', $startLevel   $recursionLevel);
    }
    $inactiveCategories = $this->getInactiveCategoryIds();
    if (!empty($inactiveCategories)) {
        $select->where('main_table.entity_id NOT IN (?)', $inactiveCategories);
    }
    // Allow extensions to modify select (e.g. add custom category attributes to select)
    $this->_eventManager->dispatch('catalog_category_flat_loadnodes_before', ['select' => $select]);
    $arrNodes = $_conn->fetchAll($select);
    $nodes = [];
    foreach ($arrNodes as $node) {
        $node['id'] = $node['entity_id'];
        $nodes[$node['id']] = $this->_categoryFactory->create()->setData($node);
    }
    return $nodes;
}

Since we need to get the request for debugging and optimization, we can modify this method:

protected function _loadNodes($parentNode = null, $recursionLevel = 0, $storeId = 0, $skipMenuFilter = false)
{
    $_conn = $this->getConnection();
    $startLevel = 1;
    $parentPath = '';
    if ($parentNode instanceof \Magento\Catalog\Model\Category) {
        $parentPath = $parentNode->getPath();
        $startLevel = $parentNode->getLevel();
    } elseif (is_numeric($parentNode)) {
        $selectParent = $_conn->select()->from(
            $this->getMainStoreTable($storeId)
        )->where(
            'entity_id = ?',
            $parentNode
        )->where(
            'store_id = ?',
            $storeId
        );
        $parentNode = $_conn->fetchRow($selectParent);
        if ($parentNode) {
            $parentPath = $parentNode['path'];
            $startLevel = $parentNode['level'];
        }
    }
    $select = $_conn->select()->from(
        ['main_table' => $this->getMainStoreTable($storeId)],
        [
            'entity_id',
            new \Zend_Db_Expr('main_table.' . $_conn->quoteIdentifier('name')),
            new \Zend_Db_Expr('main_table.' . $_conn->quoteIdentifier('path')),
            'is_active',
            'is_anchor'
        ]
    )->joinLeft(
        ['url_rewrite' => $this->getTable('url_rewrite')],
        'url_rewrite.entity_id = main_table.entity_id AND url_rewrite.is_autogenerated = 1'
        . $_conn->quoteInto(' AND url_rewrite.store_id = ?', $storeId)
        . $_conn->quoteInto(' AND url_rewrite.entity_type = ?', CategoryUrlRewriteGenerator::ENTITY_TYPE),
        ['request_path' => 'url_rewrite.request_path']
    )->where('main_table.is_active = 1');
    if (false == $skipMenuFilter) {
        $select->where('main_table.include_in_menu = ?', '1');
    }
    $select->order('main_table.position');
    if ($parentPath) {
        $select->where($_conn->quoteInto("main_table.path like ?", "{$parentPath}/%"));
    }
    if ($recursionLevel != 0) {
        $levelField = $_conn->quoteIdentifier('level');
        $select->where($levelField . ' <= ?', $startLevel   $recursionLevel);
    }
    $inactiveCategories = $this->getInactiveCategoryIds();
    if (!empty($inactiveCategories)) {
        $select->where('main_table.entity_id NOT IN (?)', $inactiveCategories);
    }
    // Allow extensions to modify select (e.g. add custom category attributes to select)
    $this->_eventManager->dispatch('catalog_category_flat_loadnodes_before', ['select' => $select]);
    $logger = \Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface');
    $logger->info($select->__toString());
    $arrNodes = $_conn->fetchAll($select);
    $nodes = [];
    foreach ($arrNodes as $node) {
        $node['id'] = $node['entity_id'];
        $nodes[$node['id']] = $this->_categoryFactory->create()->setData($node);
    }
    return $nodes;
}

Then, after loading the page without the cache in the var/log/system.log file, we see the following message:

[2019-02-04 15:20:25] main.INFO: SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`, `main_table`.`is_active`, `main_table`.`is_anchor`, `url_rewrite`.`request_path` FROM `catalog_category_flat_store_1` AS `main_table`
LEFT JOIN `url_rewrite` ON url_rewrite.entity_id = main_table.entity_id AND url_rewrite.is_autogenerated = 1 AND url_rewrite.store_id = ‘1’ AND url_rewrite.entity_type = ‘category’ WHERE (main_table.is_active = 1) AND (main_table.include_in_menu = ‘1’) AND (main_table.path like ‘1/71/%’) ORDER BY `main_table`.`position` ASC

We received a request in the message that we can optimize. If we need to get back-trace, we can get it as follows:

View code:

[2019-02-04 17:43:29] main.ERROR: Exception: SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`, `main_table`.`is_active`, `main_table`.`is_anchor`, `url_rewrite`.`request_path` FROM `catalog_category_flat_store_1` AS `main_table`
 LEFT JOIN `url_rewrite` ON url_rewrite.entity_id = main_table.entity_id AND url_rewrite.is_autogenerated = 1 AND url_rewrite.store_id = '1' AND url_rewrite.entity_type = 'category' WHERE (main_table.is_active = 1) AND (main_table.include_in_menu = '1') AND (main_table.path like '1/71/%') ORDER BY `main_table`.`position` ASC
 in /var/www/toshno/vendor/magento/module-catalog/Model/ResourceModel/Category/Flat.php:304
Stack trace:
#0 /var/www/toshno/vendor/magento/module-catalog/Model/ResourceModel/Category/Flat.php(376): Magento\Catalog\Model\ResourceModel\Category\Flat->_loadNodes(Object(Magento\Catalog\Model\Category\Interceptor), 0, '1')
#1 /var/www/toshno/vendor/magento/module-catalog/Model/ResourceModel/Category/Flat.php(433): Magento\Catalog\Model\ResourceModel\Category\Flat->getNodes('71', 0, '1')
#2 /var/www/toshno/vendor/magento/module-catalog/Model/Category.php(970): Magento\Catalog\Model\ResourceModel\Category\Flat->getCategories('71', 0, true, false, true)
#3 /var/www/toshno/generated/code/Magento/Catalog/Model/Category/Interceptor.php(466): Magento\Catalog\Model\Category->getCategories('71', 0, true, false, true)
#4 /var/www/toshno/vendor/magento/module-catalog/Helper/Category.php(115): Magento\Catalog\Model\Category\Interceptor->getCategories('71', 0, true, false, true)
#5 /var/www/toshno/app/code/Magentice/Megamenu/Block/Topmenu.php(60): Magento\Catalog\Helper\Category->getStoreCategories(true, false, true)
#6 /var/www/toshno/app/code/Magentice/Megamenu/Block/Topmenu.php(192): Magentice\Megamenu\Block\Topmenu->getStoreCategories(true, false, true)
#7 /var/www/toshno/app/design/frontend/Magentice/enhanced/Magentice_Megamenu/templates/topmenu.phtml(25): Magentice\Megamenu\Block\Topmenu->getMegamenuHtml()
#8 /var/www/toshno/vendor/magento/framework/View/TemplateEngine/Php.php(59): include('/var/www/toshno...')
#9 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(271): Magento\Framework\View\TemplateEngine\Php->render(Object(Magentice\Megamenu\Block\Topmenu), '/var/www/toshno...', Array)
#10 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(301): Magento\Framework\View\Element\Template->fetchView('/var/www/toshno...')
#11 /var/www/toshno/vendor/magento/framework/View/Element/AbstractBlock.php(668): Magento\Framework\View\Element\Template->_toHtml()
#12 /var/www/toshno/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Element\AbstractBlock->toHtml()
#13 /var/www/toshno/vendor/magento/framework/View/Layout.php(533): Magento\Framework\View\Layout->_renderBlock('mg.topnav')
#14 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('mg.topnav')
#15 /var/www/toshno/vendor/magento/framework/View/Layout.php(488): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('mg.topnav')
#16 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('mg.topnav', true)
#17 /var/www/toshno/vendor/magento/framework/View/Element/AbstractBlock.php(512): Magento\Framework\View\Layout\Interceptor->renderElement('mg.topnav', true)
#18 /var/www/toshno/vendor/magento/module-theme/view/frontend/templates/html/container.phtml(10): Magento\Framework\View\Element\AbstractBlock->getChildHtml()
#19 /var/www/toshno/vendor/magento/framework/View/TemplateEngine/Php.php(59): include('/var/www/toshno...')
#20 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(271): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Framework\View\Element\Template), '/var/www/toshno...', Array)
#21 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(301): Magento\Framework\View\Element\Template->fetchView('/var/www/toshno...')
#22 /var/www/toshno/vendor/magento/framework/View/Element/AbstractBlock.php(668): Magento\Framework\View\Element\Template->_toHtml()
#23 /var/www/toshno/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Element\AbstractBlock->toHtml()
#24 /var/www/toshno/vendor/magento/framework/View/Layout.php(533): Magento\Framework\View\Layout->_renderBlock('store.menu')
#25 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('store.menu')
#26 /var/www/toshno/vendor/magento/framework/View/Layout.php(488): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('store.menu')
#27 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('store.menu', true)
#28 /var/www/toshno/vendor/magento/module-theme/view/frontend/templates/html/sections.phtml(26): Magento\Framework\View\Layout\Interceptor->renderElement('store.menu')
#29 /var/www/toshno/vendor/magento/framework/View/TemplateEngine/Php.php(59): include('/var/www/toshno...')
#30 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(271): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Framework\View\Element\Template), '/var/www/toshno...', Array)
#31 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(301): Magento\Framework\View\Element\Template->fetchView('/var/www/toshno...')
#32 /var/www/toshno/vendor/magento/framework/View/Element/AbstractBlock.php(668): Magento\Framework\View\Element\Template->_toHtml()
#33 /var/www/toshno/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Element\AbstractBlock->toHtml()
#34 /var/www/toshno/vendor/magento/framework/View/Layout.php(533): Magento\Framework\View\Layout->_renderBlock('navigation.sect...')
#35 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('navigation.sect...')
#36 /var/www/toshno/vendor/magento/framework/View/Layout.php(488): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('navigation.sect...')
#37 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('navigation.sect...', true)
#38 /var/www/toshno/vendor/magento/framework/View/Element/AbstractBlock.php(508): Magento\Framework\View\Layout\Interceptor->renderElement('navigation.sect...', true)
#39 [internal function]: Magento\Framework\View\Element\AbstractBlock->getChildHtml('navigation.sect...')
#40 /var/www/toshno/vendor/magento/framework/View/TemplateEngine/Php.php(82): call_user_func_array(Array, Array)
#41 /var/www/toshno/app/design/frontend/Magentice/enhanced/Magentice_Enhanced/templates/html/header.phtml(357): Magento\Framework\View\TemplateEngine\Php->__call('getChildHtml', Array)
#42 /var/www/toshno/vendor/magento/framework/View/TemplateEngine/Php.php(59): include('/var/www/toshno...')
#43 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(271): Magento\Framework\View\TemplateEngine\Php->render(Object(Magentice\Enhanced\Block\Template), '/var/www/toshno...', Array)
#44 /var/www/toshno/vendor/magento/framework/View/Element/Template.php(301): Magento\Framework\View\Element\Template->fetchView('/var/www/toshno...')
#45 /var/www/toshno/vendor/magento/framework/View/Element/AbstractBlock.php(668): Magento\Framework\View\Element\Template->_toHtml()
#46 /var/www/toshno/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Element\AbstractBlock->toHtml()
#47 /var/www/toshno/vendor/magento/framework/View/Layout.php(533): Magento\Framework\View\Layout->_renderBlock('enhanced_header')
#48 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('enhanced_header')
#49 /var/www/toshno/vendor/magento/framework/View/Layout.php(488): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('enhanced_header')
#50 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('enhanced_header', false)
#51 /var/www/toshno/vendor/magento/framework/View/Layout.php(585): Magento\Framework\View\Layout\Interceptor->renderElement('enhanced_header', false)
#52 /var/www/toshno/vendor/magento/framework/View/Layout.php(535): Magento\Framework\View\Layout->_renderContainer('page.wrapper', false)
#53 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('page.wrapper')
#54 /var/www/toshno/vendor/magento/framework/View/Layout.php(488): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('page.wrapper')
#55 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('page.wrapper', false)
#56 /var/www/toshno/vendor/magento/framework/View/Layout.php(585): Magento\Framework\View\Layout\Interceptor->renderElement('page.wrapper', false)
#57 /var/www/toshno/vendor/magento/framework/View/Layout.php(535): Magento\Framework\View\Layout->_renderContainer('root', false)
#58 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('root')
#59 /var/www/toshno/vendor/magento/framework/View/Layout.php(488): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('root')
#60 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(193): Magento\Framework\View\Layout->renderElement('root', true)
#61 /var/www/toshno/vendor/magento/framework/View/Layout.php(954): Magento\Framework\View\Layout\Interceptor->renderElement('root')
#62 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Layout->getOutput()
#63 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Layout\Interceptor->___callParent('getOutput', Array)
#64 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception\{closure}()
#65 /var/www/toshno/generated/code/Magento/Framework/View/Layout/Interceptor.php(494): Magento\Framework\View\Layout\Interceptor->___callPlugins('getOutput', Array, Array)
#66 /var/www/toshno/vendor/magento/framework/View/Result/Page.php(258): Magento\Framework\View\Layout\Interceptor->getOutput()
#67 /var/www/toshno/vendor/magento/framework/View/Result/Layout.php(171): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#68 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#69 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#70 /var/www/toshno/app/code/Potato/Compressor/Plugin/ControllerRenderResultAfter.php(58): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#71 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(135): Potato\Compressor\Plugin\ControllerRenderResultAfter->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#72 /var/www/toshno/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#73 /var/www/toshno/generated/code/Magento/Framework/View/Result/Page/Interceptor.php(130): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, NULL)
#74 /var/www/toshno/vendor/magento/framework/App/Http.php(139): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#75 /var/www/toshno/generated/code/Magento/Framework/App/Http/Interceptor.php(24): Magento\Framework\App\Http->launch()
#76 /var/www/toshno/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http\Interceptor->launch()
#77 /var/www/toshno/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#78 {main} [] []

After analyzing the back-trace code and getting the request, we see that it’s possible to reduce category selection by restricting the level of categories that will be displayed in the menu. We can do this with the parameter of the ‘catalog/navigation/max_depth’ configuration. At the same time, we can optimize the request by adding additional indexes on the index table catalog_category_flat_store_1.

This is possible is because this is an index table and is recreated when the index is rebuilt by the createTable() method of the Magento\Catalog\Model\Indexer\Category\Flat\Action\Full class, while the method getFlatTableStructure() gets the table structure. Unfortunately, both methods are protected, so you can’t apply plugins to them, but you can redefine the indexer class using di.xml:

<preference for="Magento\Catalog\Model\Indexer\Category\Flat\Action\Full" type="Web4pro\All\Model\Indexer\Category\Full"/>

And the class looks as follows:

class Full extends \Magento\Catalog\Model\Indexer\Category\Flat\Action\Full
{
    protected function getFlatTableStructure($tableName)
    {
        $table = parent::getFlatTableStructure($tableName);
        $table->addIndex('category_active_parent_id',array('is_active','parent_id'),array('type'=>'index'));
        $table->addIndex('category_active_menu_level',array('is_active','include_in_menu','level','path'),array('type'=>'index'));
        return $table;
    }
}

After rebuilding the Magento indexes, loading the page without the generated cache significantly sped up. All that remains is to take the logging code that helped solve the problem out of the core files.

2. Migrating a site from Magento 1 to Magento 2. Data was migrated using a migration tool. Products on the Magento 1 site are updated by cron from a CSV file generated by the ERP system. With Magento 1, MAGMI is used for import, but this system can’t be used with Magento 2. Instead of MAGMI, we use the Firebear_ImportExport module, which supports the import of products by cron. The module also supports generating unique SEO URLs for products. However, the cron import task was found to not be ending successfully. When analyzing the exception.log file, the following message about the error was found

View code:

[2019-02-06 08:34:27] main.CRITICAL: URL key for specified store already exists. {"exception":"[object] (Magento\\UrlRewrite\\Model\\Exception\\UrlAlreadyExistsException(code: 0): URL key for specified store already exists. at /home/magento/www/vendor/magento/module-url-rewrite/Model/Storage/DbStorage.php:220, Magento\\Framework\\Exception\\AlreadyExistsException(code: 0): URL key for specified store already exists. at /home/magento/www/vendor/magento/module-url-rewrite/Model/Storage/DbStorage.php:250, Magento\\Framework\\DB\\Adapter\\DuplicateException(code: 1062): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'skinny-charles-3-pc-4803.html-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT  INTO `url_rewrite` (`redirect_type`,`is_autogenerated`,`metadata`,`description`,`entity_type`,`entity_id`,`request_path`,`target_path`,`store_id`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?) at /home/magento/www/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php:580, Zend_Db_Statement_Exception(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'skinny-charles-3-pc-4803.html-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID', query was: INSERT  INTO `url_rewrite` (`redirect_type`,`is_autogenerated`,`metadata`,`description`,`entity_type`,`entity_id`,`request_path`,`target_path`,`store_id`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?, ?) at /home/magento/www/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php:235, PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'skinny-charles-3-pc-4803.html-1' for key 'URL_REWRITE_REQUEST_PATH_STORE_ID' at /home/magento/www/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php:228)"} []

We query the database:

mysql> select * from url_rewrite where request_path = 'skinny-charles-3-pc-4803.html'; 
 ---------------- ------------- ----------- ------------------------------- ------------------------------- --------------- ---------- ------------- ------------------ ----------  
| url_rewrite_id | entity_type | entity_id | request_path                  | target_path                   | redirect_type | store_id | description | is_autogenerated | metadata | 
 ---------------- ------------- ----------- ------------------------------- ------------------------------- --------------- ---------- ------------- ------------------ ----------  
|        1509442 | product     |      2496 | skinny-charles-3-pc-4803.html | skinny-charles-3-pc-7243.html |           301 |        1 | NULL        |                0 | NULL     | 
 ---------------- ------------- ----------- ------------------------------- ------------------------------- --------------- ---------- ------------- ------------------ ----------  
1 row in set (0,01 sec) 

mysql> select * from url_rewrite where request_path = 'skinny-charles-3-pc-7243.html'; 
 ---------------- ------------- ----------- ------------------------------- ------------------------------ --------------- ---------- ------------- ------------------ ----------  
| url_rewrite_id | entity_type | entity_id | request_path                  | target_path                  | redirect_type | store_id | description | is_autogenerated | metadata | 
 ---------------- ------------- ----------- ------------------------------- ------------------------------ --------------- ---------- ------------- ------------------ ----------  
|        1508688 | product     |      2496 | skinny-charles-3-pc-7243.html | catalog/product/view/id/2496 |             0 |        1 | NULL        |                1 | NULL     | 
 ---------------- ------------- ----------- ------------------------------- ------------------------------ --------------- ---------- ------------- ------------------ ----------  
1 row in set (0,00 sec)

It turns out that this URL had already been used for the product with ID 2496, and in the database, there’s a 301 redirect to this product’s page. But later it turned out that this 301 redirect leads to a 404 page anyway since the product had been Disabled and isn’t visible on the front end. This means that this 301 redirect can be deleted from the database without any negative consequences.

3. The following message was found on the site when checking the exception.log file

View code:

2019-02-11 13:00:03] main.CRITICAL: Warning: Missing argument 1 for Magento\Framework\Mview\View\Changelog::clear(), called in /home/magento/www/vendor/magento/framework/Interception/Interceptor.php on line 58 and defined in /home/magento/www/vendor/magento/framework/Mview/View/Changelog.php on line 116 {"exception":"[object] (Exception(code: 0): Warning: Missing argument 1 for Magento\\Framework\\Mview\\View\\Changelog::clear(), called in /home/magento/www/vendor/magento/framework/Interception/Interceptor.php on line 58 and defined in /home/magento/www/vendor/magento/framework/Mview/View/Changelog.php on line 116 at /home/magento/www/vendor/magento/framework/App/ErrorHandler.php:61)"}

This error occurs when rebuilding indexes. Since the method is called in the Interceptor trait, the reason for the error is most likely a plugin that was written incorrectly. We check all the plugins defined in di.xml for the class Magento\Framework\Mview\View\Changelog. We find this definition in the Amasty Order Attributes module.

<type name="Magento\Framework\Mview\View\Changelog">
    <plugin name="Amasty_Orderattr::ChangelogPlugin" type="Amasty\Orderattr\Model\Indexer\Mview\ChangelogPlugin" />
</type>

In module version 3.4.5 this class contains the following method:

public function aroundClear(\Magento\Framework\Mview\View\Changelog $subject, \Closure $proceed) 
    { 
        if ($this->isAmastyView($subject)) { 
            $this->changelog->setViewId($subject->getViewId()); 
            return $this->changelog->clear(); 
        } else { 
            return $proceed(); 
        }
 Since the original clear method of the class, Magento\Framework\Mview\View\Changelog looks like this in Magento 2.2.6:
public function clear($versionId)
{
    $changelogTableName = $this->resource->getTableName($this->getName());
    if (!$this->connection->isTableExists($changelogTableName)) {
        throw new ChangelogTableNotExistsException(new Phrase("Table %1 does not exist", [$changelogTableName]));
    }
    $this->connection->delete($changelogTableName, ['version_id < ?' => (int)$versionId]);
    return true;
}

Since the method has the mandatory $versionId parameter, this error is thrown when attempting to call the parent method from the plugin. Amasty corrected this error in version 3.4.8, where the plugin method looks as follows:

public function aroundClear(\Magento\Framework\Mview\View\Changelog $subject, \Closure $proceed, $versionId)
{
    if ($this->isAmastyView($subject)) {
        $this->changelog->setViewId($subject->getViewId());
        return $this->changelog->clear($versionId);
    } else {
        return $proceed($versionId);
    }
}

As you can see, the problem was caused by incompatibility between the module version and Magento version, and it was solved by updating the module.