In Magento 2.0, full page cache is built-in for both the Magento 2.0 Community platform, as well as the Magento 2.0 Enterprise system.

I can’t emphasize how amazing this feature is to have for an eCommerce store.

Full page caching essentially turns your database-driven Magento 2.0 store into a site with the speed of an old-fashioned, static HTML site. What this means is that when an end user comes to your site, there’s no database calls and very few file system calls to return (or "serve") that page to the end user.

Think back to a vintage 1994 website: You have an index.html page that contains all of the content, and perhaps an image or two. A page like this loads really quickly, but is next to impossible to keep updated with inventory levels, current pricing and other fresh content.

A modern server can serve literally tens of thousands of cached, static HTML pages without breaking much of a sweat or having the server’s processor power spike. But a database-driven site might need 125 different database calls and file system lookups to build a single page for a single user.

Meaning that a normal Magento category page or product page can take 5-10 seconds to load on a server that has all the caching turned off.

But with full page caching turned on (like the one in the new Magento 2.0 system), this drops to about 1 or 1.5 seconds.

In Magento 2.0, full page caching files are stored in the /var/page_cache/ directory.

These files are built by Magento and updated as a page is created, a product is added or edited, or category information is built.

Magento will cache:

CMS (Content Management Pages)

Category Pages

Product Pages

Error Message pages

These pages are never cached using full page cache:

Account pages (login, create account, address book, wishlist)

Cart page

Checkout page

Checkout success page

Magento further creates a separate version of each page based on:

Customer Group

Website or Store View

Language (if multiple are turned on)

(Note: if you’re trying to use Varnish for page caching, it’s important to make sure that you don’t cache these pages, or all of your users will see each other’s cart contents!)

Hole Punching on Magento 2.0:

However, on a block level, you can have specific areas on a page that do not use full page cache. For example, the small persistent shopping cart at the top of a page that indicates how many products you have in your cart (i.e. 3 products) is not something that should be cached. This can be excluded from the cache on a per block or extension level. This is known as hole-punching.

To understand hole punching for Magento 2.0 Community and Enterprise, think of a Web page as a sheet of paper. If you want to have an area of the page that isn’t cached, think about using a big metal hole puncher to cut right through it. And then the rest of the page is cached and loads quickly.

Public vs. Private Cache Content in Magento 2.0:

Public content: There are some things that are great to cache for all people (i.e. a CMS page or product page). This doesn’t change very often, so it can be public.

Private Content: If you want to have the site personalized by displaying someone’s name at the top of a page (i.e. "Welcome, Jeff!"), then it will slow down the page load time if you have to have the system fetch this information each and every time.

In Magento 2.0, private information can be cached by the web browser (i.e. Chrome or Safari), so that the system doesn’t have to reach out each and every page for this information. It can be stored locally, so that page load times are as fast as possible.

Second, Magento 2.0 allows a site to use a single AJAX or Javascript call to grab all of the private user content in one server transaction (instead of having to do separate calls for the persistent cart, person’s name, etc).

The reality is that there is very little actual documentation right now for how full page cache works in Magento 2.0 (as of July 2015). Alan Kant has a bit of high-level information about caching; I wanted to delve into the actual files and how it works.

The documentation on Magento 2.0 right now still refers to using the local.xml file for configuration; this has been replaced in the /app/etc/ directory with the env.php file.

From what I can tell right now, when an end user goes to the site to request a page, the Magento system will check to see:

If that page is available as a cached page.

If the cached page is still valid (you can set an expiration date on the page)

Each page that is cached has a unique ID that Magento uses to retrieve the HTML page contents.

For full page caching, the system is looking at this path to retrieve the page information:Magento\Framework\App\Response\Http\Interceptor

The actual file path goes to a php file here:/lib/internal/Magento/Framework/App/Response/Http/FileFactory.php

Then, the Magento 2.0 system will look in the /var/ directory in the /page_cache/ sub-directory.

This directory (/var/page_cache/) is then divided into different folders that make it easier for Magento to find the actual files it needs.

The actual full page cache file is then in one of these subdirectories.

All of this is automagically generated by Magento when it builds out a page.

Here’s an example of an actual page cache file:

The name of the file is: mage—792_DF3AB6E66CFF3E23500141C979B2CAF6

The file includes:

Hash: This is a unique identifier so that the system can find this page quickly and easily

Mtime: This is a Unix date stamp of when this was added into the cache. In this case, this file’s date is: 1437651736. If you translate this into a human-readable date, it’s Thu, 23 Jul 2015 11:42:16 GMT

Expire: This is another Unix date stamp; in this case it is the time when this cached page is no longer valid (and tells the system to rebuild it). In this case, expire is set to: 1437738136. This translates to: Fri, 24 Jul 2015 11:42:16 GMT.

(The Unix date date stamp is based on the number of seconds that have occurred since January 1, 1970.)

Tags: The file also contains many different tags that associates this page to different categories in the Magento site. This product belongs to several different category tags in the system.

URL for Interceptor / HTTP Cache Header information: The top contents of the file also reference the path or location where Magento handles the content interceptor. This is used to figure out if a page is in cache, or if it is invalid and needs to be recreated. It also helps generate the HTTP cache header, which will tell an end user’s browser that this page is okay to be cached (i.e. if they come back to the page 15 minutes later), or if that cache is no longer valid and needs to be downloaded again.

The file also allows for a table prefix, if you happen to have that in your Magento database. This is mostly used if you can only have a single mySQL database, and you’re sharing it with WordPress, for example, so you have a prefix like, Magento2_ as the prefix. (Usually this isn’t an issue, but in the past on the Magento 1.0 framework, some extensions have had trouble with database prefixes.)

Also in the env.php file:

- Backend area name: This allows you to define what the admin login area’s URL should be. By default, it’s /admin/. But we recommend changing this, so that you can at least make it more difficult for attackers to not know where to go to try to find your login screen.

- Session: the best way to handle server sessions is in the file system. Saving an end user’s sessions to a database takes a lot more time and system overhead. This is really only a good idea if you have multiple front end Web servers and one common back end database server. And even then, there’s better ways to handle sessions.

‘session’ =>
array (
‘save’ => ‘files’,

- Crypt Key: there’s a cryptographic key that is used to authenticate and encrypt your system; this is something you should also not share widely.

- Cache Types:
The env.php file allows you to specify what types of caching are enabled in the system. As you may know, caching allows the system to create a much faster end user experience – so pages load very, very quickly. If you turn off all caching (which we often do when developing a site), each page that is loaded will take a lot more processing power and database calls to generate. This configuration allows you to set these cache types:

The "full_page" caching type is probably the most exciting to me – it’s the full page cache system. More on this in another posting, but it basically allows you to have the system generate a static HTML version of the site, so that next to no server processing power or database calls are needed to serve end users pages.

One other quick change: the /app/etc/ folder no longer contains the .htaccess file that restricts access to the env.php file. This is now in the /app/ directory, and it contains this information:

Order deny,allow
Deny from all

This file makes sure that someone on the World Wide Web can’t just directly access the env.php file, that contains your mySQL database access information.

The .htaccess file is a "hidden" file, so you won’t see it in normal FTP sessions unless you turn on the "show hidden files" feature.

So make sure that you don’t have open access to it by going here:

http://www-your-websiteURL-here.com/app/etc/env.php

If you visit this link, it should show something like this:

]]>http://www.customerparadigm.com/magento-2-0-location-of-database-configuration-file/feed/0Magento 2.0 Community Speed Test with Full Page Cachehttp://www.customerparadigm.com/magento-2-0-community-speed-test-with-full-page-cache/
http://www.customerparadigm.com/magento-2-0-community-speed-test-with-full-page-cache/#commentsMon, 20 Jul 2015 04:14:33 +0000Jeff Finkelsteinhttp://www.customerparadigm.com/?p=10256I just ran a speed test on a new Magento 2.0 community installation. It’s still in Beta and still has a few bugs; it’s due for an October or November 2015 release. One of our developers just downloaded the latest version – Magento ver. 1.0.0-beta from Git Hub, and installed it on a temporary server.

But the community site – out of the box – has a 1.14 second page load time for the home page. The home page is 907.4 KB, and requests 124 different files. Note that this does use all 13 types of caching turned on for Magento 2.0 Community, including the full page caching:

As you may know, I went out to Las Vegas for the Magento Imagine show in April, to find out the new trends in eCommerce, and get an overview for what’s going on within the Magento company and in the industry in general.

I’ve let me thoughts simmer and marinate for a bit now, and want to share with you my thoughts and experiences from the show

As usual, I brought some of my camera gear with me, too, so that I could visually remember what I say.

The Imagine conference started off with amazing music:

Magento Imagine – 2015 Recap

First, the continuing trends:

This year, mobile, responsive design is still very, very important and top of mind. This has been a trend for the past few years. But responsive design has now become a "must have" for any new site build.

Second, speed is king. You’ve got to have a fast loading site. Some of the speakers were talking about how critical site speed is for SEO and sales conversion.

For Amazon, shaving 1/10 of a second from a page load increases revenue by 1%. If Amazon shaves a full second off of a page, that translates into a 10% increase in revenue.

Yahoo’s statistics show that a 4/10 of a second decrease in page load speed increases their site traffic by 9%.

Milliseconds matter! In addition to direct revenue correlations, the big sites see an increase in user experience, better handling of the server during peak hours, better search engine optimization ranking, and a better-perceived brand image:

But these trends were also talked about last year, and just part of the "must have" to have a real store on the Web

This was also the first year that Roy Rubin, the founder of the Magento, was not at the conference.

For me, it was a bittersweet conference, as Roy Rubin has been the "soul" of Magento, even though it was sold to eBay and brought under their umbrella of an organization.

My takeway on the real trends:

First, Amazon is still the big market leader, and handles shipping and fulfilment extremely well. They currently have about 2% marketshare of all US Retail (not just online).

Second, customers want real content that speaks to them. They want to understand the ethos of the product they are buying. Cool new features are important, but so is the history of the people making it, and the reason why the product was created in the first place.

Third, customers increasingly want a company to talk to them and interact regardless of platform. End customers don’t see a difference between mobile, in-store, desktop, etc. But as most people in business know, this is an extremely difficult and complex thing to do. Some big brands do this really well. Most companies don’t.

Fourth, I saw a much bigger focus being placed on back-office systems like inventory management, fulfillment, merchandising. The good news – we’ve done a lot of complex integrations and warehouse management in the past.

Fifth, growth in the eCommerce space is still increasing at a steady rate, but is expected to start to flatten out slightly by 2019 or 2020.

Magento’s management is playing offense:

This is the year when (I think) Magento’s management is coming out swinging and is aggressive. They are excited to be unshackled from the grip of their parent, eBay, and act more nimbly as a company.

They seem committed to plugging forward on Magento 2.0, while keeping the 1.x platform up to date. (We keep getting questions from customers to see if they want to wait for the Magento 2.0 platform or start on the 1.x platform.)

There’s new focus on small business sites, which I feel are the core of Magento, and the reason why Magento is so successful

In my opinion, Magento’s success was not based on the Enterprise platform that is used by a few thousand merchants, but from the hundreds of thousands of Community storefronts that created a crazy ecosystem of developers (like Customer Paradigm) to help tailor and customize the Magento platform into the scalable, feature-rich system it is today.

eBay purchased the Magento platform to make sure that PayPal would remain tightly integrated, as they wanted to make sure that the dominant eCommerce system would have PayPal built in. This has been a very succesful strategy.

But the challenge is that Magento makes most of its income from licensing revenue from the Enterprise edition. And inside Magento (vs. the bigger eBay organization), Magento Enterprise sites are really what matter and carry weight. Not so much with Community sites. At least that’s my perception… So I think we’ll have to see how important this remains to the organization as it goes forward.

There’s also emphasis on getting the bigger and bigger eCommerce clients, because they can demonstrate that Magento can perform at scale

The good news: Magento is the #1 eCommerce solution in the marketplace. Nothing else comes close, and it’s dominating the space.

Slightly scaled back conference:

The conference was scaled back slightly in some ways.

It was still amazing, but a lot less extravagant than in years past.

To me, it seems like there’s a bit more financial restraint on how much they spent.

And honestly, that’s a good thing, I think. In the past, it was crazy how much was spent on pretty useless stuff. This year was a solid conference, but didn’t have the crazy baubles and performers like last year

Given that Magento did a small round of layoffs last year, this is probably appropriate.

They still did have a bean bag toss into the pool:

Here’s another shot from the first night party:

And they had great entertainers helping kick off the event

This guy is actually a Magento employee, though:

Introduction by Craig Hayman, President eBay Enterprise:

Craig Hayman, the president of eBay Enterprise led off the conference and events, and discussed how Magento is the #1 top eCommerce solution in the marketplace, including the #1 platform for the Internet Retailer Top 500 eCommerce sites:

Hayman compared the open source Magento platform to other extremely succesful platforms, including Linux (running most of the Web servers in the world), Java (a dominant programming language), and Android (running a majority of the smart phones in the world).

Lisa Butler, the VP of Sales Enablement for eBay Enterprise led the discussion.

The takeaway:

Shoe Carnival did a crazy amount of work to use all of the in-store inventory at their 400 stores for inventory and fulfillment.

(Note: Our Magento Development team at Customer Paradigm did a similar integration in the shoe space for about 75 stores, and it’s very, very complex to do this well and at scale).

This allows them to get their products to their customers much, much faster.

Their next big project is to create allow for in-store pickup. So you can shop online, and then be able to drive to the store to pick it up.

Jamie Clarke – Back as MC for Magento Imagine:

Jamie Clarke, the co-founder of LiveOutdoors.com (a Magento site) was the MC for the event:

He talked a lot about why he is passionate about the site that he runs… and it’s all about trying to get people to be outside, enjoy nature, and be fit:

Breakout Session #1: How To End Code Deployment Nightmares

First, let me begin by saying that I did not go to all of the breakout sessions. It’s just not possible… and so I’m featuring the ones that were most relevant and interesting to me.

The first breakout session that I went to was about how to keep the code on a Magento site consistent from the development, staging and production sites.

This is no small task, and is something that we’ve struggled with in the past, too.

The workshop covered how different systems can introduce artefacts and bugs into the development, staging and production process… especially if you have multiple people working on the system at the same time:

He introduced Alice and Bob, two people who work on a Magento site:

Alice’s problems included the issue that pushing new features and code up to the site is a slow and tediou process.

Some deployments can cause major issues with the site, and old bugs can still crop up… even if everything works 100% on the testing and staging servers.

Plus, clients hate downtime on their site – especially if it’s a high-volume eCommerce site.

In the past, the problem was that manual deployments (i.e. dragging and dropping each file, one at a time via FTP and making database changes) are a slow process, and can cause errors.

Because they are tedious, they are slow, and if something is missed accidentally, the live production site isn’t an exact replica of the staging site.

For Alice and the customer, the issue with a lack of a version control system is that if bugs are displayed on the site after deployment of new features, content or systems, the burning question is:

Were the bugs there before? But now there are more people actually looking at the site and finding the bug, because there are more eyes on it?

Or, is it a new bug, based on the new deployment.

That’s why it matters.

Breakout Session #2: SEO for Magento

The next breakout sessions was about SEO for Magento.

This is a topic that is near and dear to me, and while much of it was a review, there were a few good incremental takeaways.

My biggest takeaway is that Mageto store owners should optimize meta descriptions for clickthroughs and add strong calls to action in them

The speaker talked about why they prefer Magento for SEO:

Magento is the CMS of choice for their client’s search campaigns

Magento offers a keyword rich URL structure

Magento is flexible, and offers advanced features

They covered some Magento SEO basics, including:

Enabling caching

Site speed improvements

Allowing guest reviews

The speaker also recommended redirecting the www. version of the site to the non www. version.

I think this was meant as a way to maximize the keyword density of the domain name, but this is something that I disagree with for anyone that has had a site that’s ranked well in the past.

I do agree that it’s best to redirect one of the versions (I think the non-www. version) to the other, so that you don’t have duplicate content.

This is something that can be done easily in the Magento admin area, or by more complex DNS or .htacess file rules.

The speaker recommended using many of the free site tools available to help boost site speed.

Caching (both images and HTML) is huge.

Another top recommendation is to update the home page and top areas of a site to use inline CSS, so that these elements load quickly, without having to wait for an external style sheet lookup.

Enabling reviews on the site produces more content and end user trust, and is recommended:

The speaker also recommended that Magento store owners use a good site structure for SEO success.

A good example is something like:

http://www.domain.com/category_name/sub-category_name/product_name

(This allows you to have great, relevant keyword information in your URL structure.)

Another recommendation for Magento SEO was for On-Page Optimization, including:

Doing keyword research and organizing your top keywords in spreadsheets.

Optimizing titles, meta description and body content.

Make sure that your backlink profile is clean.

They tend to use Google’s Adwords tool for most of their keyword research, although they sometimes also use SEM Rush’s tool as well

Google Adwords is free…

In Google Adwords, the system will allow you to rapidly do keyword research to bolster your Magento store’s SEO campaign:

They then take the keywordds, monthly searches, and average CPC (Cost Per Click), and use the Cost Per Click rate to estimate how competitive phase will be to rank for the Magento site:

They offered a bit of advice on how to best optimize meta titles for Magento Products or Categories:

Good: The Best Red & Blue Dresses for Sale at My Company

Bad: Red Dress – Blue Dress – The Best for Sale at My Company.

They emphasized that you should optimize title tags for users who are more likely to click on a blue title tag in a Google search and go to a Magento site:

I really liked their emphasis on optimization for Meta Descriptions. I find that many people "forget" or don’t do Meta Descriptions well.

Meta descriptions should offer a strong call to action and should be readable for users.

Good: "The best red and blue dresses for sale at My Company. We offer the best selection from our women’s wear and offer free shipping for orders over $100."

I agree. I’d click on that more the above example (assuming I wanted to purchase a dress online – which I have done for my daughter), vs the bad example:

Bad: "Red Dress and blue dress for sale at My Company. We offer the best red dress you can find on the internet and the best pricing on blue dresses."

They recommended keeping keyword density to less than 1% on a page, and only one keyword in a title tag or H1.

But… make sure that your keyword is in your first H1 tag on the page:

URL optimization tricks for a Magento site:

In the post-Panda 2.0 Google world of SEO, sometimes shorter URLs work better than longer ones.

OLD link: www.example.com/how-to-quit-eating-apples/

NEW link: www.example.com/quit-eating-apples/

The shorter link increased traffic to the page by 100% in 5 months.

From an SEO perspective, it’s important to not have spammy sites linking to you, and use the disavow tool to remove them if they aren’t quality links

I do recommend being extremely careful about this, though.

Copy is King! 300 words of copy on a category page helped one page jump from not in the top 100 search results to a second page listing

Copy matters

My opinion: Google is made up of a lot of engineers who really want to understand all about a product. They are the ones making ranking decisions. And they like copy and content.

Off Page Optimization for a Magento Site:

They also talked about four ways to better build links and authority off of the site, including:

1. Power Page guest blogging. (I’d worry about this in some cases, though)

2. Social Signals, such as Facebook likes, Google+ posts, Tweets, Instagram and more.

3. Building content on your own site using reviews for products.

4. Forum posting, blog comments and social bookmarking

They covered a notion of Power Page guest blogging, and define Power Pages as gigantic or awesome pieces of content for a site.

I tend to agree – people are hungry for long-form content – especially if they are going to be making a big purchasing decision (i.e. an expensive item on a Magento commerce site):

For content, they recommended:

1. Quality over quantity.

2. Tier your link building via social media; this creates a more natural link profile. A tiered link structure looks something like this:

Main link to your site from an article.

Links to article from social media (Twitter, Facebook, Google+)

Other people re-posting social media posts that link to your posts

Keynote Session: Steve Wynn

Steve Wynn, a billionare entrepreneur who built successful casinos was a featured keynote speaker at the Magento Imagine conference:

He was led up to the podium by his wife, who I think was worried that he might fall off the stage.

Steve Wynn is not very technical, by his own admission.

But what he said he was really good at was creating an amazing customer experience for guests.

(Which is what we try to do online with Website design and interactive marketing.)

Wynn’s guiding principle for his business is:

"A single person, with a single interaction with a customer, can change the course of the enterprise."

What Wynn means by this is that every single day, a small interaction can make the company extremely successful

Unlike most companies, they have figured out how to celebrate these successes, look for them, and make employees feel great in the process.

Wynn told an inspiring story about a bellman who brought an older couple’s bags up to their room.

Wynn described how they have the bellman take the bags in the same elevator as the guests, so that they’re not separated from their bags. He said it’s the old-fashioned way that bellman used to take luggage to rooms, and they’re one of the last organzations that still does it that way.

After showing the couple some of the features of the room (for example, how to open and close the window coverings via a remote control), the bellman asked the guests to make sure that all of their bags were there.

The wife then suddenly realized that she had left their bag of medicine, including the husband’s insulin, on the kitchen table at their home in Encino, California.

The bellman overheard this, and the high amount of distress, and asked when they next needed the medicine (the husband didn’t need it until the next morning at breakfast).

The bellman told the couple, don’t worry – I’ll take care of you and you’ll have the insulin in time for breakfast.

The bellman then asked his brother in Encino to go pick up their medicine at their house (the couple’s housekeeper let him in after a quick call from the guests).

The bellman next went to his manager, told him what was happening, and asked for the rest of the day off.

The bellman then drove from Las Vegas to Encino, grabbed the bag from his brother, brought it back to Las Vegas, and had it there in time for breakfast. (I did a check, and the drive between Las Vegas and Encino, CA takes 4.5 hours each way, for a total roundtrip of 568 miles.)

Rather than force the couple to go to the hospital and take many hours away from their vacation, the bellman took quick action and helped create an amazing customer experience.

But according to Wynn, this isn’t a story that is an anomoly. It’s something that they have happen 50-80 times per week.

Again, Wynn’s philosophy and guiding principle is that "A single person, with a single interaction with a customer, can change the course of the enterprise."

What the Wynn Resort did next was celebrate this success

Every morning, all of the teams have morning meetings. And one of the questions that the team leader / boss asks is do you have any customer stories.

In this case, the bellman told his group of peers the story. His boss rewarded him and told him he did an amazing job. The rest of the team saw the praise, and the social status that he got as a result, and then became more likely to help out guests in the future. This is the culture of the organization: you get peer respect, and higher self esteem, by helping out customers in their time of need.

Next, the boss rewarded the bellman by calling up for an in-company reporter and photographer. The bellman’s story was featured in their weekly internal newsletter, and a big poster of him and the story was plastered on the wall in the employee’s lounge.

This was rewarded, photographed, celebrated in morning stand up meeting. His boss tells all the others, wow, amazing job. All of his peers then see that this is the way to get respect, to get ahead. Focusing on the customer.

According to Wynn, at a certain point, people work not for money, but for self-esteem. To feel good. And Wynn continued that "when something goes wrong, it allows us to distinguish ourselves."

And he feels that a great guest experience can translate directly into higher morale.

He mentioned to Craig Hayman, the president of eBay Enterprise, and the person who brought him up onto the stage that, "the most destructive way to damage employee morale is through layoffs."

He told Hayman, "You should never do layoffs." And then as Hayman turned a bright shade of red, he said, "You did layoffs?"

Another guiding principle of Steve Wynn revolves around leadership.

Wynn defines leadership as "a way to getting ordinary people to perform in extraordinary ways to achieve a goal."

Punishment vs. reward.

Wynn was a dolphin trainer for a while. He loved working with the animals

But according to Wynn, you can’t hit them or punish them, because they can literally eat you. Same thing with an elephant. Instead, he likes to focus mostly on positive reinforcement.

Wynn’s advice to all of the Magento partners and developers in the audience: you must convince the end user that they are really smart by going with you as a choice.

Reward the customer for being smart for hiring us (i.e. as a Magento Solutions provider) or shopping with us (on a Magento site).

Wynn says, "I try to think like a customer. I try to walk in their shoes."

Focus on what makes you (or the customer) feel good.

Wednesday Morning Session: Mark Lavelle:

Mark Lavelle, the Senior Vice President and General Manager of eBay Enterprise started things offf on Wednesday morning, and discussed Magento 2.0, as well as the overall Magento ecosystem.

Mark Lavelle, the Senior Vice President and General Manager of eBay Enterprise started things offf on Wednesday morning, and discussed Magento 2.0, as well as the overall Magento ecosystem. (More on Magento 2.0 here >>)

According to Lavelle, there are 240,000+ customers using Magento commerce storefronts.

With 300+ partners, there are 4,500+ Magento certified developers worldwide.

He said that Magento is largest eCommerce ecosystem in the world – by far. And Magento is past the inflection point when it comes to adoption.

What does the future hold? A world of always-connected devices. Global consumers, major marketplaces, and consumers who want instant gratification with fast shipping.

The world of the Web is moving from the demand side of the equation, with Web, Mobile, Retail Stores, Customer Service and the Marketplace… into the supply side of the equation.

Lavelle feels that the supply side is where a lot more emphasis is being placed now – fulfilling orders quickly and easily.

Magento continues to be featured as the top solution in the Internet Retailer Top 500 listing for eCommerce software, as well as leading the charge for the Hot 100 2014 Best Retail Websites.

Forrester Research also found that from 2012 to 2015, Magento has moved from a "Contender" in the eCommerce space to a market "Leader."

Magento has moved from what Gartner felt was a "niche" player in the eCommerce world to a strong challenger. The only contenders Garnter felt were stronger leaders were Oracle, IBM and SAP – who have been in the business world for a lot longer than Magento’s short run.

Lavelle continued, and started to delve into more trends…

Lavelle’s final thoughts at the conference:

Amazon is still the big monster, especially with Amazon Prime:

Delivery of product has set customer expectation now for free two day shipping. One day at a slight price. And in some select areas – within an hour or two.

This expectation of fast, free shipping puts a lot of pressure on Magento store owners to use logistics companies that can match the expectation (or at least come close).

Anticipating Commerce:

Happening already: some companies are anticipating commerce and shipping things before you know you need it.

With free returns, this is a trend that might take off.

Omni-channel changes:

The new challenge is knowing your customer, regardless of the channel.

It’s not easy to know where your inventory is

And it’s not easy to know how to best get your products to your customers as fast as possible.

Finally, Magento announced:

Magento Enterprise 1.14.2.0

Magento Community 1.9.2.0

Magento Enterprise 1.14.2.0 offers:

Visual merchandising / sorting rules

Tag management

Automated functions

Better full page chaching

Reddis integration

Zend integration enhancements

OS Software Development Kit: Create mobile apps easily for iPhones.

New Relic – new extension

Magento Imagine 2015 closed the same way as it opened – with great music:

]]>http://www.customerparadigm.com/magento-imagine-2015/feed/0DNS Caching & Why My Site Doesn’t Show Up After Moving Hosting Companieshttp://www.customerparadigm.com/dns-caching-why-my-site-doesnt-show-up-after-moving-hosting-companies/
http://www.customerparadigm.com/dns-caching-why-my-site-doesnt-show-up-after-moving-hosting-companies/#commentsWed, 15 Jul 2015 00:25:51 +0000Jeff Finkelsteinhttp://www.customerparadigm.com/?p=10210Why does my site not show up after I moved it to a different hosting company?

We had a client issue this week where after he moved his site from one hosting company to the next, he wasn’t able to view the site in his browser.

To him, it looked like his website was down. (When it actually was not down.)

What happened? DNS caching.

When you go to a website (for example, www.CustomerParadigm.com), your computer looks up the IP address for the site. This is usually known as an A record in DNS terms.

If it’s a site that you haven’t been to before, then your computer has to reach out to the DNS servers that contain this A record. Basically, the A record translates the www.CustomerParadigm.com into an IP address that your computer uses to connect to the site.

In our case, CustomerParadigm.com’s name servers are at the Domain Control domain:

(Note: This is publicly available information, and not at all sensitive. That’s why I’m posting it here. If you want access to the domain, you’ll just need to know the last 15 digits of Pi – that’s the current password.)

What the Name Servers do is translate the domain name into the IP address:

What this means is that the IP address for www.CustomerParadigm.com is currently 66.228.48.209. The 36000 is a TTL, or Time To Live, value (in seconds), that tells a computer or server how long to keep that record cached for.

However, for sites that you visit all the time, it’s inefficient to have to always look up the IP address.

Instead, your computer will save the IP address in a cache. Because for most sites, it usually doesn’t change very often.

There’s a TTL – Time to Live – value set for the A record; this is set to expire about every 10 hours for our site.

Your computer will often cache frequently visited sites, and your network’s router will also do the same.

And depending on your Internet connection, the DNS queries can also be cached at one other layer – their DNS lookup servers, too.

But if there is a recent DNS change (like when you are changing hosting), it’s likely that your computer or network router is caching the A record, and your computer is looking at the wrong IP address / wrong site.

It is frustrating, because it usually only affects people who are high-volume, frequent users of the site (like the people who run or own the site).

Last Tuesday (and for a little while on Wednesday), Authorize.net’s payment gateway was down.

Authorize.net is one of the top ways that eCommerce stores take payments, so it meant a lot of lost sales yesterday for companies all around the Internet.

It’s very rare that they have an outage… but I wanted to send out a quick tip if it happens again and you want to save sales. (But there are risks).

Magento’s Saved Credit Card Option

So, let me first start off with the fact that this is not a PCI-compliant solution. It’s not ideal. I’d say that this is for emergencies only. And it might even be too risky for your company.

But if a payment gateway goes down completely, and you’re not able to take orders, my recommendation is to do a temporary bypass and turn on the Saved Credit Card Option.

Then, you can use a virtual terminal or other means to manually run the credit card for each order later.

Normally, the saved credit card option is something we use just for testing. It’s not as secure as using a payment gateway. It most likely goes against your merchant agreement that you signed.

But if a payment gateway like Authorize.net is down, my recommendation is to turn this on, save the credit card numbers on the site, and then run them when you are able.

You’ll want to then later remove them from the server, so that you can mitigate any risk of storing credit cards.

A couple of things to keep in mind:

Is it worth the risk? You’ll need to weigh the risk of storing (temporarily) credit card information for an hour or so against the amount of lost sales. For some companies, this is a perfectly acceptable risk. For others, it’s not a line you want to cross.

Make sure your shipping department knows that you have to manually run these credit cards in a virtual terminal before they ship anything. Magento will validate that a credit card is in the right format, but not that the card has any funds available to it.

Credit card numbers are stored in the Magento database in an encrypted format. So if someone gets a backup of the Magento database, the data is encrypted. That said, if they know what they’re doing, a talented programmer will be able to decrypt the information.

Unless you make some core file changes, Magento will not store the CVV2 code (the three digit code on the back of a MasterCard or Visa; on an Amex it’s four digits and on the front). Make sure you do not need the CVV2 to run credit cards in an offline mode (i.e. in a virtual terminal).

You will need to have a programmer or someone comfortable with the database remove the credit card information from the system; this is not something you can do from the Magento admin panel.

How to Activate the Saved Credit Card Option in Magento:

So, if you’ve decided that the risk is acceptable, and you want to bypass your payment gateway. Here’s how to make it work.

You’ll see something like this (you may have fewer or more options, depending on your Magento version):

From here, click on the "Saved CC" option, and click "Yes" to enable the payment method.

At this point, I’d disable the other payment option until it’s back up and running.

I would recommend changing the title from "Credit Card (saved)" – this is the default value:

In this case, I changed it to read, "Pay by Credit Card":

I’m doing this for two reasons. First, it’s better to change it to something that will worry end users less. Most customers would worry if you are saving their credit card information. Plus, you’re not actually saving it for them to use for later purchases.

Second, it’s helpful to know which payment option you are seeing on the front end of the site, too. And if they are both called "Credit Card" it may be confusing.

There are a few other options for you to select on Magento’s Saved Credit Card option:

I’d recommend against the Card Security Code and the 3D Secure Card Validation, as you need to make core changes to Magento for it to be able to actually save the CVV2 code.

You can also set this payment method to only be available in selected countries (or all countries).

And you can set a Minimum Order Total and a Maximum Order Total if you’d like – you can leave these blank if you don’t want to set this.

Finally, the sort order tells Magento how high up to show this payment option. I’d set it as 0 or 1 to make sure it shows up on the top.

On the front end of the Website, when an end user goes through the shopping cart system, this is how the payment options will be displayed:

(Note: this is a stock installation of Magento Enterprise 1.14.1.0, but is pretty similar for other recent versions.)

When an end user selects the "Credit Card (saved)" option, they can put in their credit card info into the form:

Please note that the system will actually try to make sure that the credit card number is a valid card number. There’s a specific mathematical formula that determines the types of numbers that a card can be. For example, my 411111111111111111 credit card isn’t valid.

But note that if you put in a valid credit card number, the saved option doesn’t go to a payment gateway to see if funds are available for that card. It’s just saving it for you to run later. And if someone has a tyoooo in their number, you won’t know that until you try to run it.

To view the decrypted credit card information for an order, go to that order in the Magento admin area; it will be displayed when you open and process the order.

Summary: Bypass Payment Gateway

It’s always good to have options that keep sales coming in, even if your payment gateway is down.

This should be used as an emergency option, but one that can save sales temporarily.

If you want to use the Magento API to handle shipment notification for your customers and add tracking numbers into the email sent to an end user, there’s a well known issue / bug.

The main issue is that when you create a shipment via the Magento API, the shipment notification email sends out before you’re able to add tracking information to the shipment.

Dozens of hours and frustrated whiteboard sessions later, we’ve come up with a way to solve this issue – without creating a module or overriding core Magento code.

Magento Bug Summary: With the Magento API, you can invoice, ship, and add tracking data to an order via the Magento API. However, when you create the shipment, the shipment notification sends before you can add tracking information to the shipment. Here’s a hack to solve this problem without creating a module or overriding core code.

Magento Version: API Version 1 on Magento Enterprise. However, this should work the same on the Magento Community Platform.

Preparation

When invoicing, it’s best to include all fields in the API to ensure accuracy. In this example, $orderIncrementId is equal to our Magento Order Increment ID, 1001001010. However, $orderItemId is an array of order item ids and quantities invoiced.*** This is tricky, per magento API documentation, the OrderItemId is an array as outlined in this screenshot:

Once the API session is instantiated, we need to refine some information before creating invoices and shipments.

Some constants that are passed into this example code include the order increment ID of the order we want to mark as invoiced & shipped as well as the list of products shipped and quantities.

Next, we need to look up the order to pull the products out of the order and match them up with what is being shipped. We need to do this so we can mark those items & quantities as invoiced and shipped, thereby handling partial or backorder situations.

What this does is to build an array of order item ids and quantities from product ids.

The order has 2 fields, item_id and product_id.Product_id is the magento product ID, and item_id is the order’s reference to that item in the order. By referencing the orders item_id, we can adjust quantities of items invoiced, shipped, returned, or canceled.

Invoicing

One thing I like to do with this code is to place each step inside a nested try/catch block. This is good for trapping errors at each stage and handling problems more gracefully.

This call will attempt to create the invoice, a couple of notes, $orderIncrementId is pulled from the constants, and the orderItemId is the array of items being marked as invoiced in this case. By including the remaining fields, even though they are optional, we can ensure proper behavior.

The comment, email, and includeComment fields normally can be used for adding comments and informing the customer.

However, we wish to control the amount of email and in this case, email and commenting is disabled. When the tracking number is added, we will add a comment and email the customer then.

]]>http://www.customerparadigm.com/magento-api-shipping-email-notification-bug-solved/feed/0Magento Nerf Gun Battlehttp://www.customerparadigm.com/magento-nerf-gun-battle/
http://www.customerparadigm.com/magento-nerf-gun-battle/#commentsMon, 01 Jun 2015 20:25:55 +0000Jeff Finkelsteinhttp://www.customerparadigm.com/?p=10196Just in case you ever wanted to see some of the behind-the-scenes of what goes on at a Magento Web development / programming company, here’s a quick video. Background: I was out of the office for a couple of hours, and the team had a bit of a nerf gun battle. Fortunately, it was captured on video…

If you’re running an eCommerce site like Magento and use Authorize.net for payments, and the payment is failing / people are not able to check out, this is likely the cause.

Authorize.net Payment Gateway is DOWN (May 26, 2015 – 2:59 pm)

]]>http://www.customerparadigm.com/authorize-net-payment-gateway-is-down-may-26-2015-259-pm/feed/0Punny Error 404 Page for Peanut.comhttp://www.customerparadigm.com/punny-error-404-page-for-peanut-com/
http://www.customerparadigm.com/punny-error-404-page-for-peanut-com/#commentsMon, 11 May 2015 21:39:59 +0000Jeff Finkelsteinhttp://www.customerparadigm.com/?p=10187If you know my sense of humor, I came up with this pun of a 404 page for one of our clients, Peanut.com…