munch-ease-backend/tests/sample_files/recipes/www.bbcgoodfood.com-recipes-chicken-tikka-masala.html

516 lines
471 KiB
HTML
Raw Normal View History

2025-11-04 07:31:13 +00:00
<!DOCTYPE html><html lang="en" prefix="og: https://ogp.me/ns#" class="no-js"><head><link rel="preconnect" href="https://images.immediate.co.uk"/><link rel="preload" href="https://use.typekit.net/xij0cqx.js" as="script"/><meta charSet="utf-8"/><script async="" fetchpriority="high" src="/stitcher-assets/bbcgoodfood/ad-manager.js"></script><script async="" fetchpriority="high" src="/unified/wrapperMessagingWithoutDetection.js"></script><script async="" fetchpriority="high" src="https://cp.bbcgoodfood.com/now.js"></script><script async="" fetchpriority="auto" src="//www.googletagmanager.com/gtm.js?id=GTM-K86F9FM"></script><script>LUX=(function(){var a=("undefined"!==typeof(LUX)&&"undefined"!==typeof(LUX.gaMarks)?LUX.gaMarks:[]);var d=("undefined"!==typeof(LUX)&&"undefined"!==typeof(LUX.gaMeasures)?LUX.gaMeasures:[]);var j="LUX_start";var k=window.performance;var l=("undefined"!==typeof(LUX)&&LUX.ns?LUX.ns:(Date.now?Date.now():+(new Date())));if(k&&k.timing&&k.timing.navigationStart){l=k.timing.navigationStart}function f(){if(k&&k.now){return k.now()}var o=Date.now?Date.now():+(new Date());return o-l}function b(n){if(k){if(k.mark){return k.mark(n)}else{if(k.webkitMark){return k.webkitMark(n)}}}a.push({name:n,entryType:"mark",startTime:f(),duration:0});return}function m(p,t,n){if("undefined"===typeof(t)&&h(j)){t=j}if(k){if(k.measure){if(t){if(n){return k.measure(p,t,n)}else{return k.measure(p,t)}}else{return k.measure(p)}}else{if(k.webkitMeasure){return k.webkitMeasure(p,t,n)}}}var r=0,o=f();if(t){var s=h(t);if(s){r=s.startTime}else{if(k&&k.timing&&k.timing[t]){r=k.timing[t]-k.timing.navigationStart}else{return}}}if(n){var q=h(n);if(q){o=q.startTime}else{if(k&&k.timing&&k.timing[n]){o=k.timing[n]-k.timing.navigationStart}else{return}}}d.push({name:p,entryType:"measure",startTime:r,duration:(o-r)});return}function h(n){return c(n,g())}function c(p,o){for(i=o.length-1;i>=0;i--){var n=o[i];if(p===n.name){return n}}return undefined}function g(){if(k){if(k.getEntriesByType){return k.getEntriesByType("mark")}else{if(k.webkitGetEntriesByType){return k.webkitGetEntriesByType("mark")}}}return a}return{mark:b,measure:m,gaMarks:a,gaMeasures:d}})();LUX.ns=(Date.now?Date.now():+(new Date()));LUX.ac=[];LUX.cmd=function(a){LUX.ac.push(a)};LUX.init=function(){LUX.cmd(["init"])};LUX.send=function(){LUX.cmd(["send"])};LUX.addData=function(a,b){LUX.cmd(["addData",a,b])};LUX_ae=[];window.addEventListener("error",function(a){LUX_ae.push(a)});LUX_al=[];if("function"===typeof(PerformanceObserver)&&"function"===typeof(PerformanceLongTaskTiming)){var LongTaskObserver=new PerformanceObserver(function(c){var b=c.getEntries();for(var a=0;a<b.length;a++){var d=b[a];LUX_al.push(d)}});try{LongTaskObserver.observe({type:["longtask"]})}catch(e){}};</script><script async="" defer="" src="https://cdn.speedcurve.com/js/lux.js?id=430481854" crossorigin="anonymous"></script><script>
document.addEventListener("DOMContentLoaded", function() {
if (!window.Genius) return;
var tsid = '114620'; window.Genius.amazon.addOnClickRedirect(tsid, true, "https://buy.geni.us");
});
</script><meta name="viewport" content="width=device-width, initial-scale=1" data-testid="meta-viewport"/><title>Chicken tikka masala recipe | Good Food</title><meta name="title" content="Chicken tikka masala recipe | Good Food" data-testid="meta-title"/><meta name="description" content="Not sure what to make for dinner? This chicken tikka masala recipe is easy and delicious. Find more dinner inspiration at BBC Good Food." data-testid="meta-description"/><meta name="robots" content="max-image-preview:standard" data-testid="meta-robots"/><meta name="twitter:creator" content="@BBCgoodfood" data-testid="meta-twitter-creator"/><meta name="twitter:site" content="Good Food" data-testid="meta-twitter-site"/><meta name="apple-itunes-app" content="app-id=533785308, app-argument=https://www.bbcgoodfood.com/recipes/chicken-tikka-masala" data-testid="meta-apple-itunes-app"/><meta property="og:title" content="Chicken tikka masala" data-testid="meta-og-title"/><meta property="og:description" content="This takeaway favourite is freezer-friendly and quick to reheat, giving you the chance to get ahead and save money." data-testid="meta-og-description"/><meta property="og:type" content="article" data-testid="meta-og-type"/><meta property="og:site_name" content="Good Food" data-testid="meta-og-site-name"/><meta property="og:url" content="https://www.bbcgoodfood.com/recipes/chicken-tikka-masala" data-testid="meta-og-url"/><meta property="og:image" content="https://images.immediate.co.uk/production/volatile/sites/30/2020/08/recipe-image-legacy-id-202451_12-50a0c95.jpg?resize=440%2C230" data-testid="meta-og-image"/><meta property="og:image:alt" content="Chicken tikka masala with rice on a plate" data-testid="meta-og-image-alt"/><meta property="og:image:width" content="440" data-testid="meta-og-image-width"/><meta property="og:image:height" content="230" data-testid="meta-og-image-height"/><meta name="twitter:card" content="summary_large_image"/><meta content="L9wTH12Yl1jaUrvCHIqpsoEmDbbjDoIt7rcNVFlWX7k" data-testid="meta-google-site-verification" name="google-site-verification"/><meta content="e0dc3ea18b52d6be8f7d588b29af3605" data-testid="meta-p-domain-verify" name="p:domain_verify"/><meta content="31296838546" data-testid="meta-fb-pages" name="fb:pages"/><link rel="canonical" href="https://www.bbcgoodfood.com/recipes/chicken-tikka-masala" data-testid="meta-canonical"/><script type="application/json" id="__AD_SETTINGS__">{"unitName":"/176986657/bbcgoodfood.com/recipes/recipes","headerBidder":"prebid","headerBidderUrl":"//micro.rubiconproject.com/prebid/dynamic/7959.js","headerBidderTimeout":3500,"adRefresh":{"enabled":false,"excludedOrderIds":[2754193328,2728546557,2777270073,476475177,2740501331],"durationInView":17,"percentageInView":50},"targets":{"configuration":"live","cat":["j","recipes","glossary"],"channel":"recipes","format":"video","pageid":"223740","primary_cat":"recipes","subcat":"recipe","posttag":["butter","cheap","cheap-recipes","chicken-curry","chicken-recipes","chicken-tika-massala","coriander","curry-recipes","double-cream","easy-recipes","freezable-recipes","freezer","good-food","make-one-freeze-one","mango-chutney","quick-recipes","red-pepper","red-peppers","takeaway","tikka-marsala","tikka-masala-paste","tikka-sauce","tomato","tomato-puree","tomatoes","vegetable-oil","yogurt"],"cuisine":["indian"],"diet":["egg-free","gluten-free","nut-free"],"meal-type":["dinner","main-course"],"occasion":["everyday","family-favourite"]},"lazyLoading":{"enabled":false,"renderMarginPercent":35,"mobileScaling":0},"stitcher":{"disableAllAdvertising":false,"useEditag":false},"enableAdvertBeforeBodyOfContent":{"article":false,"recipe":false},"nativeAdvertiser":"nova","promoPlacementId":"","permutiveConfig":{"permutiveProjectId":"99db7a95-b06a-4ea9-857c-f73ba0a25c19","permutiveApiKey":"db07e0f0-8bb8-46c8-b714-291f2768d746","permutiveDomain":"permutive.bbcgoodfood.com","permutiveModel":{"category":["j","recipes","glossary"],"subcategory":["recipe"],"channel":"recipes","title":"Chicken tikka masala","article":{"id":"223740","description":
!function() {
var analytics = window.analytics = window.analytics || [];
if (!analytics.initialize) {
if (analytics.invoked)
window.console && console.error && console.error("Segment snippet included twice.");
else {
analytics.invoked = !0;
analytics.methods = ["trackSubmit", "trackClick", "trackLink", "trackForm", "pageview", "identify", "reset", "group", "track", "ready", "alias", "debug", "page", "screen", "once", "off", "on", "addSourceMiddleware", "addIntegrationMiddleware", "setAnonymousId", "addDestinationMiddleware", "register"];
analytics.factory = function(e) {
return function() {
if (window.analytics.initialized) {
return window.analytics[e].apply(window.analytics, arguments);
};
var i = Array.prototype.slice.call(arguments);
if (["track", "screen", "alias", "group", "page", "identify"].indexOf(e) > -1) {
var c = document.querySelector("link[rel='canonical']");
i.push({
__t: "bpc",
c: c && c.getAttribute("href") || void 0,
p: location.pathname,
u: location.href,
s: location.search,
t: document.title,
r: document.referrer
});
}
i.unshift(e);
analytics.push(i);
return analytics
}
};
for (var i = 0; i < analytics.methods.length; i++) {
var key = analytics.methods[i];
analytics[key] = analytics.factory(key)
}
analytics.load = function(key, i) {
var t = document.createElement("script");
t.type = "text/javascript";
t.defer = !0;
t.src = "/segment/analytics.js/v1/" + key + "/analytics.min.js";
var n = document.getElementsByTagName("script")[0];
n.parentNode.insertBefore(t, n);
analytics._loadOptions = i;
};
analytics._writeKey = "DqXUIAeV8f6valtkjZA8NiwwSbvcv8jR";
analytics.SNIPPET_VERSION = "5.2.0";
}
}
}();
</script><script data-test-id="datadog">
(function(h,o,u,n,d) {
h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}}
d=o.createElement(u);d.async=1;d.src=n
n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n)
})(window,document,'script','https://www.datadoghq-browser-agent.com/datadog-logs-v3.js','DD_LOGS')
DD_LOGS.onReady(function() {
const sensitiveKeys = ["username","firstname","lastname","screenname","phone","phonenumber","mobile","mobilenumber","telephone","telephonenumber","email","useremail","address","town","city","county","state","country","postcode","zipcode","accesstoken","refreshtoken","idtoken","token"];
const sanitise = (value, key, params, { onRedact } = {}) => {
const normalisedKey = key.toLowerCase().replace(/[_-]/g, '');
if (sensitiveKeys.some((sensitiveKey) => normalisedKey.includes(sensitiveKey))) {
params.set(key, 'REDACTED');
onRedact?.(value, key);
return;
}
const emailRegExp = /\S+@\S+\.[a-z]{2,}(--[a-z0-9-]+)?/;
const valueContainsEmail = emailRegExp.test(decodeURIComponent(value));
if (valueContainsEmail) {
params.set(key, value.replace(emailRegExp, 'REDACTED'));
onRedact?.(value, key);
}
}
DD_LOGS.init({
clientToken: 'pub06a4fdc4e42935029039d9cbcc42bebc',
site: 'datadoghq.com',
forwardErrorsToLogs: false,
beforeSend: (log) => {
const queryParamsMatch = typeof log.message === 'string' && log.message?.match(/(?:https?:\/\/.*)?\/\S+\?(.*?)(?:[\s"'`\])]|$)/);
if (queryParamsMatch) {
try {
const params = new URLSearchParams(queryParamsMatch[1]);
params.forEach(sanitise);
log.message = log.message.replace(queryParamsMatch[1], params.toString());
} catch (error) {
log.message = log.message.replace(queryParamsMatch[1], '');
}
}
try {
const sanitisedUrl = new URL(log.view.url);
const urlDetailsQueryString = log.view.url_details?.queryString;
const onRedact = (_, key) => {
if (urlDetailsQueryString?.[key]) {
urlDetailsQueryString[key] = 'REDACTED';
}
}
sanitisedUrl.searchParams.forEach((value, key, params) => sanitise(value, key, params, { onRedact }));
log.view.url = sanitisedUrl.href;
} catch (error) {
log.view.url = 'REDACTED';
}
}
})
DD_LOGS.setLoggerGlobalContext({"service":"editorial-frontend","env":"production","version":"7c815612b896f1d92ac4b51680d8b7ad287f611a-20251024150333","app":{"version":"7c815612b896f1d92ac4b51680d8b7ad287f611a-20251024150333","lastCommitDate":"Fri Oct 24 16:58:34 2025 +0200","lastBuildStartTime":"1761317916540","package":"1.993.0"}});
})
</script><script data-react-helmet="true">
(function(d) {
var config = {
kitId: 'xij0cqx',
scriptTimeout: 3000,
async: true
},
h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/wf-loading/g,"")+" wf-inactive";},config.scriptTimeout),tk=d.createElement("script"),f=false,s=d.getElementsByTagName("script")[0],a;h.className+=" wf-loading";tk.src='https://use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f||a&&a!="complete"&&a!="loaded")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s)
})(document);
</script><script data-react-helmet="true">
function _typeof(t) {
return (_typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (t) {
return typeof t;
} : function (t) {
return t && typeof Symbol === 'function' && t.constructor === Symbol && t !== Symbol.prototype ? 'symbol' : typeof t;
})(t);
}!(function () {
const t = function () {
let t; let e; const o = [];
const n = window;
let r = n;
for (; r;) {
try {
if (r.frames.__tcfapiLocator) {
t = r;
break;
}
} catch (t) {}
if (r === n.top) break;
r = n.parent;
}
t || (!(function t() {
const e = n.document;
const o = !!n.frames.__tcfapiLocator;
if (!o) {
if (e.body) {
const r = e.createElement('iframe');
r.style.cssText = 'display:none', r.name = '__tcfapiLocator', e.body.appendChild(r);
} else setTimeout(t, 5);
}
return !o;
}()), n.__tcfapi = function () {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++) n[r] = arguments[r];
if (!n.length) return o;
n[0] === 'setGdprApplies' ? n.length > 3 && parseInt(n[1], 10) === 2 && typeof n[3] === 'boolean' && (e = n[3], typeof n[2] === 'function' && n[2]('set', !0)) : n[0] === 'ping' ? typeof n[2] === 'function' && n[2](
{
gdprApplies: e,
cmpLoaded: !1,
cmpStatus: 'stub',
},
) : o.push(n);
}, n.addEventListener('message', ((t) => {
const e = typeof t.data === 'string';
let o = {};
if (e) {
try {
o = JSON.parse(t.data);
} catch (t) {}
} else o = t.data;
const n = _typeof(o) === 'object' ? o.__tcfapiCall : null;
n && window.__tcfapi(n.command, n.version, ((o, r) => {
const a = {
__tcfapiReturn:
{
returnValue: o,
success: r,
callId: n.callId,
},
};
t && t.source && t.source.postMessage && t.source.postMessage(e ? JSON.stringify(a) : a, '*');
}), n.parameter);
}), !1));
};
typeof module !== 'undefined' ? module.exports = t : t();
}());
</script><script data-react-helmet="true">
window._sp_queue = [];
window._sp_ = {
config: {
accountId: 1742,
baseEndpoint: 'https://consent.bbcgoodfood.com',
gdpr: {
targetingParams: {"env":"production","acps":"false"}
},
isSPA: true,
events: {
onMessageChoiceSelect() {
if (performance.getEntriesByName('time-to-cmp-choice').length === 0) {
performance.mark('time-to-cmp-choice');
}
console.log('SourcePoint | [event] onMessageChoiceSelect', arguments);
},
onMessageReady() {
if (performance.getEntriesByName('time-to-cmp-message').length === 0) {
performance.mark('time-to-cmp-message');
}
console.log('SourcePoint | [event] onMessageReady', arguments);
window.LUX?.addData('cmp-shown-sourcepoint', 1);
window.LUX?.addData('cmp-shown', true);
},
onMessageChoiceError() {
console.log('SourcePoint | [event] onMessageChoiceError', arguments);
},
onPrivacyManagerAction() {
console.log('SourcePoint | [event] onPrivacyManagerAction', arguments);
},
onPMCancel() {
console.log('SourcePoint | [event] onPMCancel', arguments);
},
onMessageReceiveData() {
console.log('SourcePoint | [event] onMessageReceiveData', arguments);
},
onSPPMObjectReady() {
console.log('SourcePoint | [event] onSPPMObjectReady', arguments);
},
onConsentReady(consentUUID, euconsent) {
performance.mark('time-to-cmp');
console.log('SourcePoint | [event] onConsentReady', arguments);
},
onError() {
console.log('SourcePoint | [event] onError', arguments);
window.LUX?.addData('cmp-shown', false);
},
},
},
};
window.__cmpProvider = 'sp';
</script><script data-react-helmet="true">
window.__tcfapi('addEventListener', 2, (tcData, success) => {
if (!success) {
console.error('Consent Management | Error retrieving data from TCFAPI');
return;
}
const domainName = (() => {
const parts = window.location.hostname.split('.');
return parts.length > 2
? `.${parts.slice(-2).join('.')}`
: `.${window.location.hostname}`;
})();
const isConsentReady = ['useractioncomplete', 'tcloaded'].includes(tcData.eventStatus);
if (!isConsentReady) {
console.debug('Consent Management | Consent not ready');
return;
}
window.__tcfapi('getCustomVendorConsents', 2, (data) => {
const purposes = data?.consentedPurposes || [];
const vendors = data?.consentedVendors || [];
const vendorConsent = vendors.find(v => v._id === '62b2ffcf4e5f6706d4da8cc8') || null;
const hasPurpose1 = purposes[0] !== undefined;
const hasPurpose12 = purposes[11] !== undefined;
const hasVendorConsent = vendorConsent !== null;
const cookieName = 'IM_SP_GA';
const cookieOptions = `Path=/; Domain=${domainName}; Secure; SameSite=Strict; Priority=Medium;`;
if (hasPurpose1 && hasPurpose12 && hasVendorConsent) {
document.cookie = `${cookieName}=1; Max-Age=${60 * 60 * 2}; ${cookieOptions}`;
console.log(`Consent Management | setGAConsented`);
} else {
document.cookie = `${cookieName}=; Max-Age=0; ${cookieOptions}`;
console.log(`Consent Management | unsetGAConsented`);
}
});
window.__tcfapi('removeEventListener', 2, (removed) => {
if (!removed) {
console.error('Consent Management | Failed to remove event listener', { listenerId: tcData.listenerId });
}
}, tcData.listenerId);
});
</script><script data-react-helmet="true" data-description="contentpass integration">
(function() {
var cpBaseUrl = 'https://cp.bbcgoodfood.com';
var cpController = 'https://cp.bbcgoodfood.com/now.js';
var cpPropertyId = '791268da';
!function(C,o,n,t,P,a,s){C.CPObject=n,C[n]||(C[n]=function(){
for(var e=arguments.length,i=new Array(e),c=0;c<e;c++)i[c]=arguments[c];const[r,u,l]=i;if(C[n].q||(C[n].q=[]),
t=Array.prototype.slice.call(arguments,0),!C[n].patched&&("fatal"===r&&u&&(C[n].le=u,
Array.prototype.forEach.call(C[n].q,(function(e){"error"===e[0]&&"function"==typeof e[1]&&e[1](u)}))),
"error"===r&&"function"==typeof u&&C[n].le&&u(C[n].le),"extension"===r&&u&&l&&"function"==typeof l.init&&(l.init(),
l.initialized=!0),"authenticate"===r&&u)){try{
P=-1===(o.cookie||"").indexOf("_cpauthhint=")&&!(C.localStorage||{})._cpuser&&-1===C.location.href.toLowerCase().indexOf("cpauthenticated")
}catch(e){P=!1}P&&(a={isLoggedIn:function(){return!1},hasValidSubscription:function(){return!1}},
"function"==typeof u&&u(null,a),t=["authenticate",null])}C[n].q.push(t)});try{
((s=(o.cookie.split("_cpauthhint=")[1]||"").split(";")[0])?Number(s[1]):NaN)>0&&(o.body?o.body.classList.add("cpauthenticated"):o.addEventListener("DOMContentLoaded",(function(){
o.body.classList.add("cpauthenticated")})))}catch(e){}C[n].l=+new Date,C[n].sv=5}(window,document,"cp");
// Will activate contentpass and initialize basic interfaces for
// communicating with contentpass.
cp('create', cpPropertyId, {
baseUrl: cpBaseUrl
});
// This function will trigger rendering of the Sourcepoint consent layer. First, it will check
// whether the current user is an authenticated contentpass user. If so, the targeting parameter
// acps is set to the string value 'true' (important: the value is not a bool, but a string!).
// If the user is not an authenticated contentpass user, the targeting parameter is set to
// 'false'. Make sure to not show the consent layer when the targeting parameter is set to 'true'
// in your Sourcepoint scenario. When login status is determined, Sourcepoint is automatically
// triggered by calling window._sp_.executeMessaging().
cp('render', {
onFullConsent: function() {
console.log('ContentPass | onFullConsent');
// Init advertising here
//
// Attention:
// When you update your vendor list without asking for re-consent
// then Sourcepoint does not signal full consent for previously
// fully consented visitors. Thus this callback is not executed,
// and partially consented impressions are not monetized at all!
//
// We therefore strongly recommend to configure your Sourcepoint
// scenario setup to always ask for re-consent on vendor updates.
//
// Alternatively you can always load vendors specifically based
// on their respective consent status according to the TCF API.
// You can find a sample integration for this on
// https://docs.contentpass.net/docs/3rdparty
}
})
})()
</script><script data-react-helmet="true" data-description="contentpass sourcepoint authenticate usage">
(function () {
cp('authenticate', function(err, user) {
if (err || (!user.isLoggedIn() && !user.hasValidSubscription())) {
(function spExecMsg() {
if (window._sp_ && window._sp_.executeMessaging) {
if (!window._sp_.config.isSPA) {
console.warn('ContentPass | Sourcepoint not in SPA mode!');
} else if (window._sp_.version) {
console.log('ContentPass | Sourcepoint already running');
} else {
console.log('ContentPass | Starting Sourcepoint');
window._sp_.executeMessaging();
window.LUX?.addData('cmp-shown-contentpass', 1);
}
} else {
console.log('ContentPass | Sourcepoint not loaded yet. Retrying.');
setTimeout(spExecMsg, 10);
}
})();
}
});
})();
</script><script data-react-helmet="true">
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "Site Data",
sendCustomOptimizelyEvents: "true",
site_name: "bbcgoodfood"
});
</script><script data-react-helmet="true">
!function(n,e,o,r,i){if(!e){e=e||{},window.permutive=e,e.q=[],e.config=i||{},e.config.projectId=o,e.config.apiKey=r,e.config.environment=e.config.environment||"production";for(var t=["addon","identify","track","trigger","query","segment","segments","ready","on","once","user","consent"],c=0;c<t.length;c++){var f=t[c];e[f]=function(n){return function(){var o=Array.prototype.slice.call(arguments,0);e.q.push({functionName:n,arguments:o})}}(f)}}}(document,window.permutive,"99db7a95-b06a-4ea9-857c-f73ba0a25c19","db07e0f0-8bb8-46c8-b714-291f2768d746",{ "consentRequired": true })
</script><script data-react-helmet="true">
window.dataLayer = window.dataLayer || [];
(function(pageData) {
pageData.time = Date.now();
window.dataLayer.push(pageData);
})({"cat":["j","recipes","glossary"],"channel":"recipes","format":"video","pageid":"223740","primary_cat":"recipes","subcat":"recipe","author":"Good Food team","publish_date":"2024-11-27T11:20:16+00:00","template":"recipe","taxonomies":{"posttag":["butter","cheap","cheap-recipes","chicken-curry","chicken-recipes","chicken-tika-massala","coriander","curry-recipes","double-cream","easy-recipes","freezable-recipes","freezer","good-food","make-one-freeze-one","mango-chutney","quick-recipes","red-pepper","red-peppers","takeaway","tikka-marsala","tikka-masala-paste","tikka-sauce","tomato","tomato-puree","tomatoes","vegetable-oil","yogurt"],"cuisine":["indian"],"diet":["egg-free","gluten-free","nut-free"],"meal-type":["dinner","main-course"],"occasion":["everyday","family-favourite"]},"event":"Page Data","time":1762237196181})
</script><script data-react-helmet="true" src="https://cdn.greenvideo.io/players/gv.js" data-license-key="0c18e53b610964fac175fe0e757adc30557e79b7" async=""></script><script>document.documentElement.classList.remove("no-js");</script><meta name="next-head-count" content="56"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-1310b3627545c7d0.js" defer=""></script><script src="/_next/static/chunks/framework-63d16ff2f5e08230.js" defer=""></script><script src="/_next/static/chunks/main-7cfbfeddec6503ee.js" defer=""></script><script src="/_next/static/chunks/pages/_app-03d167397b561b29.js" defer=""></script><script src="/_next/static/chunks/491-00c8e763fab20c02.js" defer=""></script><script src="/_next/static/chunks/490-2f14dcd8403448f0.js" defer=""></script><script src="/_next/static/chunks/562-a5e9aa95cea23dc5.js" defer=""></script><script src="/_next/static/chunks/pages/editorial/recipe/%5Bslug%5D-72b2c3ec9ab7cec2.js" defer=""></script><script src="/_next/static/7c815612b896f1d92ac4b51680d8b7ad287f611a-20251024150333-editorial/_buildManifest.js" defer=""></script><script src="/_next/static/7c815612b896f1d92ac4b51680d8b7ad287f611a-20251024150333-editorial/_ssgManifest.js" defer=""></script><link rel="stylesheet" href="/static/styles/css/im-bbcgoodfood-theme/base-7859edffc23b29074fc826f41bde012e.css"/><link rel="stylesheet" href="/static/styles/css/im-bbcgoodfood-theme/components-a6280783536b28b59fd775c7907e50fa.css"/><link rel="stylesheet" href="/static/styles/css/im-bbcgoodfood-theme/utilities-f8aa8182a68b4f53a134cb11e37bd9c1.css"/><link rel="stylesheet" href="/static/styles/css/im-bbcgoodfood-theme/services-b02dd63fbe5235eec2196014e41160c4.css"/></head><body class="layout-recipe"><script id="__DESIGN_TOKENS__" type="application/json">{"colors":{"highlightLight":"rgba(114, 174, 178, 1)","highlightRegular":"rgba(68, 125, 117, 1)","highlightDark":"rgba(12, 95, 95, 1)","clickableLight":"rgba(241, 110, 178, 1)","clickableRegular":"rgba(190, 42, 119, 1)","clickableDark":"rgba(152, 33, 95, 1)","interactiveLight":"rgba(159, 171, 201, 1)","interactiveRegular":"rgba(100, 90, 140, 1)","interactiveDark":"rgba(73, 66, 102, 1)","commercialLight":"rgba(110, 164, 200, 1)","commercialRegular":"rgba(70, 124, 160, 1)","commercialDark":"rgba(50, 104, 140, 1)","displayLight":null,"displayRegular":null,"displayDark":null,"baseWhite":"rgba(255, 255, 255, 1)","baseGrey":"rgba(51, 51, 51, 1)","baseBlack":"rgba(0, 0, 0, 1)","backgroundExtraLight":"rgba(240, 240, 240, 1)","backgroundLight":"rgba(219, 219, 219, 1)","backgroundRegular":"rgba(193, 192, 192, 1)","backgroundDark":"rgba(161, 161, 161, 1)","backgroundExtraDark":"rgba(118, 118, 118, 1)","socialApple":"rgba(0, 0, 0, 1)","socialFacebook":"rgba(59, 89, 153, 1)","socialTwitter":"rgba(0, 0, 0, 1)","socialPinterest":"rgba(189, 8, 28, 1)","socialInstagram":"rgba(225, 48, 108, 1)","socialGoogleBorder":"rgba(136, 136, 136, 1)","socialTumblr":"rgba(53, 70, 92, 1)","socialReddit":"rgba(95, 153, 207, 1)","socialBlogger":"rgba(245, 125, 0, 1)","socialVkontakt":"rgba(69, 102, 142, 1)","socialWhatsapp":"rgba(18, 140, 126, 1)","socialYoutube":"rgba(255, 0, 0, 1)","socialRss":"rgba(242, 101, 34, 1)","socialEmail":"rgba(214, 61, 43, 1)","formFocus":"rgba(33, 157, 255, 1)","formWarningRegular":"rgba(204, 0, 0, 1)","formWarningLight":"rgba(249, 229, 229, 1)","formWarningReversed":"rgba(252, 111, 111, 1)","formSuccessRegular":"rgba(25, 105, 54, 1)","formSuccessLight":"rgba(227, 244, 227, 1)","formInfoRegular":"rgba(49, 112, 143, 1)","formInfoLight":"rgba(217, 237, 247, 1)","formReactionsDark":"rgba(218, 167, 13, 1)","swatchBlack":"rgba(0, 0, 0, 1)","swatchBlue":"rgba(151, 203, 251, 1)","swatchGreen":"rgba(119, 194, 61, 1)","swatchOrange":"rgba(246, 135, 0, 1)","swatchPeach":"rgba(255, 176, 124, 1)","swatchPink":"rgba(245, 127, 175, 1)","swatchPurple":"rgba(187, 99, 250, 1)","swatchRed":"rgba(249, 70, 70, 1)","swatchWhite":"rgba(255, 255, 255, 1)","swatchYellow":"rgba(255, 232,
function isCookieValid(cookieName, cookieValue, src) {
const match = document.cookie.match(new RegExp('(?:^|; )' + cookieName + '=([^;]*)'));
if (!match) return false;
const actualValue = match[1];
if (cookieValue === 'null') {
return true;
}
if (cookieValue !== 'null') {
return actualValue === cookieValue;
}
return true;
}
(function () {
setTimeout(function () {
if (!isCookieValid('_cpauthhint', '1', '/stitcher-assets/gpt/tag/js/gpt.js?contentPass')) {
var script = document.createElement('script');
script.async = true;
script.defer = false;
script.fetchPriority = 'high';
script.src = '/stitcher-assets/gpt/tag/js/gpt.js?contentPass';
document.head.appendChild(script);
}
}, 100);
})();
</script><script>
function isCookieValid(cookieName, cookieValue, src) {
const match = document.cookie.match(new RegExp('(?:^|; )' + cookieName + '=([^;]*)'));
if (!match) return false;
const actualValue = match[1];
if (cookieValue === 'null') {
return true;
}
if (cookieValue !== 'null') {
return actualValue === cookieValue;
}
return true;
}
(function () {
setTimeout(function () {
if (!isCookieValid('_cpauthhint', '1', '//micro.rubiconproject.com/prebid/dynamic/7959.js?contentPass')) {
var script = document.createElement('script');
script.async = true;
script.defer = false;
script.fetchPriority = 'high';
script.src = '//micro.rubiconproject.com/prebid/dynamic/7959.js?contentPass';
document.head.appendChild(script);
}
}, 100);
})();
</script><script>
function isCookieValid(cookieName, cookieValue, src) {
const match = document.cookie.match(new RegExp('(?:^|; )' + cookieName + '=([^;]*)'));
if (!match) return false;
const actualValue = match[1];
if (cookieValue === 'null') {
return true;
}
if (cookieValue !== 'null') {
return actualValue === cookieValue;
}
return true;
}
(function () {
setTimeout(function () {
if (!isCookieValid('_cpauthhint', '1', '/aax2/apstag.js')) {
var script = document.createElement('script');
script.async = true;
script.defer = false;
script.fetchPriority = 'high';
script.src = '/aax2/apstag.js';
document.head.appendChild(script);
}
}, 100);
})();
</script><script>
function isCookieValid(cookieName, cookieValue, src) {
const match = document.cookie.match(new RegExp('(?:^|; )' + cookieName + '=([^;]*)'));
if (!match) return false;
const actualValue = match[1];
if (cookieValue === 'null') {
return true;
}
if (cookieValue !== 'null') {
return actualValue === cookieValue;
}
return true;
}
(function () {
setTimeout(function () {
if (!isCookieValid('_cpauthhint', '1', '/stitcher-assets/permutive/99db7a95-b06a-4ea9-857c-f73ba0a25c19-web.js?contentPass')) {
var script = document.createElement('script');
script.async = true;
script.defer = false;
script.fetchPriority = 'high';
script.src = '/stitcher-assets/permutive/99db7a95-b06a-4ea9-857c-f73ba0a25c19-web.js?contentPass';
document.head.appendChild(script);
}
}, 100);
})();
</script><script>
window.__tcfapi('addEventListener', 2, (tcData, listenerSuccess) => {
if (!listenerSuccess) {
const error = new Error('addEventListener failure in TCFAPI');
console.error(error);
return;
}
if (
(['useractioncomplete', 'tcloaded'].includes(tcData.eventStatus))
&& tcData.purpose.consents[1]
) {
const script = document.createElement('script');
script.async = true;
script.defer = false;
script.fetchpriority = 'high';
script.src = '//cdn.geni.us/snippet.min.js?contentPass';
document.head.appendChild(script);
window.__tcfapi('removeEventListener', 2, (removeSuccess) => {
if (!removeSuccess) {
const error = new Error('removeEventListener failure in TCFAPI');
console.error(error);
}
}, tcData.listenerId);
}
});
</script><div></div><div></div><div></div><div></div><div class="default-layout"><a href="#site-main" class="skip-link mt-xs mb-xs">Skip to main content</a><div class="ad-slot hidden-print hidden-for-md-down ad-slot--oop"><div class="ad-slot__container"><div id="recipe--oop--1" class="ad-unit"></div></div><div><script>(window.adq = window.adq || []).push((api) => api.addSlot({"key":"oop","index":1,"searchTerm":null,"fullSearchTerm":null}));</script></div></div><div class="ad-banner hidden-print"><div class="ad-banner__content"><div class="ad-slot hidden-print ad-banner__slot d-flex align-items-center"><div class="ad-slot__container ad-slot__banner-container"><div id="recipe--banner--1" class="ad-unit"></div></div><div><script>(window.adq = window.adq || []).push((api) => api.addSlot({"key":"banner","index":1,"searchTerm":null,"fullSearchTerm":null}));</script></div></div><button class="ad-banner__dismiss-btn" type="button" aria-label="Dismiss ad banner"><div class="ad-banner__dismiss-btn-inner"><div class="icon-stack icon-stack--vertical-align" style="height:10px;width:10px"><div class="icon-stack__icon" style="z-index:1"><i class="icon" style="width:10px;min-width:10px;height:10px;min-height:10px;animation-duration:1000ms"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:rgba(255, 255, 255, 1);fill:rgba(255, 255, 255, 1)"><use xlink:href="/static/icons/base/sprite-maps/core-37c6bb23854c9ec5b087733b4d30e151.svg#cross"></use></svg></i></div></div></div></button></div></div><div class="site-header__eyebrow-nav hidden-print" data-feature="Header"><div class="eyebrow-nav"><div class="eyebrow-nav__container container container--no-gutters"><div class="eyebrow-nav__icon eyebrow-nav__icon--muted mr-xs"><a class="popup-toggle-button" aria-label="Toggle main-navigation popup" aria-haspopup="true" href="#main-navigation-popup"><i class="icon" style="width:24px;min-width:24px;height:24px;min-height:24px;animation-duration:1000ms"><svg class="icon__svg" aria-hidden="true" focusable="false" style="color:inherit;fill:inherit"><use xlink:href="/static/icons/base/sprite-maps/core-37c6bb23854c9ec5b087733b4d30e151.svg#menu"></use></svg></i></a></div><div class="image chromatic-ignore eyebrow-nav__logo eyebrow-nav__brand-logo image--fluid" style="max-width:107.58620689655172px"><a class="link image__container" href="https://www.bbcgoodfood.com" rel="home" data-component="Link"><picture class="image__picture" width="120" height="26.76923076923077"><source type="image/webp" sizes="120px" srcSet="https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;webp=true&amp;resize=120,27 120w,https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;webp=true&amp;resize=240,54 240w,https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;webp=true&amp;resize=260,58 260w"/><source sizes="120px" srcSet="https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;resize=120,27 120w,https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;resize=240,54 240w,https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;resize=260,58 260w"/><img class="image__img" src="https://images.immediate.co.uk/production/volatile/sites/30/2024/03/cropped-padded-GF-footer-logo-988784d-e9bbf17.png?quality=90&amp;resize=120,27" alt="Good Food brand logo in white" data-item-name="Good Food brand logo in white" title="Good Food logo" style="aspect-ratio:1 / 0.2230769230769231;object-fit:cover" loading="eager" width="120" height="26.76923076923077"/></picture></a></div><div class="eyebrow-nav__desktop"><nav class="eyebrow-nav__navigation" aria-label="Quick links" data-feature="QuickLinks"><ul class="list
(function(w,d,s,l,i){
w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
})(window,document,'script','dataLayer','GTM-K86F9FM');
</script></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"page":null,"callout":null,"client":"bbcgoodfood","entity":"recipe","postId":"223740","published":null,"siteTitle":"Good Food","slug":"chicken-tikka-masala","uid":"recipes~chicken-tikka-masala","title":"Chicken tikka masala","status":"published","isPrivate":false,"postType":"recipe","isPremium":false,"contentWallExperience":{"enabled":false,"theme":"default"},"recommendedPost":{"heading":"More like this","getItemsUrl":"/api/editorial/search/recommended-items?limit=1\u0026clientId=223740\u0026search=Chicken%20tikka%20masala\u0026postType=recipe\u0026category=recipes"},"authorBioShow":false,"authorPrefix":null,"authors":[{"name":"Good Food team","avatar":null,"bio":"We are the UKs number one food brand","facebook":null,"instagram":null,"jobTitle":null,"id":null,"suffix":null,"twitter":null,"url":"/author/goodfood"}],"description":"\u003cp\u003eThis takeaway favourite is freezer-friendly and quick to reheat, giving you the chance to get ahead and save money.\u003c/p\u003e","endSummary":[{"type":"html","data":{"value":"\u003ch6 id=\"recipe-tips-8a92a7fa\"\u003eRECIPE TIPS\u003c/h6\u003e"}},{"type":"highlight-box","data":{"content":"\u003ch6\u003eMAKING YOUR OWN CURRY PASTE\u003c/h6\u003e\u003cp\u003eIn a small food processor, whizz together\u003cp\u003e5 garlic cloves, 1 large knob of ginger, roughly chopped, 1 red\u003cp\u003echilli, deseeded and roughly chopped,\u003cp\u003e2 tsp each ground cumin and coriander,\u003cp\u003e1 tsp each turmeric, paprika and\u003cp\u003egaram masala, and the seeds from\u003cp\u003e4 cardamom pods. Add a little water or\u003cp\u003evegetable oil to bring the paste together.\u003cp\u003e\u003cem\u003eWill keep in the fridge for up to\u003c/em\u003e\u003cp\u003e\u003cem\u003eone week or frozen for up to one month.\u003c/em\u003e","image":null,"hasBackdrop":false,"useCommercialTheme":false,"hideCaption":false}},{"type":"html","data":{"value":""}},{"type":"highlight-box","data":{"content":"\u003ch6\u003eFREEZING TIPS\u003c/h6\u003e\u003cp\u003eTo safely freeze, cool the curry as quickly as\u003cp\u003epossible, then freeze as soon as its\u003cp\u003ecompletely cooled. Divide into\u003cp\u003efreezer-proof containers, or\u003cp\u003euse takeaway containers. To avoid freezer burn, make sure\u003cp\u003eall chicken pieces are well covered\u003cp\u003ewith the sauce. \u003cem\u003eWill keep, in the freezer, for up to three months.\u003c/em\u003e Defrost overnight in the fridge.\u003cp\u003eOnce thoroughly defrosted, reheat gently\u003cp\u003eto prevent the yogurt from splitting. Make sure it's piping hot all the way through before serving.","image":null,"hasBackdrop":false,"useCommercialTheme":false,"hideCaption":false}}],"introduction":[[{"type":"html","data":{"value":"\u003cp\u003eTry chicken tikka masala with \u003ca href=\"https://www.bbcgoodfood.com/recipes/chicken-satay-curry\"\u003echicken satay curry\u003c/a\u003e, perfect for curry lovers.\u003c/p\u003e"}}]],"promo":null,"userRatings":{"avg":4.45,"total":412,"isHalfStar":false,"commentCount":0},"isSaveable":true,"sponsor":null,"relatedItems":null,"plantOverview":null,"openWebSettings":{"disableSocialReviews":false,"disableReadOnly":false},"globalOpenWebSettings":null,"openWebRatingEnabled":false,"ediplayerSettings":null,"ingredients":[{"ingredients":[{"main":false,"metricQuantity":4,"ingredientText":"vegetable oil","metricUnit":"tbsp","quantityText":"4 tbsp","term":{"slug":"vegetable-oil","display":"vegetable oil"}},{"main":false,"glossaryLink":"/glossary/butter-glossary","metricQuantity":25,"ingredientText":"butter","metricUnit":"g","quantityText":"25g","term":{"slug":"butter","display":"butter"}},{"main":false,"glossaryLink":"/glossary/onion-glossary","metricQuantity":4,"ingredientText":"onions","note":"roughly chopped","quantityText":"4","term":{"slug":"onion","display":"onion"}},{"main":false,"metricQuantity":6,"ingredientText":"chicken tikka masala paste","metricUnit":"tbsp","note":"(use shop-bought or make your own see r