The world is a pretty strange place right now due to the coronavirus outbreak. While the majority of the impact on our daily lives and businesses is felt physically, due social distancing and the closure of nonessential brick-and-mortar stores in most countries/states, it is also affecting our online experiences.
People are now buying additional goods online:
- that they used to rely on physical stores for, such as groceries or household essentials;
- to help with boredom (and sanity), especially for children, such as garden toys and board games; and
- that they deem necessities or supportive of their health and well-being, such as medical items or fitness equipment.
Equally, many people are out of work and financially struggling, or they are reducing their spend on nonessentials and saving (in case they later find themselves in either of those situations).
For businesses, merchants specifically, this could put you in one of the following categories:
- A solely, or mostly, offline retailer, forced to close their stores, in desperate need of an online presence to keep trading so they can retain, not just jobs for their staff, but the business itself from going under
- A retailer who trades both offline and online, but again has closed stores, dealing with a drop of in-person revenue, but the demand for increased online sales
- A solely, or mostly, online retailer, selling goods in high demand who has seen a massive uplift in sales
- A retailer with some form of online presence selling products in low/no demand, or perhaps faced to cease trading altogether
Of the above, merchants in the first category have the most upheaval and challenges to overcome. For them, getting an online presence is an absolute necessity, and in most cases, to achieve that fast and potentially on a limited budget, Magento is not likely to be the best choice. If you are in this category or assisting a merchant who is, get yourself over to the incredible community effort that is Offline2On (and good luck!)
I’ll be focusing on merchants who already have a Magento store within the other categories, split into two areas:
- Merchants struggling with increased demand from a logistics/fulfilment perspective*
- Merchants with little no/demand needing to scale back or shut down operations altogether
*If you have no issues with fulfilling additional orders, but your site is struggling to cope with the traffic, then you’ll want to review your server resource/scalability or review/fix any performance bottlenecks in the code. Speak to your hosting/development provider for guidance.
The majority of the suggestions involve restricting access/purchase of goods. They are focused on operations that can be implemented directly within or via the Magento admin panel, i.e., can be actioned immediately and don’t require development and the overhead that comes with the process (e.g., code review, quality assurance, and deployment).
The scenarios are all based on features of Magento 2 Open Source, but all are also applicable to Magento 1 (though the admin menu/sections may vary).
- We need to restrict the products customers can purchase or cease trading.
- We need to limit the number of specific items that customers can order.
- We need customers to order a minimum amount of goods.
- We can only fulfil a limited number of orders/products a day.
- We need to restrict shipping to limited locations/carriers.
If You Need to Restrict the Products Customers Can Purchase or Cease Trading
If you are required only to sell goods that are deemed essential, temporarily can’t source certain items, or you need to focus on a smaller range of products to help simplify/support your fulfilment process, you’ll want to ensure customers are limited to what they can purchase.
Or, if you have to take the difficult decision to cease trading altogether, then you’ll need to apply the same across your entire catalogue.
There are many ways to do this, but without thought and consideration, you could harm the visibility and ranking of your site. While you might think that isn’t important given the situation we all currently find ourselves in, eventually we’ll hopefully return to some form of normality. When this time comes, you’ll want to ensure you can pick up where you left off.
While you might think that isn’t important given the situation we all currently find ourselves in, eventually we’ll hopefully return to some form of normality.
Google has released an article that guides how to pause your site with minimal to no impact search rankings, which essentially warns against blocking access some or all of your website. From an e-commerce/Magento point of view, what Google is saying is don’t disable products, categories, or any other landing pages in an attempt to stop customers ordering.
If you did disable them, the search rankings for these pages would be negatively impacted. When regular life/trading resumes and the pages are re-enabled, bare in mind it could take substantial time for that damage to be undone (i.e., for the pages to regain their previous search ranking/visibility). The delay could be a significant hindrance to getting back to previous trading levels and therefore impact your revenue further.
Rather than turn off all or parts of the site en masse, it is better to take one or more of the following steps:
- Update product availability (i.e., put items out of stock)
- Disable the checkout
- Provide clear global messaging across the site.
Update Product Availability (i.e., Put Items Out of Stock)
Changing product availability, in theory, is a straightforward change to make, in that you have full control of all products stock statuses and quantities from within the Magento admin panel already. There are tools at hand to update these in bulk also, via import or using the mass actions on the product grid to update attributes.
The complexity comes if, like many merchants, you manage stock control via an external system on a frequent schedule. In this scenario, making manual changes to stock within the Magento admin panel will be short-lived, as the external integration will revert them whenever it runs. Unless you can disable this integration running or make changes within the external system, you may need to get creative in Magento.
The best, or cleanest, way to do this would be to install an additional module. Fooman has released an extension that allows you to mark products as essential and then apply a global toggle that overrides any stock statuses, making all nonessential products unavailable.
If you don’t have time for code changes, then the best workaround to consider is to set the “Out-of-Stock Threshold” for products to a value higher than that is currently in stock. This forces Magento to mark the items as out of stock, and it’s unlikely your external inventory system synchronizes this data (so shouldn’t be reverted when stock updates run). This setting can be applied on a per-product basis under the “Advanced Inventory” section (below the “Quantity” field), via mass actions and the import tool, or globally from the “STORES > Configuration” area of the admin panel, under the “CATALOG > Inventory” section.
If you utilize Google Shopping, then ensure your feed (if used) is updated to reflect your new product availability, or if you have it configured, Magento’s built-in structured data (schema) for products should do this job for you.
One final consideration to make: By default, Magento does not show out-of-stock items within product listing pages (category and search). This may be desired normally, but if you’re putting large numbers of products, perhaps in some cases entire categories, out of stock, then you may not want to have sparse/empty pages on the frontend. To resolve this, head back to the “CATALOG > Inventory” section in the “STORES > Configuration” area of the admin panel and set “Display Products Availability in Stock on Storefront” to “Yes.”
For more details on the above inventory settings, and others, see Magento’s User Guide.
Disable the Checkout
You’ll only want to undertake this measure if you’re ceasing all trading, whether intermittently or for the foreseeable future.
You may be wondering whether it’s required to implement both this and the stock availability above. If you just want to restrict orders, this step is enough. But as per Google’s advice, updating the availability of your products and keeping them active is recommended.
To disable the checkout, you’ll simply need to turn off either your available shipping methods, payment methods, or both. I’d advise both, just to be safe, unless you have a unique scenario. For example, such as disabling shipping to restrict the purchase of all physical goods and leaving payments active for any virtual/download products you may sell that are unaffected by COVID-19.
If you need to take either of these measures, head over to the “STORES > Configuration” area of the Magento admin panel. Under the “SALES” area, you’ll then need to navigate into the “Shipping Methods” and “Payment Methods” sections and disable the appropriate methods (i.e., those you currently have active).
Provide Clear Global Messaging Across the Site
Both of the above measures will help you effectively stop customers from ordering. Still, without clear messaging, you’re likely to confuse and frustrate customers, especially if the first time they realize you have restrictions in place is after they make it to the checkout following browsing.
Most merchants are updating the homepage CMS controlled areas with a banner explaining their current trading situation. This is good, but not all customers land on the site via the homepage or visit it during their stay. What would be much better is a standout global messaging panel, in the header of the website, that appears on every page, including checkout.
Thankfully, this is again something that can be implemented purely from the Magento admin panel, using a combination of a CMS (Static) Block and a Widget (a tool that allows placement of various content types almost anywhere on-site).
First off, head over to the “CONTENT > Blocks” area of the admin panel, and click on the orange “Add New Block” button in the top right of the page. In this block, add the content you want to display in the header on every page. Magento only comes with a basic WYSIWYG, so if you’d like to add a splash of color like in the example below, you’ll need to add a bit of custom HTML/CSS. If you’re lucky enough to have a content editor like Page Builder or BlueFoot, then you’ll have much more control.
Once you’re done, save the block then navigate to “CONTENT > Widgets” and click on the orange “Add Widget” button in the top right of the page. Select “CMS Static Block” as the “Widget Type” and then select the theme* you want to add the message, too, as well as a title (this is for admin use only) and the storefronts you wish to apply this to.
*If you have more than one theme across storefronts, you’ll need to create multiple widgets: one for each theme.
The key part is setting the “Layout Updates,” which determines the pages and position in which your message will show. To make this sitewide, set “Display On” to “All Pages,” and to make the message appear at the top of the page above all other content, select “Page Top” for the “Container” option.
Lastly, in the left-hand tab section, select “Widget Options,” click “Select Block...” and choose the CMS (Static) Block that was created previously, before saving the widget.
You’ll then need to refresh the invalidated caches under “SYSTEM > Cache Management” to see the changes on the frontend.
If you have further content/updates that you need to provide customers on your current trading status during this time, then create a new “CMS Page” with all the details and link to it from your newly created global messaging panel.
If You Need to Limit the Number of Items that Customers Can Order
If you’re facing issues with a high demand for certain goods (like supermarkets/grocery stores are having with toilet roll/paper and pasta), then you may feel a moral obligation to limit customers to buy up to a set quantity of a given item only.
Thankfully, Magento’s “Maximum Qty Allowed in Shopping Cart” setting has you covered and is simply a case of setting the maximum value you want to allow customers to purchase. You can set this either globally (to apply to the same maximum amount all products) or per product. Remember, you can utilize mass actions or the data import tool to help implement this in bulk.
The only shortcoming of this method is that there is nothing to stop customers from placing multiple orders to try and obtain more goods. You can decline these orders, but it requires manual intervention, which at scale may not be realistic. Alternatively, you could add a deterrent via shipping costs, so that placing multiple orders is not an attractive/affordable proposition, but consider that you could also be out pricing out those with lesser financial resources.
If restricting individual products within orders by a maximum amount is not suitable for you, you can achieve a similar effect across the entire cart by getting creative with shipping methods. Utilizing Magento’s built-in “Table Rates,” you can restrict shipping options (and therefore the ability to checkout), by either price, weight, or the total quantity of items in your basket. For example, you could disallow orders:
- Over 20 items in total
- Over £100 in total
- Over 10kg in total
I won’t cover setting this up in any further detail, as Magento’s documentation provides a useful guide. The only thing to bear in mind is that when no rates are available (i.e., the customer has not met or exceeded a threshold), then the default “Sorry, no quotes are available for this order at this time” message displays in place of shipping rates.
This message isn’t particularly helpful to customers. Without development work/deployment to replace the wording, the simplest and most effective method would again be to ensure you have clear global messaging setup.
If you, like many other Magento merchants, already have a third-party shipping solution, such as ShipperHQ, it’s highly likely it too will be able to manage these scenarios. Speak to the service provider/extension vendor or look through their user guides for more detail.
If You Need Customers to Order a Minimum Amount of Goods
Setting a minimum order amount may be less a demand issue, it could be more logistical, perhaps to aid helping warehouse workers keep their distance, or to dissuade customers from placing small convenience or gift orders. Regardless, if you need to limit the minimum order amount, default Magento functionality is again available to help out.
Magento’s Minimum Order Amount functionality can be enabled within the “STORES > Configuration” area of the admin panel, under the “SALES > Sales” section. From here, you can enable the feature, set the minimum monetary value to allow customers to checkout, whether tax and discounts are considered in the calculations, as well as a custom message to display on the cart page when the minimum amount is not met.
Once in place, whenever a customer attempts to checkout with goods totaling less than the minimum amount required, the message configured is displayed, and the “Proceed to Checkout” button is disabled.
If restricting orders by a minimum monetary amount is not suitable for you, you can again utilize the “Table Rates” (or a third-party) shipping method to limit shipping options by either total weight or quantity of items in the cart.
If You Can Only Fulfil a Limited Number of Orders/Products a Day
Whether you have a much higher than usual volume of orders, have a shortage of warehouse staff to fulfill orders or a combination of the two, you may find yourself in the situation where you physically cannot keep up the demand, and the only (short-term) option is to limit the orders you can take daily.
This has been seen across the United Kingdom (and likely elsewhere in the world), where supermarkets, now with an increased demand for online ordering/delivery, just can’t keep up. Most have implemented a commercial queuing (or virtual waiting room) system to restrict access to the site and, therefore, sales.
Assuming you don’t have the time, or perhaps the funds, to implement this type of service or other custom development, then you’re only left with applying the same suggestion as discussed earlier: disabling checkout.
As before, you’d want to disable active shipping/payment methods to disable the checkout, but daily after you’ve hit your capacity for fulfilment. The following morning (or whenever suits based on your peak trading patterns) you could then re-enable and continue to repeat the cycle while the demand continues, or until you can source more staff.
Again, you’d want to ensure this is clear to customers, making use of the global messaging panel via the use of a widget. You may want to consider creating 2 CMS (Static) Blocks — one for when you’re trading, one for when you’re paused — which you update within the widget at the same time the checkout is enabled/disabled.
If You Need to Restrict Shipping to Limited Locations/Carriers
Whether you need to simplify fulfilment to get you through this period, can no longer legally send goods to specific locations, or you’re having issues with individual carriers, you may need to make some changes to your shipping setup.
Again, if you already have a third-party shipping solution, it’s likely you can manage all of this already, with minimum hassle. If not, then the default Table Rates (or third-party) shipping method is again your only real choice to allow you to limit either all or some shipping options by location. These rules/restrictions need to be set up based on country, region, and post/ZIP code.
For U.K. merchants, you’re likely to come unstuck fast if you need any kind of postcode matching logic and will probably need to source a third-party solution. While I don’t wish to promote paid services as part of this piece, I can only really recommended ShipperHQ as the solution that will make light work of all the shipping-related restrictions proposed in this article.
Hopefully, this piece has helped in some way, even if you’ve simply just learned something new you didn’t know Magento could do out of the box before. This is a strange time, and being able to implement relevant restrictions might be critical to keeping your online business running.
If you have feedback on any of the suggestions or have other scenarios you’d like some guidance on, I’d be happy to help, so please get in touch.
I’ll leave you with one final piece of advice, which, regardless of the scenarios you are facing (whether they are covered above or not), I suggest keeping these three things in mind when making a decision on the best course of action:
- How do we implement the restriction quickly, but fairly?
- How do we ensure we are not harming the site’s organic visibility/ranking (SEO)?
- How do we inform our customers of our actions?
John Hughes is a Magento-obsessed solution architect (and occasional developer) at Fisheye, a U.K. based Magento/Adobe Solutions Partner, and is known in the office as “the guy that knows everything about Magento.” With eight years’ experience and five Magento 2 certifications, that may be somewhat true. Outside of work, Hughes is building MageQuest, an online learning