ADVERTISEMENT

A review of 'Wicked: For Good'

Published Nov 21, 2025 11:03 pm
Easily one of the most anticipated movies of the year, the Broadway phenomenon is back on the silver screen, as the second half of Wicked, dubbed Wicked: For Good, flies into theaters starting November 19th. Reprising their roles are Arianna Grande and Cynthia Erivo as Glinda the Good, and Elphaba the Wicked Witch respectively.
Ariana Grande (left) is Glinda and Cynthia Erivo is Elphaba in 'Wicked: For Good.' (Images courtesy of Universal Pictures)
Ariana Grande (left) is Glinda and Cynthia Erivo is Elphaba in 'Wicked: For Good.' (Images courtesy of Universal Pictures)
Also returning are Johnathan Bailey as the happy-go-lucky yet dashing Prince Fiero, Michelle Yeoh as the horrible Madame Morrible, and, of course, Jeff Goldblum as the Wizard of Oz himself.
The movie picks up some time after the first film, where we left dear friends Glinda and Elphie as they parted ways: Glinda having decided to side with the Wizard and do some good from within the establishment, and Elphaba taking a more extreme, radical approach.
While part one mainly was set up, introducing our characters and establishing their relationships, For Good now shows us the fallout from the events of the first movie.
Relationships are strained, secrets are revealed, and everything comes to a boiling point, complicated by the sudden arrival of a certain little girl in blue and her dog.
Eviro continues to handle the seriousness of the wicked witch well, but more so than in the last outing, Ariana’s Glinda goes through her own character arc. Glinda, perennially the girl in her own little bubble, finally has her bubble burst. Those she regarded as reliable or dependable prove to be anything but, and she’s now faced with a stark reality she’s not used to, and Arianna navigates Glinda’s forced adulting with aplomb.
Not really a sequel; For Good would be better called the second half of a larger movie, as it follows the second half of the stage play. Even on stage, the second half feels a tad light, with the big musical numbers taking place in the first half, so there is a little less to go with. To buff it up, there are a couple of new songs. But not to worry, as Stephen Schwartz pens these, the show’s original composer, so they fit seamlessly into the story.

Visually, the movie is as spectacular as the first, filled with vibrant colors and vast, engrossing vistas, best appreciated on the biggest screen you can find. I was fortunate enough to see it in SM’s new Screen X format, with 270 degrees of immersion. And while your experience will vary, depending on where in the theater you end up sitting, there’s no question that the additional screen real estate opens up the movie like nothing before.
A few pacing issues aside, Wicked: For Good is a satisfying conclusion to the story of the Wicked Witch and Glinda the Good, told in the most Wizamaniacal way possible.
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.