Blog

What's new in nopCommerce 3.4 ~ Thursday, August 28, 2014

With the nopCommerce 3.4 release the nopCommerce development team completed a major effort to improve the performance of the system. So when, more than a month ago, the release was made official, the whole nopCommerce community was impatient to test its speed and memory consumption and see if the nopCommerce was indeed faster and more optimized.

Being a nopCommerce vendor and a solution partner, we knew the answer to this question, long before the release. For the four months that the 3.40 was being developed there were so many fixes, improvements and refactorings committed to the nopCommerce codeplex repository, that even if we have not worked with the preliminary source code, we would have assumed that the new version would be a much improved one.

And it is indeed! And not only in terms of performance.

But let's start with the performance anyway.

Our tests show that on average nopCommerce 3.40 consumes roughly 50% less memory than its 3.30 predecessor did and that its response time is 30% faster. If you are a nopCommerce developer who is constantly loading nopCommerce on your local machine, you would immediately feel the change, especially in the response time. If you own a production website running nopCommerce, you should definitely consider upgrading to the 3.40 version not so much because of the memory consumption but mostly because of the improved response time. Our Nop-Templates.com for example now loads its first byte in less than 400 ms on average, compared to almost 1 s. with nopCommerce 3.30.

How about your nopCommerce 3.40 website? It would be very useful if you share your experience in the comments to this blog bost.

While performance is the major highlight of the 3.40 version, you would be surprised to find new features in this release too. Most of them are relatively small but we have found them to be extremely useful:

1.  NopCommerce 3.40 now has the capability to set the default currency for each language. This really handy feature means that the currency will be automatically adjusted depending on the language that a customer chooses when browsing your website. In the example below, I have set the US dollars to be the currency for the English language in my store.

nopCommerce currency and language

2. There is a new report, which you can find in the nopCommerce 3.40 administration under Sales -> Country Report, which shows order totals and the number of orders by country.

nopCommerce country report

 3. Warehouse filter on orders and shipments administration page – this new Warehouse filter allows a store owner to filter orders or shipments by a certain warehouse and to generate a list of orders or shipments, which are to be shipped from a certain warehouse. A real time saver when you are shipping from several warehouses.

nopCommerce order warehouse filter

 4. In nopCommerce 3.40 now you can search gift cards by the recipient’s name.

nopCommerce gift cards

5. This next new feature in nopCommerce 3.40 allows you to choose the page size on each admin page that has a grid. No more paging through the list of products or categories or list in the store. This also makes bulk editing the products much easier.

6. There is good news for the nopCommerce 3.40 customers as well. Now they can choose the view mode, page size and sort by on the search page.

7. NopCommerce 3.40 supports newsletter subscription per store, which also means that a store owner can see the list of the newsletter subscribers for each store.

8. NopCommerce 3.40 adds support for Twitter and Open Graph tags on the product pages.

Many of you have probably at least once tried to share a product from your nopCommerce store on Facebook only to find out that the thumbnail of the post is missing or is showing a totally unrelated picture. This problem can easily be handled with Open Graph tags, which are now supported on the nopCommerce 3.40 product pages. This means that now you have the Open Graph tags automatically added to your product pages to improve the performance of your links on social media, without directly affecting your on-page SEO. If you are interested to learn more about Open Tags, please have a look at this article where the issue is brilliantly explained:

What You Need to Know about Open Graph Meta Tags for Total Facebook and Twitter Mastery

9. NopCommerce 3.40 allows customers to skip the shipping address step of the checkout if they choose Pick Up in Store shipping.

To enable this you need to go to Configuration -> Settings -> Shipping Settings and check the Pick Up in Store enabled setting.

nopCommerce pick up in store enabled setting

10. In 3.40 there is a new "ReplyTo" property added to each email that is send from the nopCommerce store. On the contact page this property is set to the email of the user who is submitting the inquiry. With this property set you can directly reply to the user rather than having to copy and paste their email each time. Do note that Gmail ingnores the ReplyTo field when you press the Reply button. So if you know a way to hack around we would very much appreciate if you share it with us.

11. If you use nopCommerce with a CDN provider or a load balancer or any sort of proxy you would know that the IP address of each of your site visitors would be the one of the proxy server. So your are missing this useful information in your store. NopCommerce 3.40 takes care of this problem by automatically intercepting the X-FORWARDED-FOR request header and in this way recording the actual IP address of the visitor. The X-FORWARDED-FOR is the standard header for identifying a client connecting to a webserver through a proxy. If for some reason your proxy server uses a different header you can specify it in the web.config of your application through this application setting:

<appSettings>
   <add key="ForwardedHTTPheader" value="YourCustomHeader" />
</appSettings>

With this handy feature I will conclude our overview of nopCommerce 3.40. As with all blogs on what's new in our favorite e-commerce system, I speak on behalf of the Nop-Templates.com team and our findings are mostly based on real world experience. So we did find all these features useful in our day-to-day business of either working or developing for nopCommerce.

And I hope you will find them too! Stay tuned for more useful information on our blog and do not forget to share your own experience with nopCommerce 3.40 with us.

How to rank high in Google? /Infographic/ ~ Wednesday, June 18, 2014

Ranking high in Google is the difference between bringing visitors to your website or being left unnoticed. But how can we achieve this so desired top ranking and build a stable organic search visibility? First we need to understand how google ranks websites and individual pages, what ranking signals are used in their algorithm. Although there is no official data to describe the Google ranking algorithm, the knowledge and experience of top SEO experts and websites combined with allegedly leeked documents from Google themselves can demystify this topic. Did you know that?

  1. The reading level of a page matters to Google and that an intermediate reading level is better than an advanced one.
  2. Google can determine the sentiment conveyed by the text surrounding a link to your site and adjust the link ranking weight accordingly.
  3. Google prefers websites with a Contact Us page that has a decent amount of information. The close this information is to the official Whois data of the domain the better.
  4. LSI keywords in your meta tags and page content can boost your SERP ranking.
  5. Google prefers websites with SSL.
  6. Google favors content which has bullets and number lists.

These and many more ranking signals, a total of 200, are organized and explained beautifully in the following Infographic, courtesy of http://www.singlegrain.com/ and http://backlinko.com/.

Do have a look and if you have some interesting experience with Google page ranking we would be happy to hear it in the comments.

Click to Enlarge (+)

Why choose Nop Ajax Cart? ~ Thursday, May 8, 2014

Our primarily goal when developing nopCommerce extensions is to create products that will be of value to our customers and will help them build a successful online business. Having this in mind we have created the Nop Ajax Cart for nopCommerce. Why bother doing this when nopCommerce comes with an ajax cart by default, you may ask?

The main and probably most important reason is that with the Nop Ajax Cart an unnecessary and a very cumbersome step in the shopping process is being omitted –redirecting your customers to the product page. Something as simple as this, might be the difference between your customers having a pleasant and ceaseless shopping experience and your customers being confused, even abandoning their shopping cart.

In this blog post I will guide you through the main features of this powerful plugin and show you how your online business can benefit from it.

One of the major features of the Nop Ajax Cart is that you can add products to your shopping cart straight from the category page or any other product list page. Once your client clicks on the add to cart button, the product will be instantly added to their shopping cart and a pop-up window will open displaying the selected product and giving them the options to checkout, view their basket or continue shopping.

Let’s not forget that you can also select the quantity you wish to purchase, again straight from any product list page.

The major differences between the Nop Ajax Cart and the default nopCommerce ajax cart are: 

1. Instead of being redirected to the product page, the product attributes are displayed in a pop-up window, making it really easy to select for example the size or color of the item you wish to purchase.

2. What about grouped products? No need to go to the product page for this either. You can view them and select your item in a pop up window and then simply continue with the shopping process.

3. The Nop Ajax Cart also works with gift cards in nopCommerce.

4. Last but not least, the Nop Ajax Cart is integrated with our Nop Quick View plugin so that nopCommerce customers can have a completely seamless shopping experience

I hope I have managed to pinpoint the most important features of the Nop Ajax Cart and to convince you of the benefits this plugin can offer to your online business. After all, the major goal of every online store is to offer a great shopping experience so that customers keep shopping and coming back.

If you wish to test the Nop Ajax Cart, please go to its administration.

Do you want to run sales the same way any brick and mortar store does! Do you wish your customers to instantly know when there’s a sale on?

We would like to present to you our latest Nop Sales Campaigns plugin with which you can run sales with minimum work required, without spending hours updating product prices.

Now you can create your own campaign for the products you like, for the period of time you wish to, with just a few clicks from the admin panel.

With the Nop Sales Campaigns plugin you can:

  • Run a sale based on a category, product type, manufacturer, or even create your own product segments based on condition
  • Explicitly include or exclude products from the segment you have created
  • Run a sale for the period of time you like – hours, days, weeks, etc.
  • Run a sale based on a time pattern – every Monday, every day at 12PM, etc.
  • Automatically adjust the price of the products, showing old/new price
  • Have a live sale countdown clock added to the products
  • Run no coupon required campaigns

To see the plugin in action, let’s create a sale campaign of our own.

Let’s say that I run an online store selling electronic devices. Recently I have noticed that the ACER products that I offer are not selling very well and that I have a great quantity on stock. In order to try to move these items faster I would like to discount them and to run a campaign for 3 day. Let’s get started.

First let’s set the general settings for our campaign. We will give it a name, set the discount we would like to offer and select the widget zone on the product details page where we would like the countdown clock to be displayed as shown below.

Next let’s customize the countdown timer. I want my sale to last for three days only, but I also want to show minutes and seconds for a more dramatic effect. So, in step 1 in the admin panel I will choose the first option as shown here.

Then in step two I will customize the style of the clock – I will set the font size, choose the color, align the text and change the padding size.

We can further customize the countdown timer via CSS. In this case I will only change the border radius as shown here.

When I click preview we will see how our timer will look like. If we are not happy with the results we can go back and change the settings. In our case I will go back and change the background color.

Once we have customized the countdown timer, we have to set the scheduling for our campaign – we will set the time span and the scheduling pattern.

With this done let’s move forward and set the conditions for our campaign. As said before we want the campaign to apply to only products with manufacturer ACER. Once we set the condition, we click update.

If we click on the preview mode we will see all the products with manufacturer ACER which will be included in our campaign. The price of the products has been discounted automatically with both prices old/new being displayed for our convenience.

Now I am ready to run our first campaign. But just before doing it my stock manager updates me that the ACER Aspire One laptop has been a bestseller for the past week, so I decide to exclude this product from our campaign.

With this done and the campaign started, we can go to the public store and see the results. All ACER products have been discounted except for the one we have excluded from the campaign. The price of the discounted products has been automatically updated.

If we go to the product page of any of the discounted product we will see the countdown timer we have previously created displayed.

In no time and with minimum effort we have created our first sale campaign.

Using the Nop Sales Campaigns plugin you can create unlimited number of campaigns for unlimited number of products and schedule them in advance so that your campaigns run seamlessly on their own according to your sales plan.

If you wish to give this great plugin a try, simply go to its administration.

In our next case study dedicated to the Nop Sales Campaigns plugin, we will show you how this plugin integrates with the Nop Ajax Filters, the Nop Mega Menu and works seamlessly with the Nop Product Ribbons.

Following our previous blog post on what's new in nopCommerce 3.3, I would like to point your attention to a few performance optimizations in the new version. I would also discuss a couple of optimizations from previous versions of nopCommerce, which you might not be aware of.

Please note that in the following 3 points I will discuss 5 settings, which can be set from the administration of your nopCommerce store and are extremely important to its performance.

1. In nopCommerce 3.3 now there is a new "Ignore ACL rules" setting.

NopCommerce does have a powerful ACL (Access control lists) system, which grants permissions to customer roles to certain parts of both the administrative and public website. You can configure the ACL by going to the nopCommerce administration -> Configuration -> Access Control List. Since version 2.7 the nopCommerce team have been gradually adding ACL permissions for the major entities (Products, Categories, Manufacturers). For example if you edit a product in nopCommerce you would find an "Access control list" tab where you can set who can browse and edit the product:

nopCommerce Product ACL

While this is a powerful tool for the store owner it means that every product needs to be checked against the current customer roles. Both in the administration and the public site there are several product, category and manufacturer list pages. So for example if you are browsing the category page on the public site the whole product list will go through the ACL check. Let's take another example. Our JCarousel plugin, which can be configured to show products (related, cross sell, new, custom list, etc...) in a carousel on different public pages. All products in the carousel need to go through ACL checks too. All this ACL overhead is true for categories and manufacturers too.

But often store owners would not need ACL permissions on any of their products, categories or manufacturers. Still the checks will be performed creating additional work for the system and thus adding to the response time of the website.

Until version 3.3. Now if you set the new "Ignore ACL Setting" the ACL checks will be bypassed.

Our tests showed that on a category page with just 8 products, on a cleared system cache, this setting reduced the response time of the server by almost 50%.

2. In nopCommerce 3.3 there is a new "Ignore limit per store rules" setting.

Similar to the ACL permissions, when you have a multi-store nopCommerce, you can set the visibility of products, categories and manufacturers per store:

nopCommerce store configuration per product

Just like with ACL, every product, category or manufacturer will be checked against the current store. But what if you do not have multiple stores but just one store. The checks will still occur.

Until version 3.3. Now if you set the new "Ignore limit per store rules" the store checks will be bypassed.

Our tests showed that on a category page with just 8 products, on a cleared system cache, this was reducing the response time of the server by almost 25%.

So combine this with the 50% improvement from bypassing the ACL checks and you get an enormous performance boost in your nopCommerce. To make use of this you need to go to the nopCommerce administration -> Settings -> Catalog Settings and enable the two settings:

nopCommerce ignore ACL and store rules

3. Although we are on the subject of nopCommerce 3.3, I would like to show you three very important settings, which were introduced in nopCommerce 3.2 and which will again reduce your server response time enormously.

If you go to the nopCommerce administration -> General and Miscellaneous Settings -> Localization settings you would notice the following three settings:

nopCommerce localization settings for performance improvement

Locale resources refer to all strings in nopCommerce, which are not properties of the shop entities. For example such strings are the "Information", "Customer Service", etc. titles in the footer. So if you are browsing a product page, the system would need to load both the product information and the locale resources as the footer is present on every page in the public website.

Localized properties refer to all properties of an entity (product, category, manufacturer, etc...), which could be localized for different languages. For example such properties are the product name, short description, full description and SEO information. These are stored in a separate table (different from the main entities tables) in the database.

Search engine friendly names refer to the URL slugs (parts), which map to an entity in the shop. For example if your Laptop category has Id 1 in the database and has the following URL in your shop http://www.myshop.com/laptops, the "laptops" part of the URL is what tells the system that it needs to load the category with Id 1. This is possible because there is a separate table and entry in the database, which maps the "laptops" slug/search engine friendly name to the category with Id 1.

What is common in these three cases is that there is information which needs to be fetched with every request but is stored separately from the main request data in the database. For example if you are browsing a category page, nopCommerce would query the database once for the category search engine friendly name, once for the category information, once for the the category localized properties and once for every locale resource. In addition, to build the main menu of the website as well as the category navigation panel, nopCommerce would have to query the database for each an every category search engined friendly name and category localized name. Product or manufacturer links and names present on the current page would result in the same type of requests.

As you can see, before the page data has been cached by nopCommerce, the number of requests to the database for just a single page, becomes enormous.

To avoid this you need to set the three settings. Our tests showed that on a category page with 20 products, on a cleared system cache, setting the:

  • "Load all locale resources on startup" reduced the response time by more than 15%.
  • "Load all localized properties on startup" reduced the response time by more than 30%.
  • "" reduced the response time by more than 18%.

Combine this improvement with the gain from the Ignore ACL and store limitations settings and you do get a much better response time from your nopCommerce.

4. In nopCommerce 3.3 there are a few performance optimizations which might not be so obvious to the store owner but are still important and worth mentioning:

  • When you have thousands of categories the admin area could become very slow as hundreds of database requests were being made. Now there is just one request.
  • The category pages now load all specification attributes with just one request and not with one request for every attribute.
  • Checkout attributes are not being loaded for each HTTP request anymore as it is not necessary. This was being done to render the mini-shopping cart block resulting in additional load time for every single page, as the mini-shopping cart is present in the header of the website, thus on every page.
  • Customer language and currency are being cached between requests and not loaded every time.

5. In nopCommerce 3.3 there is a new Clear Log scheduled tasks, which would reduce the size of your database significantly and keep it from bloating unnecessary.

nopCommerce clear log scheduled task

You do need to set an interval on this task, which would allow you enough time to investigate any possible errors or activities that might occur on the website.

6. In nopCommerce 3.3 when you go to System -> Message Queue, there is a new function Delete All, which will delete all queued emails and will again reduce significantly the size of your database.

nopCommerce delete all emails


Emails that are being sent from the system are kept in a separate table in the database. So you end up having them both in your email account Sent folder and your nopCommerce database. Deleting them from your database is perfectly alright. Before you do this do make sure to go through the emails that are marked as not sent or in other words have failed.

This concludes our review of nopCommerce 3.3. I hope that learning about all the performance tips and tricks will prove at least as useful to you as it has to us and our work. Do also checkout our previous blog post on the nopCommerce 3.3.

As usual your comments are more than welcomed!

Next we will follow with more details on our new nopCommerce 3.3 plugins and functionality. So stay tuned as we continue to cover the best .NET e-commerce system!

Find us on Facebook