Home All running shoes Reviews Cushioning shoe reviews ... Brooks Ghost Max 2 expert review
7
expert scoreAs editorial policy, we do not accept free samples. We purchased this pair atRunning Warehousewith our own money.
Review written on 23rd October by Olivia Yoder Ultrarunner, personal trainer and soccer coach.
44 other reviews
Brooks Ghost Max 2 Verdict
The Brooks Ghost Max 2 is a max-cushioned daily trainer. It offers an abundance of soft cushioning for all-day comfort. These have been my go-to for all mid to long-distance runs. I have always been a huge fan of any Brooks running shoes, and these are no different.
The pros
- Durable
- All day comfort
- Easy to keep clean
The cons
- Upper runs hot
- The colors offered are on the dull side
Where to buy
Best offers today in United States, all prices in USD
MenWomen
$150.00
$149.00
See deal >
$150.00
$149.00
See deal >
$150.00
$150.00
See deal >
This page contains affiliate links Read more
Rating breakdown
Comfort
8.0
Build quality
9.0
Upper
7.0
Sole unit
8.0
Landing
8.0
Transition
8.0
Toe-off
8.0
Traction
8.0
Durability
10
Facts / Specs
Brand
Brooks
Model
Ghost Max 2
Family
Ghost
Previous model
Ghost Max
Type
Cushioning
Weight
10.9oz (309 g)
MSRP
$150.00
Heel
39 mm.
Toe
33 mm.
Heel drop
6 mm.
Carbon plate
No plate
Size/Fit
Sizing
True to size
Heel fit
Normal
Midfoot fit
Normal
Toebox fit
Normal
Cushioning & ride
Type of cushioning
Balanced
Amount of cushioning
Highly cushioned
Stability
Very stable
Flexibility
Medium
Usage
Racing
Speedwork
Daily training
Long distance racing
Ultra distance racing
Who should buy the Brooks Ghost Max 2 ?
The Ghost Max 2 is for runners or walkers who want a shoe with a plush, rockered midsole that makes racking up miles easy.
Who should not buy the Brooks Ghost Max 2 ?
It is not for someone who is looking for a racing shoe. They feel a little on the bulkier side and aren’t a shoe I would say I feel “fast” in.
Brooks Ghost Max 2 Introduction
The Brooks Ghoat Max 2 is a max-cushioned daily trainer that is best used for longer-distance road miles.
Brooks is known for making solid workhorse shoes, such as the Ghost and Glycerin. Time and time again they are always updated to please the users.
I will admit I was a Ghost-only user. I loved them, but after many years I took a break from them. So far, I love this updated version of the Ghost Max.
There haven’t been too many changes since last year but the few changes have made a big difference in all the right ways. Instead of using DNA Loft v2 foam in the midsole, the Ghost Max 2 features nitrogen-infused DNA Loft v3 foam. Other than that change, things have stayed the same. If it’s not broken, don’t fix it.
They are weighing in at 10.8 oz(306 g) for US M9 /9.5 oz(269g) for US W7.5. Looking at the stack height and drop, it’s 39mm in the heel and 33mm in the forefoot(6mm drop.)
Price-wise, you’re looking at $150. I can vouch that these are made of top-of-the-line, durable materials. I have worn them for well over 80 miles and there is little to no wear on them.
A good shoe to compare them to would be the Brooks Ghost 16. Both are very similar, but the Brooks Ghost 16 has a 12 mm drop, while the Brooks Ghost Max 2 has a 6mm with a decent amount of more cushioning. The Max 2 are more expensive.
Other shoes that remind me of them would be On’s Cloudsurfer or Hoka’s Clifton. Both shoes have a lot of cushioning with mild rockers.
Brooks Ghost Max 2 First Impressions
My first impression of the Brooks Ghost Max 2 was a delightful one. I loved how they looked and the colorway I received. The gray and lavender colors work so well together and hide dirt. I am hard on my shoes, so I am always looking for shoes that stay clean for the longest.
The area of the shoe that caught my eye first was the midsole. Looking at them, you notice the rockered midsole that is built up. It visually looks very stable and studied.
Lacing them up for the first time, I noticed how comfortable they were. Not too cushioned, yet not too firm. They were firmer than I initially thought they were going to be. That being said, you feel the rockered midsole. Another area I was surprised about was how roomy the toe box was.
My first run in them was a road 5k. It was moderately paced since it was a recovery day for me. This is the ideal situation I have been using them for. I love them for slower recovery runs. I also have enjoyed them for longer distances at slower paces. The weight tends to make them feel on the heavier side and not something I would want to wear for race day or speed workouts.
Doing some research on them I discovered that they were awarded a seal of acceptance from the American Podiatric Medical Association and that they are designed to be compatible with all custom insoles and allow for them to slip in easily.
Brooks Ghost Max 2 Upper
The upper is made out of a mesh material that is lighter in weight. I would not say that they are the most lightweight shoes I have ever worn, because that would not be true. Even though it is fall where I live, the weather has been very warm and I have noticed my feet feeling hotter than usual.
Brooks always does an amazing job with their uppers and the Ghost Max 2 is no exception. Looking a the previous upper you will notice little to no difference. The fit is true to size and the upper just hugs your foot in all the right places. There is just the right amount of room in the toe box area but if you need more room in them, they do come wide.
The tongue is guessed with ample padding that stays in place which makes sure you will have no hot spots or discomfort. Laces are standard and once you double knot them, they will stay in place and cause no issues.
Brooks Ghost Max 2 Sole Unit
When looking at the midsole you will notice how solid it looks and – well – that’s because it is.
The main focus of the technology is Brooks’ DNA Loft V3, which is a nitrogen-infused midsole foam that offers softness without risking stability.
Transitions are a piece of cake with the Ghost Max 2’s and this can be accredited to the GlideRoll Rocker. It’s in the upward curve at the heel to toe. This promotes smooth heel-to-toe transitions that make your runs feel effortless.
When you take a look at them from the back you will notice their broad base and raised side walls. This offers innate stability for a secure fit.
The outsole is made from a durable rubber that is strategically placed on the bottom of the shoe.
I can’t remember a time while wearing them that I had a problem with slipping or grip. In rainy conditions, on roads, sidewalks, and gravel paths, they did a great job taking on various surfaces.
Brooks Ghost Max 2 Conclusions
The Brooks Ghost Max 2 is a perfectly cushioned and supportive everyday shoe.
Great for logging miles while running or walking. There isn’t anything I can say negative about them.
The build, the comfort, and the durability are top-notch. I have been recommending them to anyone who asks me.
How does the Ghost Max 2 compare?
Brooks Ghost 16
Brooks Ghost Max 2
Brooks Glycerin 21
Expert score
7
7
8
User score
8.3
9
Best price
$139
$149
$159
Retail price
US$139.95
US$149.95
US$160
Brand
Brooks
Brooks
Brooks
Review
Ghost 16 review
Ghost Max 2 review
Glycerin 21 review
Shoe type
Cushioning
Cushioning
Cushioning
Weight
9.5 oz
10.9 oz
10 oz
Heel Drop
12 mm
6 mm
10 mm
Recommended for
Daily training
Daily training
Daily training
Cushioning type
balanced
balanced
balanced
Cushioning amount
Medium cushioning
Highly cushioned
Highly cushioned
Flexibility
rigid
medium
flexible
Stability
some stability
very stable
very stable
Sizing
true to size
true to size
true to size
Why you can trust us
As editorial policy, we do not accept free samples from companies.
We purchased this pair of Brooks atRunning Warehouse with our own money.
This page contains affiliate links. As an Amazon Associate we earn from qualifying purchases. Read more about our policy.
Lowest price:
$149
Brooks Ghost Max 2 price comparison
Best offers today in United States, all prices in USD
MenWomen
$150.00
$150.00
$149.00
See deal >
$150.00
$150.00
$149.00
See deal >
$150.00
$150.00
$150.00
See deal >
This page contains affiliate links Read more
Reviewed by Olivia
All reviews by Olivia
All reviews >
This review was written by Olivia Yoder on 23rd October.
Lives in Marietta, Pennsylvania with her husband, two kids, and dog. Olivia is a personal trainer and soccer coach. She has been running for 10 years and competes in various distances. For the past few years she has been concentrating on the ultra distances. She never would have thought that one sport would change her whole outlook on life like running has.
User feedback (0)
Write reply or review
'); this.$range = $('
').insertAfter(this.$element).prepend(this.$fill, this.$handle); // visually hide the input this.$element.css({ 'position': 'absolute', 'width': '1px', 'height': '1px', 'overflow': 'hidden', 'opacity': '0' }); // Store context this.handleDown = $.proxy(this.handleDown, this); this.handleMove = $.proxy(this.handleMove, this); this.handleEnd = $.proxy(this.handleEnd, this); this.init(); // Attach Events var _this = this; this.$window.on('resize.' + this.identifier, debounce(function() { // Simulate resizeEnd event. delay(function() { _this.update(false, false); }, 300); }, 20)); this.$document.on(this.startEvent, '#' + this.identifier + ':not(.' + this.options.disabledClass + ')', this.handleDown); // Listen to programmatic value changes this.$element.on('change.' + this.identifier, function(e, data) { if (data && data.origin === _this.identifier) { return; } var value = e.target.value, pos = _this.getPositionFromValue(value); _this.setPosition(pos); }); } Plugin.prototype.init = function() { this.update(true, false); if (this.onInit && typeof this.onInit === 'function') { this.onInit(); } }; Plugin.prototype.update = function(updateAttributes, triggerSlide) { updateAttributes = updateAttributes || false; if (updateAttributes) { this.min = tryParseFloat(this.$element[0].getAttribute('min'), 0); this.max = tryParseFloat(this.$element[0].getAttribute('max'), 100); this.value = tryParseFloat(this.$element[0].value, Math.round(this.min + (this.max-this.min)/2)); this.step = tryParseFloat(this.$element[0].getAttribute('step'), 1); } this.handleDimension = getDimension(this.$handle[0], 'offset' + ucfirst(this.DIMENSION)); this.rangeDimension = getDimension(this.$range[0], 'offset' + ucfirst(this.DIMENSION)); this.maxHandlePos = this.rangeDimension - this.handleDimension; this.grabPos = this.handleDimension / 2; this.position = this.getPositionFromValue(this.value); // Consider disabled state if (this.$element[0].disabled) { this.$range.addClass(this.options.disabledClass); } else { this.$range.removeClass(this.options.disabledClass); } this.setPosition(this.position, triggerSlide); }; Plugin.prototype.handleDown = function(e) { e.preventDefault(); this.$document.on(this.moveEvent, this.handleMove); this.$document.on(this.endEvent, this.handleEnd); // add active class because Firefox is ignoring // the handle:active pseudo selector because of `e.preventDefault();` this.$range.addClass(this.options.activeClass); // If we click on the handle don't set the new position if ((' ' + e.target.className + ' ').replace(/[\n\t]/g, ' ').indexOf(this.options.handleClass) > -1) { return; } var pos = this.getRelativePosition(e), rangePos = this.$range[0].getBoundingClientRect()[this.DIRECTION], handlePos = this.getPositionFromNode(this.$handle[0]) - rangePos, setPos = (this.orientation === 'vertical') ? (this.maxHandlePos - (pos - this.grabPos)) : (pos - this.grabPos); this.setPosition(setPos); if (pos >= handlePos && pos < handlePos + this.handleDimension) { this.grabPos = pos - handlePos; } }; Plugin.prototype.handleMove = function(e) { e.preventDefault(); var pos = this.getRelativePosition(e); var setPos = (this.orientation === 'vertical') ? (this.maxHandlePos - (pos - this.grabPos)) : (pos - this.grabPos); this.setPosition(setPos); }; Plugin.prototype.handleEnd = function(e) { e.preventDefault(); this.$document.off(this.moveEvent, this.handleMove); this.$document.off(this.endEvent, this.handleEnd); this.$range.removeClass(this.options.activeClass); // Ok we're done fire the change event this.$element.trigger('change', { origin: this.identifier }); if (this.onSlideEnd && typeof this.onSlideEnd === 'function') { this.onSlideEnd(this.position, this.value); } }; Plugin.prototype.cap = function(pos, min, max) { if (pos < min) { return min; } if (pos > max) { return max; } return pos; }; Plugin.prototype.setPosition = function(pos, triggerSlide) { var value, newPos; if (triggerSlide === undefined) { triggerSlide = true; } // Snapping steps value = this.getValueFromPosition(this.cap(pos, 0, this.maxHandlePos)); newPos = this.getPositionFromValue(value); // Update ui this.$fill[0].style[this.DIMENSION] = (newPos + this.grabPos) + 'px'; this.$handle[0].style[this.DIRECTION_STYLE] = newPos + 'px'; this.setValue(value); // Update globals this.position = newPos; this.value = value; if (triggerSlide && this.onSlide && typeof this.onSlide === 'function') { this.onSlide(newPos, value); } }; // Returns element position relative to the parent Plugin.prototype.getPositionFromNode = function(node) { var i = 0; while (node !== null) { i += node.offsetLeft; node = node.offsetParent; } return i; }; Plugin.prototype.getRelativePosition = function(e) { // Get the offset DIRECTION relative to the viewport var ucCoordinate = ucfirst(this.COORDINATE), rangePos = this.$range[0].getBoundingClientRect()[this.DIRECTION], pageCoordinate = 0; if (typeof e.originalEvent['client' + ucCoordinate] !== 'undefined') { pageCoordinate = e.originalEvent['client' + ucCoordinate]; } else if ( e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0]['client' + ucCoordinate] !== 'undefined' ) { pageCoordinate = e.originalEvent.touches[0]['client' + ucCoordinate]; } else if(e.currentPoint && typeof e.currentPoint[this.COORDINATE] !== 'undefined') { pageCoordinate = e.currentPoint[this.COORDINATE]; } return pageCoordinate - rangePos; }; Plugin.prototype.getPositionFromValue = function(value) { var percentage, pos; percentage = (value - this.min)/(this.max - this.min); pos = (!Number.isNaN(percentage)) ? percentage * this.maxHandlePos : 0; return pos; }; Plugin.prototype.getValueFromPosition = function(pos) { var percentage, value; percentage = ((pos) / (this.maxHandlePos || 1)); value = this.step * Math.round(percentage * (this.max - this.min) / this.step) + this.min; return Number((value).toFixed(this.toFixed)); }; Plugin.prototype.setValue = function(value) { if (value === this.value && this.$element[0].value !== '') { return; } // Set the new value and fire the `input` event this.$element .val(value) .trigger('input', { origin: this.identifier }); }; Plugin.prototype.destroy = function() { this.$document.off('.' + this.identifier); this.$window.off('.' + this.identifier); this.$element .off('.' + this.identifier) .removeAttr('style') .removeData('plugin_' + pluginName); // Remove the generated markup if (this.$range && this.$range.length) { this.$range[0].parentNode.removeChild(this.$range[0]); } }; // A really lightweight plugin wrapper around the constructor, // preventing against multiple instantiations $.fn[pluginName] = function(options) { var args = Array.prototype.slice.call(arguments, 1); return this.each(function() { var $this = $(this), data = $this.data('plugin_' + pluginName); // Create a new instance. if (!data) { $this.data('plugin_' + pluginName, (data = new Plugin(this, options))); } // Make it possible to access methods from public. // e.g `$element.rangeslider('method');` if (typeof options === 'string') { data[options].apply(data, args); } }); }; return 'rangeslider.js is available in jQuery context e.g $(selector).rangeslider(options);';}));function replyCommentModal(authorName, ID, postID) {//alert(ID + '--' + authorName + ' ' + postID );$('#commentform2022').find('#comment_parent').val(ID);$('#reply-title #reply-to-name').html(' to ' + authorName);showModal('#user-review-modal');return false;}$(document).ready( function() {//alert($('input[type="range"]:visible').length);$('input[type="range"]:visible').rangeslider();$(document).on('input', 'input[type="range"]:visible', function(e) {var output = e.target.parentNode.getElementsByClassName('rangeslider__handle')[0].getElementsByTagName('div')[0] ; output.innerHTML = e.target.value; }); });