<!DOCTYPE html>
<html lang="vi" style="margin-top: 0px !important">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" />
  <link rel="stylesheet" href="/wp-content/themes/cakhiatv/style.css" />
  <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
    <link rel="icon" href="/favicon.ico" type="image/x-icon" />
  	<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
	
<!-- Tối ưu hóa công cụ tìm kiếm bởi Rank Math PRO - https://rankmath.com/ -->
<title>Xoilac TV Trực Tiếp Bóng Đá 90phut HD - TTBD Xôi Lạc #1 VN</title>
<meta name="description" content="Xoilac TV cung cấp link xem bóng đá trực tuyến, trực tiếp bóng đá Xôi Lạc TV hôm nay giải Ngoại Hạng Anh, Euro, Bundesliga, VĐQG Tây Ban Nha,..."/>
<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
<link rel="canonical" href="https://getsongbird.net" />
<meta property="og:locale" content="vi_VN" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Xoilac TV Trực Tiếp Bóng Đá 90phut HD - TTBD Xôi Lạc #1 VN" />
<meta property="og:description" content="Xoilac TV cung cấp link xem bóng đá trực tuyến, trực tiếp bóng đá Xôi Lạc TV hôm nay giải Ngoại Hạng Anh, Euro, Bundesliga, VĐQG Tây Ban Nha,..." />
<meta property="og:url" content="https://getsongbird.net" />
<meta property="og:site_name" content="Xoilac TV Trực Tiếp Bóng Đá 90phut HD - TTBD Xôi Lạc #1 VN" />
<meta property="og:updated_time" content="2025-11-06T23:07:04+07:00" />
<meta property="og:image" content="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg" />
<meta property="og:image:secure_url" content="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg" />
<meta property="og:image:width" content="1080" />
<meta property="og:image:height" content="1080" />
<meta property="og:image:alt" content="xoilac tv" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="article:published_time" content="2025-06-22T18:41:07+07:00" />
<meta property="article:modified_time" content="2025-11-06T23:07:04+07:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Xoilac TV Trực Tiếp Bóng Đá 90phut HD - TTBD Xôi Lạc #1 VN" />
<meta name="twitter:description" content="Xoilac TV cung cấp link xem bóng đá trực tuyến, trực tiếp bóng đá Xôi Lạc TV hôm nay giải Ngoại Hạng Anh, Euro, Bundesliga, VĐQG Tây Ban Nha,..." />
<meta name="twitter:image" content="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg" />
<meta name="twitter:label1" content="Được viết bởi" />
<meta name="twitter:data1" content="Vũ Khắc Tiệp" />
<meta name="twitter:label2" content="Thời gian để đọc" />
<meta name="twitter:data2" content="25 phút" />
<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://getsongbird.net/#organization","name":"Xoilac TV","logo":{"@type":"ImageObject","@id":"https://getsongbird.net/#logo","url":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg","contentUrl":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg","caption":"Xoilac TV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 90phut HD - TTBD X\u00f4i L\u1ea1c #1 VN","inLanguage":"vi","width":"1080","height":"1080"}},{"@type":"WebSite","@id":"https://getsongbird.net/#website","url":"https://getsongbird.net","name":"Xoilac TV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 90phut HD - TTBD X\u00f4i L\u1ea1c #1 VN","alternateName":"Xoilac TV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 90phut HD - TTBD X\u00f4i L\u1ea1c #1 VN","publisher":{"@id":"https://getsongbird.net/#organization"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://getsongbird.net/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg","url":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg","width":"1080","height":"1080","inLanguage":"vi"},{"@type":"WebPage","@id":"https://getsongbird.net#webpage","url":"https://getsongbird.net","name":"Xoilac TV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 90phut HD - TTBD X\u00f4i L\u1ea1c #1 VN","datePublished":"2025-06-22T18:41:07+07:00","dateModified":"2025-11-06T23:07:04+07:00","about":{"@id":"https://getsongbird.net/#organization"},"isPartOf":{"@id":"https://getsongbird.net/#website"},"primaryImageOfPage":{"@id":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg"},"inLanguage":"vi"},{"@type":"Person","@id":"https://getsongbird.net/author/vukhactiep","name":"V\u0169 Kh\u1eafc Ti\u1ec7p","url":"https://getsongbird.net/author/vukhactiep","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/e9ea79398b3732fed96bb1f046bff4b79955e21fc32ffe18aed3c845775311d1?s=96&amp;d=mm&amp;r=g","url":"https://secure.gravatar.com/avatar/e9ea79398b3732fed96bb1f046bff4b79955e21fc32ffe18aed3c845775311d1?s=96&amp;d=mm&amp;r=g","caption":"V\u0169 Kh\u1eafc Ti\u1ec7p","inLanguage":"vi"},"worksFor":{"@id":"https://getsongbird.net/#organization"}},{"@type":"Article","headline":"Xoilac TV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 90phut HD - TTBD X\u00f4i L\u1ea1c #1 VN","keywords":"xoilac tv","datePublished":"2025-06-22T18:41:07+07:00","dateModified":"2025-11-06T23:07:04+07:00","author":{"@id":"https://getsongbird.net/author/vukhactiep","name":"V\u0169 Kh\u1eafc Ti\u1ec7p"},"publisher":{"@id":"https://getsongbird.net/#organization"},"description":"Xoilac TV cung c\u1ea5p link xem b\u00f3ng \u0111\u00e1 tr\u1ef1c tuy\u1ebfn, tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 X\u00f4i L\u1ea1c TV h\u00f4m nay gi\u1ea3i Ngo\u1ea1i H\u1ea1ng Anh, Euro, Bundesliga, V\u0110QG T\u00e2y Ban Nha,...","name":"Xoilac TV Tr\u1ef1c Ti\u1ebfp B\u00f3ng \u0110\u00e1 90phut HD - TTBD X\u00f4i L\u1ea1c #1 VN","@id":"https://getsongbird.net#richSnippet","isPartOf":{"@id":"https://getsongbird.net#webpage"},"image":{"@id":"https://cdn.xoilac88xg.cc/wp-content/uploads/2025/07/logo-squared.jpg"},"inLanguage":"vi","mainEntityOfPage":{"@id":"https://getsongbird.net#webpage"}}]}</script>
<!-- /Plugin SEO WordPress Rank Math -->

<link rel='dns-prefetch' href='//cdn.getsongbird.net' />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cdn.getsongbird.net\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1"}};
/*! This file is auto-generated */
!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\ud83d\udd25","\ud83d\udc26\u200b\ud83d\udd25")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>

	img.wp-smiley, img.emoji {
		display: inline !important;
		border: none !important;
		box-shadow: none !important;
		height: 1em !important;
		width: 1em !important;
		margin: 0 0.07em !important;
		vertical-align: -0.1em !important;
		background: none !important;
		padding: 0 !important;
	}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://cdn.getsongbird.net/wp-includes/css/dist/block-library/style.min.css?ver=6.8.1' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='ez-toc-css' href='https://cdn.getsongbird.net/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.74' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-size: 95%;}div#ez-toc-container ul li , div#ez-toc-container ul li a {font-weight: 500;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, '.', decimal) '. ';display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='main-style-css' href='https://cdn.getsongbird.net/wp-content/themes/cakhiatv/style.css?ver=6.8.1' type='text/css' media='all' />
<script type="text/javascript" src="https://cdn.getsongbird.net/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
<script type="text/javascript" src="https://cdn.getsongbird.net/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
<link rel="https://api.w.org/" href="https://getsongbird.net/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://getsongbird.net/wp-json/wp/v2/pages/1060" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://getsongbird.net/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.1" />
<link rel='shortlink' href='https://getsongbird.net/' />
<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://getsongbird.net/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fgetsongbird.net%2F" />
<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://getsongbird.net/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fgetsongbird.net%2F&#038;format=xml" />
    <style>
        @media (min-width: 1024px) {
            h1 {
                font-size: 1.5em !important;
            }
        }
        
        .match-teams-score {
            display: flex !important;
        }
        
        @media (max-width: 767px) {
            .xgplayer .xg-inner-controls {
                height: 60px !important;
            }
        }
        
        @media (min-width: 481px) and (max-width: 767px) {
            div#chat_messages {
                max-height: 60vh !important;
            }
        }
    </style>
    <style>
            .match-section {
                min-height: 4800px;
            }
            
            .match-card__status {
                position: absolute;
                top: 13%;
                left: 50%;
                transform: translate(-50%, -50%);
            }
            
            .match-card__stats-content {
                background: none !important;
                box-shadow: none !important
            }
            
            
            
            @media (max-width: 480px) {
                .team__logo {
                    width: 40px !important;
                    height: 40px !important;
                }
                .match-card__league {
                    max-width: 100px;
                }
                
                .match-card__time {
                    max-width: 100px;
                }
                
                .match-card__status {
                    max-width: 120px;
                    order: 1 !important;
                    font-size: 12px
                }
                
                .streaming {
                    padding: 4px;
                }
                
                .btn-view-truc-tiep {
                    padding: 8px 4px !important;
                    font-size: 12px;
                }
                .match-card__stats-content {
                    display: block !important;
                }
                
                .match-card__stats {
                    display: block !important
                }
            }
            
            @media (min-width: 768px) and (max-width: 1024px) {
                .match-card__status {
                    position: absolute;
                    top: 13%;
                    left: 50%;
                    transform: translate(-50%, -50%);
                }
                
                .match-card__league {
                    max-width: 110px;
                }
            }
        </style>  
<!-- Google tag (tổng) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-V8GXMSME5N"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-V8GXMSME5N');
</script>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-5HF67MKNY8"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'G-5HF67MKNY8');
</script>
  

</head>

<body>
  <!-- Header -->
<header class="header">
    <div class="container">
      <div class="header__inner">
        <a href="/" class="logo">
          <img src="/wp-content/uploads/2025/06/logo-xoilac.png" alt="Xoilac TV" style="max-height: 50px"/>
        </a>
        <div style="display: flex; align-items: center">
          <nav class="nav">
            <button class="nav__toggle">
              <img src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/hamburger.svg" alt="Menu" />
            </button>

            <ul class="nav__menu">
              <button class="nav__close" aria-label="Close menu"></button>
              <li class="nav__item"><a href="/" class=" active">TRANG CHỦ</a></li><li class="nav__item"><a href="https://getsongbird.net/lich-thi-dau" class="">LỊCH THI ĐẤU</a></li><li class="nav__item"><a href="https://getsongbird.net/bang-xep-hang" class="">BẢNG XẾP HẠNG</a></li><li class="nav__item"><a href="https://getsongbird.net/ket-qua-bong-da" class="">KẾT QUẢ BÓNG ĐÁ</a></li><li class="nav__item"><a href="https://getsongbird.net/nhan-dinh" class="">NHẬN ĐỊNH</a></li><li class="nav__item"><a href="https://getsongbird.net/tin-tuc" class="">TIN TỨC</a></li>            </ul>
          </nav>
          <div class="header__buttons">
            <a href="https://refvsb.com/" class="btn btn--secondary header-button" rel="nofollow">
              <span class="header-text">CƯỢC VSBET</span>
            </a>
            <a href="https://t.me/vsthethao" rel="nofollow" target="_blank" class="btn btn--default header-button">
              <span class="header-text">LIÊN HỆ KM</span>
            </a>
          </div>

        </div>



      </div>
    </div>
  </header>
 
   <!-- Main Content -->
     <!-- Main Content -->
     <main style="padding-top: 1px">
      <!-- Hero Section -->
      <section class="hero">
        <div class="container">
          <div class="hero__content">
            <h1 class="text-uppercase">
                Xoilac TV Trực Tiếp Bóng Đá 90phut HD - TTBD Xôi Lạc #1 VN
            </h1>
          </div>
        </div>
      </section>

      <!-- Sports Filter -->
      <section class="sports-filter">
        <div class="container">
          <div class="sports-filter__inner" style="display: none">
            <!-- Group 1: Sports Categories -->
            <!--<div class="sports-filter__group sports-categories">
            <button
                class="sports-filter__button"
                data-sport="all"
              >
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/football.png"
                    alt="Tất Cả"
                  />
                </div>
                <div class="sports-filter__button-text">Tất Cả</div>
                <div class="sports-filter__button-count" id="count-all-type"></div>
              </button>

              <button
                class="sports-filter__button"
                data-sport="football"
              >
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/football.png"
                    alt="Football"
                  />
                </div>
                <div class="sports-filter__button-text">Bóng đá</div>
                <div class="sports-filter__button-count" id="count-football"></div>
              </button>

              <button class="sports-filter__button" data-sport="basketball">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/basketball.png"
                    alt="Basketball"
                  />
                </div>
                <div class="sports-filter__button-text">Bóng rổ</div>
                <div class="sports-filter__button-count" id="count-basketball"></div>
              </button>

             <!-- <button class="sports-filter__button" data-sport="tennis">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/tennis.png" alt="Tennis" />
                </div>
                <div class="sports-filter__button-text">Tennis</div>
                <div class="sports-filter__button-count" id="count-tennis"></div>
              </button> -->

              <!--<button class="sports-filter__button" data-sport="volleyball">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/volleyball.png"
                    alt="Volleyball"
                  />
                </div>
                <div class="sports-filter__button-text">Bóng chuyền</div>
                <div class="sports-filter__button-count" id="count-volleyball"></div>
              </button> -->

              <div class="livescore-switch">
                <label class="switch">
                  <input type="checkbox" id="livescoreToggle" />
                  <span class="slider"></span>
                </label>
                <span class="livescore-label">Livescore</span>
              </div>
            </div>

            <!-- Divider -->
            <div class="sports-filter__divider"></div>

            <!-- Group 2: Match Filters -->
            <div class="sports-filter__group match-filters">
            <button class="sports-filter__button_child active" data-filter="child_all">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/all.png" alt="All" />
                </div>
                <div class="sports-filter__button-text">Tất cả</div>
                <div class="sports-filter__button-count" id="count-all-type"></div>
              </button>

              <button class="sports-filter__button_child live" data-filter="live">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/live.png" alt="Live" />
                </div>
                <div class="sports-filter__button-text">Đang Live</div>
                <div class="sports-filter__button-count" id="count-live"></div>
              </button>

              <button class="sports-filter__button_child" data-filter="hot">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/hot.png" alt="Hot" />
                </div>
                <div class="sports-filter__button-text">Trận HOT</div>
                <div class="sports-filter__button-count" id="count-hot">48</div>
              </button>

              <button class="sports-filter__button_child" data-filter="date" data-value="2026-04-03">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" alt="Today" />
                </div>
                <div class="sports-filter__button-text">Hôm Nay</div>
                <div class="sports-filter__button-count" id="count-today"></div>
              </button>

              <button class="sports-filter__button_child" data-filter="date" data-value="2026-04-04">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/images/icons/calendar.png"
                    alt="Tomorrow"
                  />
                </div>
                <div class="sports-filter__button-text">Ngày Mai</div>
                <div class="sports-filter__button-count" id="count-tomorrow"></div>
              </button>         
            <!--  
             <button class="sports-filter__button_child" data-filter="no_blv">
                <div class="sports-filter__button-text">Live không BLV</div>
                <div class="sports-filter__button-count" id="noblv-live">0</div>
              </button>
              -->
            </div>
          </div>
        </div>
      </section>

      <!-- Featured Matches -->
      <section class="featured-matches">
        <div class="container">
        <div class="match-section">
            <div id="match-list" class="matches">
            </div>
          </div>

          <!--<div
            style="
              display: flex;
              justify-content: center;
              margin-top: 1rem;
              margin-bottom: 1rem;
            "
          >
            <a href="#" class="btn btn--readmore">
              <span>Xem thêm lịch trực tiếp -></span>
            </a>
          </div>-->
        </div>
      </section>

      <!-- Content Navigation Section -->
      <section class="content-nav">
  <div class="container">
    <div class="content-nav__container" style="max-height:800px !important">
      <div class="content-nav__lists">
        <div class="content-nav__list">
          <!-- Nếu bạn vẫn muốn giữ Mục lục này thủ công, thì để lại -->
          <p style="font-weight: bold; font-size: 120%">Mục Lục</p>
          <!-- Hoặc có thể xoá toàn bộ <ul> này nếu muốn Gutenberg xử lý luôn -->

          <div class="content-nav__divider"></div>

          <div class="content-nav__text">
            <div id="ez-toc-container" class="ez-toc-v2_0_74 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title" style="cursor:inherit">Table of Contents</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Gioi_thieu_ve_Xoilac_TV_%E2%80%93_Truc_tiep_bong_da_HD_1_hien_nay" >Giới thiệu về Xoilac TV &#8211; Trực tiếp bóng đá HD #1 hiện nay</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#Lich_su_hinh_thanh_cua_Xoilac_TV" >Lịch sử hình thành của Xoilac TV</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#Tam_nhin_va_muc_tieu_phat_trien_cua_Xoilac_TV" >Tầm nhìn và mục tiêu phát triển của Xoilac TV</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#Xoilac_TV_phat_bong_da_truc_tuyen_o_cac_giai_dau_nao" >Xoilac TV phát bóng đá trực tuyến ở các giải đấu nào?</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Ngoai_Hang_Anh_%E2%80%93_English_Premier_League" >Ngoại Hạng Anh &#8211; English Premier League</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Cac_giai_dau_VDQG_hang_dau_Chau_Au_%E2%80%93_La_Liga_Bundesliga_Serie_A_Ligue_1" >Các giải đấu VĐQG hàng đầu Châu Âu &#8211; La Liga, Bundesliga, Serie A, Ligue 1</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#Champions_League_%E2%80%93_Cup_C1_Chau_Au" >Champions League &#8211; Cúp C1 Châu Âu</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#World_Cup_%E2%80%93_Giai_dau_hap_dan_nhat_hanh_tinh" >World Cup &#8211; Giải đấu hấp dẫn nhất hành tinh</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#Bong_da_Viet_Nam_Vo_dich_quoc_gia_va_DTQG" >Bóng đá Việt Nam (Vô địch quốc gia và ĐTQG)</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#Uu_diem_khi_xem_truc_tiep_bong_da_tai_Xoilac_TV" >Ưu điểm khi xem trực tiếp bóng đá tại Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#Hinh_anh_Full_HD_am_thanh_song_dong" >Hình ảnh Full HD, âm thanh sống động</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#Doi_ngu_BLV_soi_noi_am_hieu_bong_da" >Đội ngũ BLV sôi nổi, am hiểu bóng đá</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Duong_truyen_on_dinh_khong_giat_lag" >Đường truyền ổn định, không giật lag</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#Hoan_toan_mien_phi_khong_can_tao_tai_khoan" >Hoàn toàn miễn phí, không cần tạo tài khoản</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-15" href="#Cac_chuyen_muc_huu_ich_khac_tai_Xoilac_TV" >Các chuyên mục hữu ích khác tại Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#Lich_thi_dau_bong_da" >Lịch thi đấu bóng đá</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#Bang_xep_hang_bong_da" >Bảng xếp hạng bóng đá</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#Ket_qua_bong_da_moi_nhat" >Kết quả bóng đá mới nhất</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#Nhan_dinh_truoc_tran" >Nhận định trước trận</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-20" href="#Cap_nhat_tin_tuc_bong_da_247" >Cập nhật tin tức bóng đá 24/7</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-21" href="#Cach_xem_truc_tiep_bong_da_tai_Xoilac_TV" >Cách xem trực tiếp bóng đá tại Xoilac TV</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-22" href="#So_sanh_Xoilac_TV_va_cac_nen_tang_truc_tiep_bong_da_khac" >So sánh Xoilac TV và các nền tảng trực tiếp bóng đá khác</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-23" href="#Cau_hoi_thuong_gap_doi_voi_Xoilac_TV" >Câu hỏi thường gặp đối với Xoilac TV</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-24" href="#Xoilac_TV_co_mien_phi_khong_Co_can_dang_ky_tai_khoan_de_xem_khong" >Xoilac TV có miễn phí không? Có cần đăng ký tài khoản để xem không?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-25" href="#Xoilac_TV_co_an_toan_khong_Xem_o_day_co_bi_dinh_virus_khong" >Xoilac TV có an toàn không? Xem ở đây có bị dính virus không?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-26" href="#Xoilac_TV_co_xem_duoc_tren_dien_thoai_khong_Ho_tro_nhung_thiet_bi_nao" >Xoilac TV có xem được trên điện thoại không? Hỗ trợ những thiết bị nào?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-27" href="#Xoilac_TV_co_nhung_giai_dau_nao_Co_chieu_day_du_cac_tran_khong" >Xoilac TV có những giải đấu nào? Có chiếu đầy đủ các trận không?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-28" href="#Lam_gi_neu_dang_xem_Xoilac_TV_ma_bi_giat_lag_hoac_khong_xem_duoc" >Làm gì nếu đang xem Xoilac TV mà bị giật, lag hoặc không xem được?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-29" href="#Xoilac_TV_co_binh_luan_tieng_Viet_cho_moi_tran_dau_khong" >Xoilac TV có bình luận tiếng Việt cho mọi trận đấu không?</a></li></ul></li></ul></nav></div>




<h2 class="wp-block-heading"><span class="ez-toc-section" id="Gioi_thieu_ve_Xoilac_TV_%E2%80%93_Truc_tiep_bong_da_HD_1_hien_nay"></span>Giới thiệu về Xoilac TV &#8211; Trực tiếp bóng đá HD #1 hiện nay<span class="ez-toc-section-end"></span></h2>



<p><strong><a href="/">Xoilac</a></strong> TV (hay còn được biết đến với tên gọi Xôi Lạc TV, Xoi Lac TV, XoilacTV) là một nền tảng website xem <strong><a href="/">trực tiếp bóng đá</a></strong> trực tuyến hàng đầu tại Việt Nam hiện nay. Đây là địa chỉ quen thuộc giúp người hâm mộ theo dõi các trận cầu đỉnh cao với chất lượng HD hoàn toàn miễn phí. Trang web ra đời với sứ mệnh “mang sân cỏ đến gần hơn với người hâm mộ”, trở thành cộng đồng gắn kết những trái tim đam mê môn thể thao vua. </p>



<p>Xoilac TV nổi bật nhờ hình ảnh sắc nét, đường truyền ổn định, bình luận tiếng Việt cuốn hút và đặc biệt không thu bất kỳ khoản phí hay yêu cầu đăng ký tài khoản. Nơi đây không chỉ đơn thuần là kênh xem bóng đá, mà còn là không gian kết nối và chia sẻ của fan bóng đá trên khắp cả nước.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="450" src="https://xoilac88xg.cc/wp-content/uploads/2025/11/Gioi-thieu-xoilac-tv.jpg" alt="" class="wp-image-2888" srcset="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/Gioi-thieu-xoilac-tv.jpg 800w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/Gioi-thieu-xoilac-tv-300x169.jpg 300w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/Gioi-thieu-xoilac-tv-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lich_su_hinh_thanh_cua_Xoilac_TV"></span>Lịch sử hình thành của Xoilac TV<span class="ez-toc-section-end"></span></h3>



<p>Xôi Lạc TV khởi nguồn từ một nhóm nhỏ những người đam mê bóng đá và công nghệ, với mong muốn mang đến trải nghiệm xem bóng đá trực tuyến miễn phí, chất lượng cao cho cộng đồng yêu thể thao. Ban đầu, Xoilac chỉ đơn giản là nơi chia sẻ các đường link xem những trận đấu hấp dẫn cho bạn bè. Nhưng nhờ sự lan tỏa mạnh mẽ từ cộng đồng người hâm mộ, nền tảng này nhanh chóng phát triển vượt ngoài kỳ vọng.</p>



<p>Nhận thấy nhu cầu xem bóng đá trực tuyến tại Việt Nam tăng nhanh trong thời đại số, đội ngũ sáng lập Xoilac TV đã đầu tư bài bản hơn vào hệ thống máy chủ, giao diện người dùng và chất lượng nội dung. Từ việc vận hành thủ công với nguồn lực hạn chế, trang web từng bước nâng cấp công nghệ phát sóng, cải thiện độ phân giải hình ảnh, tăng tốc độ tải và tối ưu khả năng tương thích trên mọi thiết bị (máy tính, smartphone, máy tính bảng&#8230;).</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Tam_nhin_va_muc_tieu_phat_trien_cua_Xoilac_TV"></span>Tầm nhìn và mục tiêu phát triển của Xoilac TV<span class="ez-toc-section-end"></span></h3>



<p>Ngay từ những ngày đầu thành lập, Xoilac TV đã xác định kim chỉ nam hoạt động rõ ràng: “Lấy người xem làm trung tâm – Trải nghiệm của người dùng là mục tiêu cốt lõi”. Tầm nhìn của Xoilac TV là trở thành nền tảng xem bóng đá trực tiếp uy tín, bền vững và được tin dùng số một tại Việt Nam. Để đạt được điều đó, Xoilac luôn đặt trọng tâm vào việc hoàn thiện dịch vụ, lắng nghe góp ý từ người dùng và không ngừng đổi mới công nghệ.</p>



<p>Với phương châm hoạt động “Nhanh – Sạch – Sắc – Miễn phí”, mọi hoạt động vận hành của Xoilac TV xoay quanh việc tối ưu hóa trải nghiệm của người hâm mộ. Cụ thể, trang web đảm bảo cung cấp đường link phát sóng an toàn tuyệt đối (không chứa mã độc, không bị chèn quảng cáo phản cảm), tốc độ tải mượt mà, hình ảnh sắc nét là tiêu chuẩn bắt buộc cho mỗi trận đấu. Song song với yếu tố kỹ thuật, Xoilac TV cũng đầu tư mạnh vào yếu tố con người – từ đội ngũ bình luận viên, biên tập viên tin tức đến các chuyên gia soi kèo – nhằm mang đến nội dung bóng đá hấp dẫn, chính xác và chuyên sâu nhất.&nbsp;</p>



<p>Mục tiêu phát triển dài hạn của Xoilac TV là mở rộng phạm vi phát sóng, phủ sóng mọi giải đấu từ lớn đến nhỏ, trở thành nền tảng xem thể thao toàn diện cho người hâm mộ trên khắp thế giới, trong khi vẫn duy trì tiêu chí miễn phí 100% cho mọi người dùng.</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_phat_bong_da_truc_tuyen_o_cac_giai_dau_nao"></span>Xoilac TV phát bóng đá trực tuyến ở các giải đấu nào?<span class="ez-toc-section-end"></span></h2>



<p>Với tham vọng phục vụ trọn vẹn nhu cầu xem bóng đá của khán giả, Xoilac TV phát sóng hầu hết tất cả các giải đấu bóng đá hấp dẫn nhất, từ đấu trường quốc tế đến các giải trong nước. Dù bạn yêu thích những trận cầu đỉnh cao tại châu Âu hay dõi theo bước chân của đội tuyển Việt Nam, Xoilac TV đều có sẵn đường link xem trực tiếp chất lượng cao. Dưới đây là những giải đấu tiêu biểu mà Xoilac TV đang phát sóng:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Ngoai_Hang_Anh_%E2%80%93_English_Premier_League"></span>Ngoại Hạng Anh &#8211; English Premier League<span class="ez-toc-section-end"></span></h3>



<p>Premier League (Ngoại Hạng Anh) – giải đấu bóng đá hấp dẫn nhất hành tinh – luôn có mặt đầy đủ trên Xoilac TV. Đây là nơi quy tụ các câu lạc bộ tên tuổi hàng đầu nước Anh như Manchester United, Manchester City, Liverpool, Chelsea, Arsenal, Tottenham&#8230; Mỗi cuối tuần, người hâm mộ sẽ được thưởng thức các trận cầu nảy lửa của Ngoại Hạng Anh với chất lượng hình ảnh Full HD, âm thanh sống động cùng phần bình luận tiếng Việt cuồng nhiệt. Xoilac TV hiểu rằng Ngoại Hạng Anh có sức hút mãnh liệt, vì vậy trang web luôn cập nhật đủ mọi trận đấu của giải này, bao gồm cả các trận đấu sớm, trận đấu muộn và những đại chiến Super Sunday, giúp bạn không bỏ lỡ bất kỳ khoảnh khắc kịch tính nào.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="715" src="https://xoilac88xg.cc/wp-content/uploads/2025/11/epl-banner-1024x715.jpg" alt="" class="wp-image-2891" srcset="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/epl-banner-1024x715.jpg 1024w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/epl-banner-300x209.jpg 300w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/epl-banner-768x536.jpg 768w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/epl-banner.jpg 1360w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cac_giai_dau_VDQG_hang_dau_Chau_Au_%E2%80%93_La_Liga_Bundesliga_Serie_A_Ligue_1"></span>Các giải đấu VĐQG hàng đầu Châu Âu &#8211; La Liga, Bundesliga, Serie A, Ligue 1<span class="ez-toc-section-end"></span></h3>



<p>Bên cạnh Ngoại Hạng Anh, Xoilac TV còn phát sóng đầy đủ các giải vô địch quốc gia hàng đầu châu Âu khác, bao gồm: La Liga (Tây Ban Nha), Bundesliga (Đức), Serie A (Ý) và Ligue 1 (Pháp). Mỗi giải đấu này đều có sức hấp dẫn và lượng người hâm mộ đông đảo riêng, và Xoilac cam kết mang đến trải nghiệm xem trọn vẹn nhất cho từng giải:</p>



<ul class="wp-block-list">
<li><strong>La Liga</strong>: Theo dõi những bước chân ma thuật của Real Madrid, Barcelona, Atletico Madrid&#8230; trong cuộc đua đến ngôi vô địch Tây Ban Nha. Giải đấu này mang đậm chất kỹ thuật và sự kình địch lịch sử, mỗi tuần đều có các trận El Clásico, derby Madrid hay những màn so tài nảy lửa khác, tất cả đều được trực tiếp trên Xoilac TV với bình luận tiếng Việt hấp dẫn.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bundesliga</strong>: Đắm chìm trong không khí sôi động của bóng đá Đức với các trận đấu của Bayern Munich, Borussia Dortmund, RB Leipzig&#8230; Bundesliga nổi tiếng với lối chơi tấn công cống hiến và khán giả cuồng nhiệt. Xoilac TV mang đến cho bạn trọn bộ các trận đấu Bundesliga mỗi vòng, hình ảnh rõ nét và cập nhật bảng xếp hạng ngay sau mỗi vòng đấu.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Serie A</strong>: Hòa mình cùng không khí cuồng nhiệt của bóng đá Ý, nơi những tên tuổi lẫy lừng như AC Milan, Inter Milan, Juventus, AS Roma&#8230; so tài. Serie A là một trong những giải đấu lâu đời và giàu tính chiến thuật, mỗi trận cầu đỉnh cao đều có trên Xoilac với chất lượng phát sóng tốt nhất, giúp người xem cảm nhận trọn vẹn vẻ đẹp của Calcio Ý.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Ligue 1</strong>: Theo dõi bước chạy của các ngôi sao hàng đầu thế giới tại giải bóng đá vô địch quốc gia Pháp. Sự vươn lên mạnh mẽ của Paris Saint-Germain cùng dàn sao như Mbappé, Neymar, Messi (trước đây) đã làm Ligue 1 hấp dẫn hơn bao giờ hết. Xoilac TV cập nhật đầy đủ các trận đấu Ligue 1 hàng tuần, giúp khán giả Việt Nam dễ dàng theo dõi sự cạnh tranh đang ngày càng nóng lên tại giải đấu này.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xoilac88xg.cc/wp-content/uploads/2025/11/cac-giai-vdqg-hang-dau-chau-au-1024x576.webp" alt="" class="wp-image-2892" srcset="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/cac-giai-vdqg-hang-dau-chau-au-1024x576.webp 1024w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/cac-giai-vdqg-hang-dau-chau-au-300x169.webp 300w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/cac-giai-vdqg-hang-dau-chau-au-768x432.webp 768w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/cac-giai-vdqg-hang-dau-chau-au.webp 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Champions_League_%E2%80%93_Cup_C1_Chau_Au"></span>Champions League &#8211; Cúp C1 Châu Âu<span class="ez-toc-section-end"></span></h3>



<p>UEFA Champions League (Cúp C1 châu Âu) là giải đấu cấp câu lạc bộ danh giá nhất thế giới, nơi hội tụ những đội bóng mạnh nhất châu Âu tranh tài để giành chiếc cúp bạc danh giá. Hiểu được tầm quan trọng của Champions League đối với người hâm mộ, Xoilac TV phát sóng toàn bộ các trận đấu Cúp C1 từ vòng bảng, vòng knock-out cho đến trận chung kết. </p>



<p>Bạn có thể theo dõi những cuộc so tài đỉnh cao giữa các ông lớn như Real Madrid, Barcelona, Bayern Munich, Liverpool, Manchester City, PSG, Juventus&#8230; với chất lượng hình ảnh sắc nét và phần bình luận tiếng Việt sôi động. Mỗi đêm Champions League trên Xoilac TV đều mang đến cho bạn bầu không khí cuồng nhiệt như đang ngồi giữa khán đài sân cỏ châu Âu thực thụ.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="World_Cup_%E2%80%93_Giai_dau_hap_dan_nhat_hanh_tinh"></span>World Cup &#8211; Giải đấu hấp dẫn nhất hành tinh<span class="ez-toc-section-end"></span></h3>



<p>World Cup – ngày hội bóng đá lớn nhất hành tinh – chắc chắn không thể vắng mặt trên Xoilac TV. Giải đấu này diễn ra 4 năm một lần, quy tụ tất cả những đội tuyển quốc gia mạnh nhất và các siêu sao hàng đầu thế giới. Xoilac TV tự hào là kênh trực tiếp đầy đủ mọi trận đấu của World Cup, từ vòng bảng cho đến trận chung kết. Người hâm mộ sẽ được hòa mình vào lễ hội bóng đá toàn cầu, xem những cuộc đối đầu kinh điển giữa các đội tuyển truyền thống như Brazil, Đức, Ý, Argentina, Pháp, Anh&#8230; cũng như chứng kiến hành trình kỳ diệu của những đội bóng “ngựa ô”. Tất cả các trận đấu World Cup trên Xoilac đều được truyền tải đồng bộ với lịch thi đấu thực, không trễ nhịp, đảm bảo bạn thưởng thức trọn vẹn từng giây phút của giải đấu hấp dẫn nhất hành tinh.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Bong_da_Viet_Nam_Vo_dich_quoc_gia_va_DTQG"></span>Bóng đá Việt Nam (Vô địch quốc gia và ĐTQG)<span class="ez-toc-section-end"></span></h3>



<p>Xoilac TV đặc biệt quan tâm đến người hâm mộ bóng đá Việt Nam khi cung cấp đầy đủ các trận đấu có sự góp mặt của Đội tuyển Quốc gia Việt Nam cũng như các giải đấu trong khu vực và quốc nội. Dù đó là những trận cầu đỉnh cao của ĐT Việt Nam tại AFF Cup, SEA Games, Vòng loại World Cup khu vực châu Á, hay các giải trẻ như U23 châu Á, Xoilac TV đều tường thuật trực tiếp với chất lượng tốt và bình luận tiếng Việt. </p>



<p>Không những thế, trang web còn phát sóng cả giải V-League (giải VĐQG Việt Nam) và Cúp Quốc Gia, giúp người xem trong nước không bỏ lỡ những bước tiến của câu lạc bộ và cầu thủ mình yêu thích. Nhờ vậy, Xoilac TV trở thành cầu nối đưa bóng đá nước nhà đến gần hơn với khán giả, lan tỏa niềm đam mê bóng đá Việt đến cộng đồng fan rộng lớn.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://xoilac88xg.cc/wp-content/uploads/2025/11/image-1024x683.png" alt="" class="wp-image-2893" srcset="https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/image-1024x683.png 1024w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/image-300x200.png 300w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/image-768x512.png 768w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/image-1536x1024.png 1536w, https://cdn.xoilac88xg.cc/wp-content/uploads/2025/11/image.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Uu_diem_khi_xem_truc_tiep_bong_da_tai_Xoilac_TV"></span>Ưu điểm khi xem trực tiếp bóng đá tại Xoilac TV<span class="ez-toc-section-end"></span></h2>



<p>Lựa chọn xem bóng đá trực tuyến trên XoilacTV, người hâm mộ sẽ nhận được rất nhiều lợi ích vượt trội so với các kênh xem khác. Dưới đây là những ưu điểm nổi bật khiến trải nghiệm xem bóng đá trên Xoilac TV trở nên được yêu thích nhất:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Hinh_anh_Full_HD_am_thanh_song_dong"></span>Hình ảnh Full HD, âm thanh sống động<span class="ez-toc-section-end"></span></h3>



<p>Chất lượng phát sóng là yếu tố được Xoilac TV ưu tiên hàng đầu. Tất cả các trận đấu đều được truyền tải với độ phân giải Full HD (1080p) sắc nét, thậm chí nhiều trận còn hỗ trợ độ phân giải lên đến 2K hoặc 4K cho hình ảnh vô cùng chi tiết. Bên cạnh hình ảnh rõ nét, âm thanh trên Xoilac TV cũng được xử lý chân thực và sống động, mang đến tiếng reo hò khán giả và tiếng bình luận rõ ràng như thật. </p>



<p>Nhờ có công nghệ streaming tiên tiến và adaptive bitrate (tự điều chỉnh chất lượng theo đường truyền), người xem sẽ có cảm giác như đang ngồi trên khán đài sân vận động thực thụ, khi từng pha bóng, từng tiếng còi và không khí sôi động đều được tái hiện sinh động qua màn hình.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Doi_ngu_BLV_soi_noi_am_hieu_bong_da"></span>Đội ngũ BLV sôi nổi, am hiểu bóng đá<span class="ez-toc-section-end"></span></h3>



<p>Một điểm cộng lớn khi xem bóng đá trên Xoilac TV chính là phần bình luận tiếng Việt miễn phí với chất lượng cao. Trang web sở hữu đội ngũ bình luận viên (BLV) riêng, là những người am hiểu sâu sắc về bóng đá và giàu kinh nghiệm tường thuật. Các BLV của Xoilac không chỉ phân tích trận đấu bằng kiến thức chuyên môn vững vàng, cập nhật thông tin cầu thủ, chiến thuật&#8230; mà còn truyền tải cảm xúc một cách sôi nổi, nhiệt huyết. </p>



<p>Giọng bình luận giàu cảm xúc, đôi lúc hài hước dí dỏm của các BLV giúp tăng thêm tính giải trí và cuốn hút cho trận đấu. Nhờ vậy, người xem vừa nắm bắt được diễn biến trận bóng, vừa được hòa mình vào không khí sôi động mà BLV mang lại.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Duong_truyen_on_dinh_khong_giat_lag"></span>Đường truyền ổn định, không giật lag<span class="ez-toc-section-end"></span></h3>



<p>Xoilac TV tự hào sở hữu hệ thống server và đường truyền hiện đại, được tối ưu để phục vụ lượng lớn người xem cùng lúc mà ít xảy ra tình trạng giật, lag. Nhờ áp dụng công nghệ truyền dẫn tiên tiến và cơ sở hạ tầng máy chủ đặt tại nhiều nơi, các trận đấu trên Xoilac luôn đảm bảo tốc độ mượt mà, ổn định ngay cả trong giờ cao điểm. Những hiện tượng gây khó chịu như đứng hình, nhòe hình hay bị văng khỏi luồng trực tiếp hầu như không xuất hiện.&nbsp;</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Hoan_toan_mien_phi_khong_can_tao_tai_khoan"></span>Hoàn toàn miễn phí, không cần tạo tài khoản<span class="ez-toc-section-end"></span></h3>



<p>Một trong những lợi ích lớn nhất khi xem bóng đá tại Xoilac TV là dịch vụ hoàn toàn miễn phí. Người xem không phải trả bất kỳ chi phí nào để truy cập trận đấu, khác biệt hoàn toàn với một số nền tảng yêu cầu tài khoản VIP hoặc tính phí thuê bao hàng tháng. Bạn không cần đăng ký tài khoản rườm rà – chỉ việc truy cập website và chọn trận muốn xem là có thể thưởng thức ngay lập tức. Điều này giúp trải nghiệm xem bóng đá trở nên thuận tiện và nhanh chóng hơn bao giờ hết.</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Cac_chuyen_muc_huu_ich_khac_tai_Xoilac_TV"></span>Các chuyên mục hữu ích khác tại Xoilac TV<span class="ez-toc-section-end"></span></h2>



<p>Không chỉ dừng lại ở việc phát sóng trực tiếp bóng đá miễn phí, Xoilac TV còn là một trang thông tin bóng đá tổng hợp với nhiều chuyên mục hữu ích. Điều này biến Xoilac trở thành ngôi nhà chung cho người yêu bóng đá – nơi bạn có thể cập nhật mọi thứ liên quan đến môn thể thao vua, từ lịch thi đấu, kết quả cho đến tin tức bên lề. Dưới đây là các chuyên mục nổi bật mà Xoilac TV cung cấp:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lich_thi_dau_bong_da"></span>Lịch thi đấu bóng đá<span class="ez-toc-section-end"></span></h3>



<p>Chuyên mục <strong><a href="/lich-thi-dau">Lịch thi đấu</a></strong> trên Xoilac TV cung cấp lịch bóng đá hôm nay, ngày mai và những ngày sắp tới của tất cả các giải đấu lớn nhỏ. Lịch thi đấu được sắp xếp khoa học theo từng giải và theo ngày, giúp người xem dễ dàng tra cứu thời gian diễn ra trận đấu mình quan tâm. </p>



<p>Thông tin trong lịch thi đấu rất chi tiết, bao gồm: ngày giờ bắt đầu trận đấu theo múi giờ Việt Nam, cặp đội đối đầu, địa điểm (sân vận động tổ chức) và thậm chí cập nhật đội hình dự kiến trước trận</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Bang_xep_hang_bong_da"></span>Bảng xếp hạng bóng đá<span class="ez-toc-section-end"></span></h3>



<p>Sau mỗi loạt trận, chắc hẳn người hâm mộ đều muốn biết thứ hạng các đội bóng của mình trên bảng tổng sắp. Hiểu được điều đó, Xoilac TV mang đến chuyên mục Bảng xếp hạng (BXH) được cập nhật nhanh chóng và chính xác sau khi các trận đấu kết thúc. </p>



<p>Tại đây, bạn có thể xem <strong><a href="/bang-xep-hang">bảng xếp hạng</a></strong> của mọi giải đấu từ Ngoại Hạng Anh, La Liga, Serie A, Bundesliga, Ligue 1 cho đến Champions League, Europa League, hay các giải đấu quốc tế và trong nước. Thông tin BXH được trình bày rõ ràng với đầy đủ các cột dữ liệu quan trọng: vị trí xếp hạng, số trận đã đấu, số trận thắng – hòa – thua, hiệu số bàn thắng, điểm số hiện tại.&nbsp;</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Ket_qua_bong_da_moi_nhat"></span>Kết quả bóng đá mới nhất<span class="ez-toc-section-end"></span></h3>



<p>Chuyên mục <strong><a href="/ket-qua-bong-da">Kết quả bóng đá</a></strong> trên Xoilac TV cho phép người dùng tra cứu kết quả của tất cả các trận đấu vừa diễn ra trong ngày và những ngày trước đó. Ngay sau khi trọng tài thổi còi kết thúc trận, kết quả sẽ được Xoilac cập nhật lên hệ thống một cách tốc độ và chính xác 100%. </p>



<p>Không chỉ đơn thuần hiển thị tỷ số cuối cùng, trang Kết quả còn cung cấp thông tin thống kê chi tiết về trận đấu: cầu thủ ghi bàn và phút ghi bàn, danh sách kiến tạo, số lượng thẻ vàng/thẻ đỏ, số quả phạt góc, phạt đền, tỷ lệ kiểm soát bóng, số cú sút, v.v. Nhờ những dữ liệu đầy đủ này, người xem dù bỏ lỡ trận đấu vẫn có thể hình dung lại diễn biến và đánh giá được màn trình diễn của hai đội.&nbsp;</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Nhan_dinh_truoc_tran"></span>Nhận định trước trận<span class="ez-toc-section-end"></span></h3>



<p>Đối với những người yêu thích phân tích và dự đoán bóng đá, chuyên mục <strong><a href="/nhan-dinh">Nhận định</a></strong> trước trận trên Xoilac TV là nguồn thông tin không thể bỏ qua. Tại đây, đội ngũ chuyên gia bóng đá và chuyên gia soi kèo của Xoilac sẽ đưa ra những bài nhận định chuyên sâu cho các trận đấu sắp diễn ra. </p>



<p>Nội dung nhận định rất đa dạng và có chiều sâu, bao gồm: đánh giá tương quan lực lượng giữa hai đội (phong độ gần đây, lịch sử đối đầu, tình hình chấn thương, đội hình dự kiến), phân tích chiến thuật mà mỗi đội có thể áp dụng, những ngôi sao có thể tạo đột biến, và đặc biệt là dự đoán kết quả trận đấu. Các bài nhận định được tổng hợp từ dữ liệu thống kê và góc nhìn chuyên môn, giúp người xem có thêm thông tin tham khảo trước khi trận đấu bắt đầu.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Cap_nhat_tin_tuc_bong_da_247"></span>Cập nhật tin tức bóng đá 24/7<span class="ez-toc-section-end"></span></h3>



<p>Xoilac TV còn là một trang <strong><a href="/tin-tuc">tin tức bóng đá</a></strong> 24/7 với lượng thông tin phong phú được cập nhật liên tục. Chuyên mục Tin tức bóng đá tổng hợp những tin nóng hổi nhất về bóng đá trong nước và quốc tế mỗi ngày, giúp người hâm mộ dễ dàng nắm bắt mọi diễn biến xung quanh trái bóng tròn. Bạn có thể tìm thấy đa dạng các tin bài, từ tin chuyển nhượng (ví dụ: các thương vụ đình đám, tin đồn mua bán cầu thủ), tin về huấn luyện viên, thông tin bên lề sân cỏ, cho đến những bài phỏng vấn, phát ngôn đáng chú ý. Đội ngũ biên tập của Xoilac TV làm việc chăm chỉ để đảm bảo độ nhanh nhạy và chính xác của tin tức. </p>



<p>Tóm lại, Xoilac TV không chỉ là nơi xem bóng đá trực tiếp miễn phí mà còn cung cấp hệ sinh thái thông tin đầy đủ cho người yêu bóng đá. Từ lịch thi đấu, kết quả, bảng xếp hạng cho tới tin tức và nhận định, tất cả đều có trên Xoilac, giúp bạn “một chạm” có ngay mọi thứ mình cần về bóng đá.</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Cach_xem_truc_tiep_bong_da_tai_Xoilac_TV"></span>Cách xem trực tiếp bóng đá tại Xoilac TV<span class="ez-toc-section-end"></span></h2>



<p>Việc xem trực tiếp bóng đá trên Xoilac TV vô cùng đơn giản và thuận tiện, ngay cả với những người không rành về công nghệ. Chỉ với vài bước cơ bản, bạn đã có thể thưởng thức trọn vẹn 90 phút trận đấu mình mong đợi. Dưới đây là hướng dẫn nhanh cách truy cập và xem bóng đá miễn phí trên Xoilac TV:</p>



<ul class="wp-block-list">
<li><strong>Bước 1:</strong> Chuẩn bị một thiết bị có kết nối Internet ổn định (máy tính để bàn, laptop, máy tính bảng hoặc điện thoại smartphone đều được). Mở trình duyệt web mà bạn ưa dùng (Google Chrome, Cốc Cốc, Firefox, Safari, Opera, v.v.).</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bước 2</strong>: Trên thanh địa chỉ hoặc ô tìm kiếm, gõ từ khóa liên quan để tìm trang chủ Xoilac TV. Bạn có thể tìm bằng các cụm từ như “Xoilac TV”, “trực tiếp bóng đá Xoilac”, “xem bóng đá trực tuyến miễn phí”,&#8230; Kết quả tìm kiếm sẽ hiển thị trang web chính thức của <strong><a href="/">Xoilac TV</a></strong>. Hãy nhấp vào kết quả dẫn tới trang chủ Xoilac TV.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bước 3</strong>: Sau khi truy cập trang chủ Xoilac TV, bạn sẽ thấy giao diện được thiết kế trực quan và thân thiện. Ngay tại trang chủ thường có danh sách các trận đấu đang và sắp diễn ra (ví dụ: trận “Đang trực tiếp”, trận sẽ diễn ra hôm nay, ngày mai,&#8230;).</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bước 4</strong>: Tại trang chủ, kéo xuống danh sách lịch phát sóng hôm nay để tìm trận đấu bạn muốn xem. Danh sách này hiển thị thời gian và cặp đấu của tất cả các trận sẽ diễn ra trong ngày. Khi thấy trận mong muốn, bạn chỉ cần click vào nút “Xem ngay” hoặc tên cặp đấu. Trang web sẽ mở ra trình phát video trực tiếp ngay lập tức.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bước 5</strong>: Thưởng thức trận đấu! Luồng xem trực tiếp trên Xoilac TV sẽ bắt đầu phát khi trận đấu đến giờ. Nếu trận chưa bắt đầu, bạn có thể sẽ thấy đồng hồ đếm ngược hoặc thông tin trước trận. Khi trận diễn ra, bạn có thể tùy chỉnh một số thiết lập trên trình phát như: chọn độ phân giải phù hợp (nếu mạng yếu có thể chọn mức 720p, 480p để mượt hơn, còn nếu mạng mạnh hãy chọn 1080p để có chất lượng tốt nhất), điều chỉnh âm lượng, xem toàn màn hình, v.v.</li>
</ul>



<p>Trong quá trình xem, hãy đảm bảo đường truyền Internet của bạn ổn định (ưu tiên dùng Wi-Fi mạnh hoặc mạng dây, hạn chế dùng 3G/4G chập chờn) để có trải nghiệm tốt nhất.</p>



<p>Lưu ý rằng Xoilac TV tương thích trên hầu hết các thiết bị và hệ điều hành. Bạn có thể xem trên điện thoại di động, máy tính bảng bằng cách truy cập website Xoilac bằng trình duyệt di động, giao diện web sẽ tự điều chỉnh tối ưu cho màn hình nhỏ. Nhờ vậy, bạn có thể mang cả thế giới bóng đá bên mình, xem mọi lúc mọi nơi cực kỳ tiện lợi mà không cần cài đặt ứng dụng riêng.</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="So_sanh_Xoilac_TV_va_cac_nen_tang_truc_tiep_bong_da_khac"></span>So sánh Xoilac TV và các nền tảng trực tiếp bóng đá khác<span class="ez-toc-section-end"></span></h2>



<p>Hiện nay có khá nhiều website cung cấp dịch vụ xem bóng đá trực tuyến miễn phí bên cạnh Xoilac TV, tiêu biểu có thể kể đến như CakhiaTV, LuongSonTV, GaVangTV, ThapCamTV, RakhoiTV, v.v. Mỗi nền tảng đều có những ưu điểm riêng, tuy nhiên không phải trang nào cũng đảm bảo được đầy đủ các yếu tố về chất lượng và trải nghiệm người dùng như Xoilac. </p>



<p>Dưới đây là bảng so sánh nhanh giữa Xoilac TV và một số trang xem bóng đá trực tiếp phổ biến hiện nay dựa trên các tiêu chí quan trọng:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Nền tảng</th><th>Chất lượng hình ảnh</th><th>Độ ổn định đường truyền</th><th>Chất lượng BLV</th><th>Số lượng trận đấu phát sóng mỗi ngày</th></tr></thead><tbody><tr><td><strong>Xoilac TV</strong></td><td>Full HD (hỗ trợ tới 4K), hình ảnh cực kỳ sắc nét</td><td>Rất ổn định, hầu như không xảy ra giật lag</td><td>BLV chuyên nghiệp, am hiểu và hài hước</td><td>Phát sóng toàn bộ các trận đấu (bao gồm cả giải lớn nhỏ, ~20-30+ trận/ngày khi cao điểm)</td></tr><tr><td><strong>CakhiaTV</strong></td><td>Full HD sắc nét</td><td>Ổn định, hiếm khi bị lag</td><td>BLV riêng sôi nổi (ví dụ: Giàng A Phò, Giàng A Lử)</td><td>Hầu hết các trận đấu quan trọng (~15-20 trận/ngày)</td></tr><tr><td><strong>LuongSonTV</strong></td><td>HD đến Full HD (tương đối rõ nét)</td><td>Khá ổn định, đôi lúc giảm chất lượng nếu quá tải</td><td>BLV nhiệt tình, giọng bình dân</td><td>Nhiều trận mỗi ngày (chủ yếu các giải lớn, ~10-15 trận/ngày)</td></tr><tr><td><strong>GaVangTV</strong></td><td>HD (chất lượng ổn định, ít tùy chọn 1080p)</td><td>Tương đối ổn định, có thể gặp lag nhẹ lúc cao điểm</td><td>Có BLV tiếng Việt, chất lượng bình luận ở mức cơ bản</td><td>Số trận trung bình, tập trung giải hot (~5-10 trận/ngày)</td></tr><tr><td><strong>ThapCamTV</strong></td><td>HD (hình ảnh ở mức chấp nhận được)</td><td>Ổn định vừa phải, thỉnh thoảng bị giật khi đông người xem</td><td>BLV không chuyên, bình luận đơn giản</td><td>Ít trận hơn, thường chỉ các trận đáng chú ý (~5-10 trận/ngày)</td></tr><tr><td><strong>Socolive</strong></td><td>Full HD (hình ảnh rõ nét)</td><td>Ổn định, tốc độ tải khá tốt</td><td>BLV vui vẻ, pha trò tạo không khí</td><td>Nhiều trận mỗi ngày (bao quát các giải lớn, ~10-20 trận/ngày)</td></tr></tbody></table></figure>



<p>Đánh giá chung: Từ bảng so sánh trên có thể thấy Xoilac TV nổi trội ở hầu hết các tiêu chí. Nền tảng này cung cấp chất lượng hình ảnh cao nhất (hỗ trợ đến 4K), đường truyền siêu ổn định nhờ hệ thống server tốt, cùng đội ngũ bình luận viên chuyên nghiệp mang lại trải nghiệm sống động. Đặc biệt, Xoilac TV phủ sóng gần như toàn bộ các trận đấu diễn ra mỗi ngày, bao gồm cả những giải đấu nhỏ và trận đấu ít được chú ý, điều mà một số trang khác chưa chắc đã đáp ứng đầy đủ.</p>



<h2 class="wp-block-heading"><span class="ez-toc-section" id="Cau_hoi_thuong_gap_doi_voi_Xoilac_TV"></span>Câu hỏi thường gặp đối với Xoilac TV<span class="ez-toc-section-end"></span></h2>



<p>Dưới đây là một số thắc mắc phổ biến của người dùng mới về dịch vụ Xoilac TV, cùng với lời giải đáp chi tiết giúp bạn hiểu rõ hơn trước khi trải nghiệm:</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_co_mien_phi_khong_Co_can_dang_ky_tai_khoan_de_xem_khong"></span>Xoilac TV có miễn phí không? Có cần đăng ký tài khoản để xem không?<span class="ez-toc-section-end"></span></h3>



<p>Hoàn toàn miễn phí. Xoilac TV là nền tảng xem bóng đá trực tuyến miễn phí 100%, bạn sẽ không mất bất kỳ khoản phí nào để xem các trận đấu tại đây. Đồng thời, trang web không yêu cầu đăng ký tài khoản. Bạn chỉ cần truy cập vào website Xoilac TV, chọn trận đấu mình muốn và bắt đầu xem ngay lập tức.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_co_an_toan_khong_Xem_o_day_co_bi_dinh_virus_khong"></span>Xoilac TV có an toàn không? Xem ở đây có bị dính virus không?<span class="ez-toc-section-end"></span></h3>



<p>Xoilac TV được đánh giá là khá an toàn và uy tín trong cộng đồng người xem bóng đá. Trang web luôn kiểm tra và đảm bảo các đường link phát sóng không chứa mã độc, virus hay phần mềm gián điệp. Ngoài ra, Xoilac không yêu cầu người dùng tải về bất cứ plugin hay ứng dụng lạ nào, bạn chỉ cần xem trực tiếp trên trình duyệt nên nguy cơ nhiễm virus là rất thấp.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_co_xem_duoc_tren_dien_thoai_khong_Ho_tro_nhung_thiet_bi_nao"></span>Xoilac TV có xem được trên điện thoại không? Hỗ trợ những thiết bị nào?<span class="ez-toc-section-end"></span></h3>



<p>Có, bạn hoàn toàn có thể xem Xoilac TV trên điện thoại di động cũng như nhiều thiết bị khác. Trang web Xoilac TV đã được tối ưu giao diện responsive phù hợp với mọi kích thước màn hình, từ máy tính để bàn, laptop cho đến máy tính bảng, smartphone và cả smart TV. Chỉ cần thiết bị của bạn có kết nối Internet và cài một trình duyệt web thông dụng, bạn truy cập vào Xoilac TV là có thể xem ngay mà không cần cài đặt thêm ứng dụng.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_co_nhung_giai_dau_nao_Co_chieu_day_du_cac_tran_khong"></span>Xoilac TV có những giải đấu nào? Có chiếu đầy đủ các trận không?<span class="ez-toc-section-end"></span></h3>



<p>Xoilac TV phát sóng hầu hết tất cả các giải đấu bóng đá lớn nhỏ trên thế giới cũng như trong nước. Từ các giải hàng đầu châu Âu như Ngoại Hạng Anh, Champions League, La Liga, Serie A, Bundesliga, Ligue 1 cho đến các giải Nam Mỹ (Copa America), châu Á (AFC Champions League, Asian Cup) và đặc biệt đầy đủ các trận đấu của đội tuyển Việt Nam (AFF Cup, SEA Games, vòng loại World Cup…). Ngoài ra các giải quốc nội như V-League, Cúp Quốc Gia Việt Nam cũng được Xoilac chú trọng. Có thể nói, bất kỳ trận đấu nào mà bạn muốn xem thì Xoilac TV gần như đều có. Lịch phát sóng trên Xoilac trải dài cả ngày từ sớm tới khuya, bao gồm cả những trận đấu sớm buổi chiều lẫn các trận khuya muộn.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Lam_gi_neu_dang_xem_Xoilac_TV_ma_bi_giat_lag_hoac_khong_xem_duoc"></span>Làm gì nếu đang xem Xoilac TV mà bị giật, lag hoặc không xem được?<span class="ez-toc-section-end"></span></h3>



<p>Trong đa số trường hợp, việc xem bóng đá trên Xoilac TV sẽ diễn ra mượt mà. Tuy nhiên, nếu bạn gặp tình huống giật lag, hãy bình tĩnh thử một số cách khắc phục sau:</p>



<p>Kiểm tra kết nối Internet của bạn: Đảm bảo thiết bị của bạn đang có đường truyền mạng ổn định. Nếu dùng Wi-Fi, hãy xem tín hiệu có mạnh không, hoặc chuyển sang mạng dây nếu có thể. Trường hợp đang dùng 3G/4G, tín hiệu di động yếu có thể gây lag, bạn nên di chuyển đến khu vực sóng tốt hơn.</p>



<p>Giảm chất lượng phát sóng: Xoilac cho phép tùy chọn độ phân giải video. Nếu đang để Full HD nhưng mạng yếu, bạn có thể chọn xuống 720p hoặc 480p để giảm tải và tránh lag.</p>



<p>Tải lại trang hoặc đổi link dự phòng: Nhấn F5 (refresh) trên máy tính hoặc kéo xuống để làm mới trang trên di động.</p>



<h3 class="wp-block-heading"><span class="ez-toc-section" id="Xoilac_TV_co_binh_luan_tieng_Viet_cho_moi_tran_dau_khong"></span>Xoilac TV có bình luận tiếng Việt cho mọi trận đấu không?<span class="ez-toc-section-end"></span></h3>



<p>Xoilac TV cố gắng cung cấp bình luận tiếng Việt cho đa số các trận đấu, đặc biệt là những trận thuộc giải đấu lớn hoặc có đông khán giả. Đội ngũ BLV của Xoilac luôn sẵn sàng tường thuật trực tiếp các trận cầu tâm điểm Ngoại Hạng Anh, Cúp C1, đội tuyển Việt Nam&#8230; Tuy nhiên, với một số trận đấu rất ít người quan tâm hoặc diễn ra trùng giờ quá nhiều trận, có thể sẽ chỉ có âm thanh bình luận gốc (tiếng Anh hoặc tiếng địa phương) hoặc bình luận không chuyên. Dù vậy, những trường hợp này không nhiều. Đa phần trải nghiệm xem trên Xoilac TV đều có bình luận tiếng Việt sôi nổi, giúp khán giả theo dõi dễ dàng và hào hứng hơn.</p>



<p>Ngoài những câu hỏi trên, nếu bạn còn bất kỳ thắc mắc nào khi sử dụng Xoilac TV, đừng ngần ngại liên hệ qua các kênh hỗ trợ của trang. Đội ngũ chăm sóc người xem của Xoilac luôn túc trực và sẵn sàng giải đáp một cách nhanh chóng và tận tình. Chúc bạn có những giây phút xem bóng đá thật vui vẻ và mãn nhãn cùng Xoilac TV!</p>



<p></p>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>
    </main>
    <script>
// Sample data (trận đấu)
const matches = {};
</script>
<!-- Footer -->
    <!-- <footer class="footer">
      <div class="container">
        <div class="footer__content">
          <p style="font-size: 14px">
            Bản quyền bởi
            <a href="#"><span class="text-primary">CakhiaTV</span></a> - All
            rights reserved
          </p>
        </div>
      </div>
    </footer> -->
    
<footer style="background-color: #111; color: #fff; text-align: center;">
    <div style="width: 100%; max-width: 1280px; margin: 0 auto; padding: 20px 30px">
    <div class="footer-logo">
        <img src="/wp-content/uploads/2025/06/logo-xoilac.png" alt="Xoilac TV" style="vertical-align: middle; height: 40px;">
    </div>
  
    <p class="footer-descript">
        <a href="/"><strong style="color: #00aaff;">Xoilac</strong></a> TV - Xôi Lạc TV cung cấp link xem bóng đá trực tuyến Ngoại Hạng Anh, Euro, Bundesliga, VĐQG Tây Ban Nha,... bóng đá Việt Nam. Xem trực tiếp bóng đá Xôi Lạc TV hôm nay cùng dàn BLV tiếng Việt chất lượng.

        </p>

  <nav style="margin: 20px 0;">
    <a href="/gioi-thieu" class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">VỀ CHÚNG TÔI</a>
    <a href="/chinh-sach-bao-mat"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">CHÍNH SÁCH</a>
    <a href="/dieu-khoan-su-dung"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">ĐIỀU KHOẢN</a>
    <a href="/lien-he"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">LIÊN HỆ</a>
    <a href="/ban-quyen"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">BẢN QUYỀN</a>
    <a href="/mien-tru-trach-nhiem"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">MIỄN TRỪ TRÁCH NHIỆM</a>
    <a href="#"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">TUYỂN DỤNG</a>
    <a href="#"class="footer-nav-text" style="color: #00aaff; margin: 0 10px; font-weight: bold;">SITEMAP</a>
  </nav>

  <p class="footer-text">Doanh nghiệp: Xoilac TV</p>
  <p class="footer-text">Chịu trách nhiệm nội dung: <a href="/author/vukhactiep"><span style="color: #00aaff;">Vũ Khắc Tiệp</span></a></p>
  <p class="footer-text">Số điện thoại: 0992575893</p>
  <p class="footer-text">Email: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7800171114191b0c0e561b0d140c0d0a1d381f15191114561b1715">[email&#160;protected]</a></p>
  <p class="footer-text">Địa chỉ: <a href="https://maps.app.goo.gl/cQ1ZUi3u8QSr3mkn9" target="_blank" rel="nofollow"><span style="color: #00aaff;">20B P. Quán Sứ, Hàng Bông, Hoàn Kiếm, Hà Nội, Việt Nam</span></a></p>
  <p class="footer-text">Hoạt động: 00:00–23:59 (hằng ngày)</p>

  <p style="margin-top: 15px;">Hashtag: #xoilac #xoilactv #tructiepbongda #xembongdatructiep #xembongdatructuyen</p>
  

  <div style="margin-top: 15px;">
    <a href="#"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a>
    <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/4.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a>
    <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a>
    <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a>
    <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a>
    <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a>
    <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.getsongbird.net/wp-content/uploads/2025/06/free-tumblr-logo-icon-2434-thumb.png" alt="Tumblr" style="width: 24px; margin: 0 5px;"></a>
  </div>
  </div>
</footer>


    <button onclick="scrollToTop()" id="scrollTopBtn" title="Go to top">
      <svg viewBox="0 0 24 24">
        <path
          d="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
        ></path>
      </svg>
    </button>

    <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://cdn.getsongbird.net/wp-content/themes/cakhiatv/assets/js/main.js"></script>
    
  </body>
    <script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/cakhiatv\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
        <script src="https://getsongbird.net/js/websocket-client.js"></script>
        <style>
        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
        .loading-spinner {
            animation: spin 1s linear infinite;
        }
        #match-list {
            position: relative;
        }
        #match-list > div[style*="display: flex"] {
            width: 100% !important;
            max-width: 100% !important;
        }
        </style>
        <script>
        // Tối ưu: Cache DOM selectors để tránh query lại
        const filterCountCache = {
            countAllType: null,
            countAll: null,
            countElements: {},
            noBlvElement: null,
            liveElement: null,
            hotElement: null,
            todayElement: null,
            tomorrowElement: null,
            initialized: false
        };

        function initFilterCountCache() {
            if (filterCountCache.initialized) return;
            
            filterCountCache.countAllType = document.getElementById('count-all-type');
            filterCountCache.countAll = document.getElementById('count-all');
            filterCountCache.noBlvElement = document.getElementById('noblv-live');
            filterCountCache.liveElement = document.getElementById('count-live');
            filterCountCache.hotElement = document.getElementById('count-hot');
            filterCountCache.todayElement = document.getElementById('count-today');
            filterCountCache.tomorrowElement = document.getElementById('count-tomorrow');
            
            ['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
                filterCountCache.countElements[sport] = document.getElementById(`count-${sport}`);
            });
            
            filterCountCache.initialized = true;
        }

        // Hàm đếm số lượng trận đấu theo bộ lọc - Tối ưu với cached selectors
        function updateFilterCounts(visibleMatchCards, allMatchCards) {
            initFilterCountCache();
            
            if (filterCountCache.countAllType) {
                filterCountCache.countAllType.textContent = allMatchCards.length;
            }

            if (filterCountCache.countAll) {
                filterCountCache.countAll.textContent = visibleMatchCards.length;
            }

            ['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
                const countElement = filterCountCache.countElements[sport];
                if (countElement) {
                    const count = Array.from(allMatchCards).filter(card => card.dataset.sport === sport).length;
                    countElement.textContent = count;
                }
            });

            if (filterCountCache.noBlvElement) {
                const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
                filterCountCache.noBlvElement.textContent = noBlvCount;
            }

            if (filterCountCache.liveElement) {
                const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
                const liveCount = Array.from(visibleMatchCards).filter(card => card.dataset.live === 'true').length - noBlvCount;
                filterCountCache.liveElement.textContent = liveCount;
            }

            if (filterCountCache.hotElement) {
                const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
                const hotCount = Array.from(visibleMatchCards).filter(card => card.dataset.hot === 'true').length - noBlvCount;
                filterCountCache.hotElement.textContent = hotCount;
            }

            const today = new Date().toISOString().split('T')[0];
            const tomorrow = new Date(Date.now() + 86400000).toISOString().split('T')[0];

            if (filterCountCache.todayElement) {
                const todayCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === today).length;
                filterCountCache.todayElement.textContent = todayCount;
            }

            if (filterCountCache.tomorrowElement) {
                const tomorrowCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === tomorrow).length;
                filterCountCache.tomorrowElement.textContent = tomorrowCount;
            }
        }

        // Hàm chuyển đổi ID môn thể thao thành tên
        function sportName(sportId) {
            const sports = {
                1: 'football',
                2: 'basketball',
            };
            return sports[sportId] || 'unknown';
        }

        // Hàm xử lý timestamp
        function fixtime(timestamp) {
            return isNaN(timestamp) ? new Date(timestamp).getTime() : timestamp;
        }

        // Hàm định dạng ngày giờ
        function formatDate(timestamp, format) {
            const date = new Date(timestamp * 1000);
            const day = String(date.getDate()).padStart(2, '0');
            const month = String(date.getMonth() + 1).padStart(2, '0');
            const year = date.getFullYear();
            const hours = String(date.getHours()).padStart(2, '0');
            const minutes = String(date.getMinutes()).padStart(2, '0');
            if (format === 'd/m') return `${day}/${month}`;
            if (format === 'Y-m-d') return `${year}-${month}-${day}`;
            if (format === 'H:i') return `${hours}:${minutes}`;
            return date;
        }

        // Hàm lấy domain API random để tránh Cloudflare rate limit
        function getApiDomain() {
            const domains = [
                'api1.colatv88xd.cc',
    'api2.colatv88xd.cc',
    'api3.colatv88xd.cc',
    'api4.colatv88xd.cc',
    'api5.colatv88xd.cc',
    'api6.colatv88xd.cc',
    'api7.colatv88xd.cc',
    'api8.colatv88xd.cc',
    'api9.colatv88xd.cc',
    'api10.colatv88xd.cc',
    'api11.colatv88xd.cc',
    'api12.colatv88xd.cc',
    'api13.colatv88xd.cc',
    'api14.colatv88xd.cc',
    'api15.colatv88xd.cc',
    'api16.colatv88xd.cc',
    'api17.colatv88xd.cc',
    'api18.colatv88xd.cc',
    'api19.colatv88xd.cc',
    'api20.colatv88xd.cc'
            ];
            
            // Random chọn một domain
            const index = Math.floor(Math.random() * domains.length);
            const selected = domains[index];
            
            return 'https://' + selected;
        }

        // Hàm lấy domain API random cho video-home (pinned-home)
        function getVideoHomeApiDomain() {
            const domains = [
                'api1.colatv88xd.cc',
    'api2.colatv88xd.cc',
    'api3.colatv88xd.cc',
    'api4.colatv88xd.cc',
    'api5.colatv88xd.cc',
    'api6.colatv88xd.cc',
    'api7.colatv88xd.cc',
    'api8.colatv88xd.cc',
    'api9.colatv88xd.cc',
    'api10.colatv88xd.cc',
    'api11.colatv88xd.cc',
    'api12.colatv88xd.cc',
    'api13.colatv88xd.cc',
    'api14.colatv88xd.cc',
    'api15.colatv88xd.cc',
    'api16.colatv88xd.cc',
    'api17.colatv88xd.cc',
    'api18.colatv88xd.cc',
    'api19.colatv88xd.cc',
    'api20.colatv88xd.cc'
            ];
            
            // Random chọn một domain
            const index = Math.floor(Math.random() * domains.length);
            const selected = domains[index];
            
            return 'https://' + selected;
        }

        // Hàm hiển thị loading
        function showLoading() {
            const matchList = getMatchList();
            if (!matchList) return;
            
            // Hiển thị trực tiếp trong match-list, thay thế toàn bộ nội dung
            matchList.innerHTML = `
                <div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center; box-sizing: border-box;">
                    <div class="loading-spinner" style="display: block; width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto;"></div>
                    <p style="margin-top: 20px; color: #666; font-size: 16px; text-align: center; width: 100%;">Đang tải dữ liệu...</p>
                </div>
            `;
        }

        // Hàm hiển thị lỗi với các button đề xuất
        function showErrorWithSuggestions() {
            const matchList = getMatchList();
            if (!matchList) return;
            
            const suggestionLinks = [
                { name: 'iotditr.com', url: 'https://iotditr.com' },
                { name: 'cntsiend.com', url: 'https://cntsiend.com' },
                { name: 'euwygrb.com', url: 'https://euwygrb.com' },
                { name: 'ppoemlg.com', url: 'https://ppoemlg.com' },
                { name: 'eyhtldu.com', url: 'https://eyhtldu.com' }
            ];
            
            const buttonsHtml = suggestionLinks.map(link => 
                `<a href="${link.url}" target="_blank" rel="nofollow" style="display: inline-block; margin: 8px; padding: 12px 24px; background-color: #3498db; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; transition: background-color 0.3s; cursor: pointer;">${link.name}</a>`
            ).join('');
            
            // Hiển thị trực tiếp trong match-list, thay thế toàn bộ nội dung
            matchList.innerHTML = `
                <div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center;">
                    <div style="margin-bottom: 20px;">
                        <svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="#e74c3c" stroke-width="2" style="margin: 0 auto; display: block;">
                            <circle cx="12" cy="12" r="10"></circle>
                            <line x1="12" y1="8" x2="12" y2="12"></line>
                            <line x1="12" y1="16" x2="12.01" y2="16"></line>
                        </svg>
                    </div>
                    <h3 style="color: #e74c3c; margin-bottom: 15px; font-size: 24px; font-weight: bold;">Hệ thống gặp sự cố</h3>
                    <p style="color: #666; margin-bottom: 30px; font-size: 16px; max-width: 500px;">Bạn có thể chọn kênh khác:</p>
                    <div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; max-width: 800px;">
                        ${buttonsHtml}
                    </div>
                </div>
            `;
        }

        // Hàm fetch với timeout
        function fetchWithTimeout(url, timeout = 10000) {
            return Promise.race([
                fetch(url),
                new Promise((_, reject) => 
                    setTimeout(() => reject(new Error('Request timeout')), timeout)
                )
            ]);
        }

        // Hàm lấy dữ liệu trận đấu từ API và render
        async function refreshMatches() {
            const matchList = getMatchList();
            if (!matchList) {
                console.error('Không tìm thấy phần tử match-list');
                return;
            }

            // Hiển thị loading
            showLoading();

            try {
                const apiBase = getApiDomain();
                const response = await fetchWithTimeout(apiBase + '/api/matches?t=' + new Date().getTime(), 10000);
                
                if (!response.ok) {
                    throw new Error('Lỗi khi lấy dữ liệu API: ' + response.status);
                }
                
                const datas = await response.json();
        
                if (!datas.data || typeof datas.data !== 'object') {
                    throw new Error('Cấu trúc dữ liệu API không hợp lệ');
                }
        
                const newMatches = [];
                const matchesByGroup = {}; // Nhóm matches theo competitionName
        
                for (const [key, data] of Object.entries(datas.data)) {
                    // Bảo vệ nếu anchorAppointmentVoList không phải array
                    const anchorList = Array.isArray(data.anchorAppointmentVoList) ? data.anchorAppointmentVoList : [];
                    //if (!anchorList.length) continue;
        
                    // Bỏ các trận "Live streaming"
                    if (anchorList[0]?.nickName === 'Live streaming') continue;
        
                    // Bảo vệ tỉ số
                    const homeScoreArr = Array.isArray(data.homeScore) ? data.homeScore : [];
                    const awayScoreArr = Array.isArray(data.awayScore) ? data.awayScore : [];
                    const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
                    const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
        
                    // Nếu match có house_id khác null, thêm ?houseId=... vào slug
                    let slug = key;
                    if (data.house_id && data.house_id !== null) {
                        slug = `${key}?houseId=${data.house_id}`;
                    }
        
                    const competitionName = data.competitionName || 'NBA';
                    const matchData = {
                        id: 2,
                        slug: slug,
                        sport: sportName(data.sportId),
                        live: data.matchStatus === 2,
                        hot: true,
                        blv: anchorList[0]?.nickName !== 'Live streaming',
                        date: formatDate(fixtime(data.matchTime), 'd/m'),
                        datesearch: formatDate(fixtime(data.matchTime), 'Y-m-d'),
                        hour: formatDate(fixtime(data.matchTime), 'H:i'),
                        competitionName: competitionName,
                        teams: [
                            data.homeTeamName || 'Team C',
                            data.awayTeamName || 'Team D'
                        ],
                        score: `${homeScore}:${awayScore}`,
                        videoUrl: data.videoUrl || 'https://live2.example.com',
                        animationUrl: data.animationUrl || 'https://animation.example.com',
                        data: data
                    };
        
                    newMatches.push(matchData);
        
                    // Nhóm matches theo competitionName
                    if (!matchesByGroup[competitionName]) {
                        matchesByGroup[competitionName] = [];
                    }
                    matchesByGroup[competitionName].push(matchData);
                }
        
                // Gọi hàm render với danh sách trận đấu mới
                renderAllMatches(newMatches);
                filterMatches('parent', newMatches);
            } catch (error) {
                console.error('Lỗi khi làm mới trận đấu:', error);
                // Hiển thị lỗi với các button đề xuất
                showErrorWithSuggestions();
            }
        }

                // Hàm tạo HTML cho một trận đấu
        function createMatchCard(match) {
            // Bảo vệ anchorAppointmentVoList
            const anchorList = Array.isArray(match.data.anchorAppointmentVoList)
                ? match.data.anchorAppointmentVoList
                : [];
        
            // Xử lý slug: nếu slug đã có ?houseId=, giữ nguyên; nếu chưa có, thêm ?houseId= hoặc &houseId=
            const baseSlug = match.slug.includes('?') ? match.slug.split('?')[0] : match.slug;
            const existingParams = match.slug.includes('?') ? match.slug.split('?')[1] : '';
            
            const nicknames = anchorList.map(item => {
                // Nếu slug đã có houseId từ match.data.house_id, dùng slug gốc
                // Nếu không, thêm houseId của anchor này
                if (match.slug.includes('?houseId=')) {
                    return `<a href="https://getsongbird.net/truc-tiep/${match.slug}" rel="nofollow">${item.nickName}</a>`;
                } else {
                    const separator = match.slug.includes('?') ? '&' : '?';
                    return `<a href="https://getsongbird.net/truc-tiep/${baseSlug}${separator}houseId=${item.houseId}" rel="nofollow">${item.nickName}</a>`;
                }
            });
        
            const nicknameString = nicknames.join(' | ');
        
            // Bảo vệ tỉ số (dùng lại match.score nếu muốn)
            const homeScoreArr = Array.isArray(match.data.homeScore) ? match.data.homeScore : [];
            const awayScoreArr = Array.isArray(match.data.awayScore) ? match.data.awayScore : [];
            const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
            const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
        
            return `
                <div class="match-card" data-id="${match.id}" data-sport="${match.sport}" data-live="${match.live}" data-blv="${match.blv}" data-hot="${match.hot}" data-date="${match.datesearch}">
                    <div class="match-card__body">
                        <a href="https://getsongbird.net/truc-tiep/${match.slug}" class="link-match" rel="nofollow"></a>
                        <div class="match-card__header">
                            <div class="match-card__league">
                                <span>${match.data.competitionName}</span>
                            </div>
                            <div class="match-card__status">
                                ${
                                    match.data.matchStatus == 1
                                        ? '<div class="match-card__status text-warning text-uppercase">CHƯA BẮT ĐẦU</div>'
                                        : match.data.matchStatus == 2
                                        ? '<div class="match-card__status streaming">ĐANG TRỰC TIẾP</div>'
                                        : match.data.matchStatus == 3
                                        ? '<span class="btn btn--warning text-uppercase">Tạm ngừng phát sóng</span>'
                                        : match.data.matchStatus == 4
                                        ? '<span class="btn btn--danger text-uppercase">Cấm phát sóng vĩnh viễn</span>'
                                        : '<span class="btn btn--secondary text-uppercase">Không xác định</span>'
                                }
                            </div>
                            <div class="match-card__time"><span class="match-time">${match.hour} - ${match.date}</span></div>
                        </div>
                        <div class="match-card__teams">
                            <div class="team home">
                                <img src="${match.data.homeTeamLogo}" alt="${match.data.homeTeamName}" class="team__logo">
                                <span class="team__name">${match.data.homeTeamName}</span>
                            </div>
                            <div class="match-card__score">${homeScore} - ${awayScore}</div>
                            <div class="team">
                                <img src="${match.data.awayTeamLogo}" alt="${match.data.awayTeamName}" class="team__logo">
                                <span class="team__name">${match.data.awayTeamName}</span>
                            </div>
                        </div>
                        <div class="match-card__info">
                            <div class="match-card__stats">
                                <div class="match-card__stats-content">
                                    ${nicknameString}
                                </div>
                            </div>
                            <div class="match-card__odds">
                                <a href="https://getsongbird.net/truc-tiep/${match.slug}" class="btn btn--primary" rel="nofollow">
                                    <span>XEM NGAY</span>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
            `;
        }

        // Khởi tạo bộ lọc
        let currentFilters = {
            sport: 'all',
            live: false,
            blv: false,
            hot: false,
            commentator: false,
            date: 'all',
            league: 'all'
        };

        // Tối ưu: Preload video metadata để tăng tốc độ load khi click vào match
        const videoPreloadCache = new Map(); // Cache preloaded videos
        function preloadVideoMetadata(videoUrl) {
            if (!videoUrl || videoPreloadCache.has(videoUrl)) {
                return; // Đã preload rồi
            }

            // Mark as preloading
            videoPreloadCache.set(videoUrl, { status: 'loading', timestamp: Date.now() });

            // Preload bằng cách tạo video element và load metadata
            const video = document.createElement('video');
            video.preload = 'metadata'; // Chỉ load metadata, không load toàn bộ video
            video.muted = true;
            video.playsInline = true;
            video.style.display = 'none';
            
            video.addEventListener('loadedmetadata', function() {
                videoPreloadCache.set(videoUrl, { status: 'loaded', timestamp: Date.now() });
                document.body.removeChild(video);
            });

            video.addEventListener('error', function() {
                videoPreloadCache.set(videoUrl, { status: 'error', timestamp: Date.now() });
                if (document.body.contains(video)) {
                    document.body.removeChild(video);
                }
            });

            video.src = videoUrl;
            document.body.appendChild(video);

            // Cleanup cache sau 5 phút
            setTimeout(() => {
                videoPreloadCache.delete(videoUrl);
            }, 5 * 60 * 1000);
        }

        // Tối ưu: Cache match-list selector
        let matchListCache = null;
        function getMatchList() {
            if (!matchListCache) {
                matchListCache = document.getElementById('match-list');
            }
            return matchListCache;
        }

        // Hàm render toàn bộ trận đấu
        function renderAllMatches(matches) {
            const matchList = getMatchList();
            if (!matchList) {
                console.error('Không tìm thấy phần tử match-list');
                return;
            }

            // Xóa danh sách cũ
            matchList.innerHTML = '';

            // Render danh sách mới
            matches.forEach(match => {
                const cardHTML = createMatchCard(match);
                const tempDiv = document.createElement('div');
                tempDiv.innerHTML = cardHTML.trim();
                const cardElement = tempDiv.firstChild;

                // Ẩn các trận không có bình luận viên
                /*if (cardElement.getAttribute('data-blv') === 'false') {
                    cardElement.classList.add('d-none');
                }*/

                // Tối ưu: Preload video metadata khi hover vào match card
                if (match.data && match.data.videoUrl) {
                    let preloadTimeout = null;
                    cardElement.addEventListener('mouseenter', function() {
                        // Debounce: chỉ preload sau 500ms hover
                        preloadTimeout = setTimeout(() => {
                            preloadVideoMetadata(match.data.videoUrl);
                        }, 500);
                    });
                    cardElement.addEventListener('mouseleave', function() {
                        if (preloadTimeout) {
                            clearTimeout(preloadTimeout);
                            preloadTimeout = null;
                        }
                    });
                }

                matchList.appendChild(cardElement);
            });

            // Cập nhật bộ đếm
            const visibleMatches = document.querySelectorAll('.match-card:not(.d-none)');
            updateFilterCounts(visibleMatches, document.querySelectorAll('.match-card'));
        }

        // Hàm lọc trận đấu
        function filterMatches(type, matches) {
            const allCards = document.querySelectorAll('.match-card');

            // Lọc theo môn thể thao
            const sportFiltered = Array.from(allCards).filter(card => {
                const sport = card.dataset.sport;
                return currentFilters.sport === 'all' || sport === currentFilters.sport;
            });

            let finalFiltered = sportFiltered;

            // Áp dụng các bộ lọc khác
            if (currentFilters.live) {
                finalFiltered = finalFiltered.filter(card => card.dataset.live === 'true' && card.dataset.blv === 'true');
            } else if (currentFilters.blv) {
                finalFiltered = finalFiltered.filter(card => card.dataset.blv === 'false');
            } else if (currentFilters.hot) {
                finalFiltered = finalFiltered.filter(card => card.dataset.hot === 'true' && card.dataset.blv === 'true');
            } else if (currentFilters.date !== 'all') {
                finalFiltered = finalFiltered.filter(card => card.dataset.date === currentFilters.date && card.dataset.blv === 'true');
            }

            // Hiển thị/ẩn các thẻ
            allCards.forEach(card => {
                card.classList.toggle('d-none', !finalFiltered.includes(card));
            });

            // Cập nhật bộ đếm
            if (type === 'parent') {
                updateFilterCounts(sportFiltered, allCards);
            } else {
                updateFilterCounts(finalFiltered, allCards);
            }
        }

        // Gắn sự kiện cho nút lọc môn thể thao
        document.querySelectorAll('.sports-filter__button[data-sport]').forEach(button => {
            button.addEventListener('click', () => {
                currentFilters.sport = button.getAttribute('data-sport');
                filterMatches('parent');
            });
        });

        // Gắn sự kiện cho nút lọc con
        document.querySelectorAll('.sports-filter__button_child').forEach(btn => {
            btn.addEventListener('click', function () {
                const filterType = this.getAttribute('data-filter');
                const value = this.getAttribute('data-value');

                if (filterType === 'date') {
                    currentFilters.date = value;
                    currentFilters.live = false;
                    currentFilters.hot = false;
                    currentFilters.blv = false;
                } else if (filterType === 'live') {
                    currentFilters.live = true;
                    currentFilters.date = 'all';
                    currentFilters.hot = false;
                    currentFilters.blv = false;
                } else if (filterType === 'hot') {
                    currentFilters.hot = true;
                    currentFilters.date = 'all';
                    currentFilters.live = false;
                    currentFilters.blv = false;
                } else if (filterType === 'child_all') {
                    currentFilters.live = false;
                    currentFilters.hot = false;
                    currentFilters.blv = false;
                    currentFilters.date = 'all';
                }

                document.querySelectorAll('.sports-filter__button_child').forEach(b => b.classList.remove('active'));
                this.classList.add('active');
                
                filterMatches('child');
            });
        });

        // Gắn sự kiện cho toggle livescore
        const liveToggle = document.getElementById('livescoreToggle');
        if (liveToggle) {
            liveToggle.addEventListener('change', () => {
                currentFilters.live = liveToggle.checked;
                filterMatches('parent');
            });
        }

        // ===== WEBSOCKET INTEGRATION =====
        let wsClient = null;
        let matchesWebSocketConnected = false;
        let fallbackPollingInterval = null;

        // Function để transform WebSocket data format
        function transformWebSocketMatches(data) {
            const newMatches = [];
            
            for (const [key, matchData] of Object.entries(data)) {
                // Logic tương tự như trong refreshMatches()
                const anchorList = Array.isArray(matchData.anchorAppointmentVoList) 
                    ? matchData.anchorAppointmentVoList 
                    : [];
                
                if (anchorList[0]?.nickName === 'Live streaming') continue;
                
                const homeScoreArr = Array.isArray(matchData.homeScore) ? matchData.homeScore : [];
                const awayScoreArr = Array.isArray(matchData.awayScore) ? matchData.awayScore : [];
                const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
                const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
                
                let slug = key;
                if (matchData.house_id && matchData.house_id !== null) {
                    slug = `${key}?houseId=${matchData.house_id}`;
                }
                
                const competitionName = matchData.competitionName || 'NBA';
                const matchDataObj = {
                    id: 2,
                    slug: slug,
                    sport: sportName(matchData.sportId),
                    live: matchData.matchStatus === 2,
                    hot: true,
                    blv: anchorList[0]?.nickName !== 'Live streaming',
                    date: formatDate(fixtime(matchData.matchTime), 'd/m'),
                    datesearch: formatDate(fixtime(matchData.matchTime), 'Y-m-d'),
                    hour: formatDate(fixtime(matchData.matchTime), 'H:i'),
                    competitionName: competitionName,
                    teams: [
                        matchData.homeTeamName || 'Team C',
                        matchData.awayTeamName || 'Team D'
                    ],
                    score: `${homeScore}:${awayScore}`,
                    videoUrl: matchData.videoUrl || 'https://live2.example.com',
                    animationUrl: matchData.animationUrl || 'https://animation.example.com',
                    data: matchData
                };
                
                newMatches.push(matchDataObj);
            }
            
            return newMatches;
        }

        // Function để init WebSocket
        function initMatchesWebSocket() {
            // WebSocket URL - có thể config từ PHP hoặc hardcode
            // Nếu có server-socket service, dùng URL đó
            // Format: wss://server.colatv88xb.cc hoặc ws://localhost:3320
            const wsUrl = 'wss://server.colatv88xb.cc/ws'; // Thay bằng URL thực tế của bạn
            
            // Check nếu RealtimeWebSocketClient đã được load
            if (typeof RealtimeWebSocketClient === 'undefined') {
                console.warn('[Homepage] RealtimeWebSocketClient not loaded, falling back to polling');
                startFallbackPolling();
                return;
            }
            
            wsClient = new RealtimeWebSocketClient(wsUrl);
            
            // Subscribe to matches updates
            wsClient.subscribe('matches:updated', (data) => {
                console.log('[Homepage] Received matches update from WebSocket');
                
                if (data.code === '0000' && data.data) {
                    // Transform data để tương thích với renderAllMatches()
                    const transformedMatches = transformWebSocketMatches(data.data);
                    renderAllMatches(transformedMatches);
                    filterMatches('parent', transformedMatches);
                } else if (data.data && typeof data.data === 'object') {
                    // Nếu data trực tiếp là object (không có code)
                    const transformedMatches = transformWebSocketMatches(data.data);
                    renderAllMatches(transformedMatches);
                    filterMatches('parent', transformedMatches);
                }
            });
            
            // Handle connection events
            wsClient.subscribe('connected', () => {
                console.log('[Homepage] WebSocket connected');
                matchesWebSocketConnected = true;
                // Stop fallback polling nếu đang chạy
                if (fallbackPollingInterval) {
                    clearInterval(fallbackPollingInterval);
                    fallbackPollingInterval = null;
                }
            });
            
            wsClient.subscribe('disconnected', () => {
                console.log('[Homepage] WebSocket disconnected, falling back to polling');
                matchesWebSocketConnected = false;
                startFallbackPolling();
            });
            
            wsClient.subscribe('error', (error) => {
                console.error('[Homepage] WebSocket error:', error);
                matchesWebSocketConnected = false;
                startFallbackPolling();
            });
            
            wsClient.connect();
        }

        // Fallback polling nếu WebSocket fail
        function startFallbackPolling() {
            if (fallbackPollingInterval) return; // Already running
            
            console.log('[Homepage] Starting fallback polling');
            fallbackPollingInterval = setInterval(() => {
                if (!matchesWebSocketConnected) {
                    refreshMatches(); // Use existing function
                } else {
                    // WebSocket reconnected, stop polling
                    clearInterval(fallbackPollingInterval);
                    fallbackPollingInterval = null;
                }
            }, 120000); // 2 minutes như cũ
        }

        // Initial load - dùng API để có data ngay
        refreshMatches();

        // Thử WebSocket trước, fallback to polling nếu fail
        // Delay một chút để đảm bảo RealtimeWebSocketClient đã được load
        setTimeout(() => {
            initMatchesWebSocket();
        }, 500);

        // Cleanup khi page unload
        window.addEventListener('beforeunload', () => {
            if (wsClient) {
                wsClient.disconnect();
            }
            if (fallbackPollingInterval) {
                clearInterval(fallbackPollingInterval);
            }
        });
        </script>
                <style>
        
                                    @media (min-width: 481px) and (max-width: 767px) {
                                        .match-card__status {
                                            max-width: 120px;
                                            font-size: 12px;
                                        }
                                    }
                                    
                                    @media (min-width: 576px) and (max-width: 767px) {
                                        .match-card__league {
                                            max-width: 100px;
                                        }
                                    }
                                    
                                    @media (min-width: 481px) and (max-width: 575px) {
                                        .match-card__header {
                                            flex-direction: row !important;
                                        }
                                        
                                        .match-card__time {
                                            max-width: 100px !important;
                                        }
                                    }
                                    
                                    .top-live-box {
                                        width: 100%;
                                        height: auto;
                                        display: flex;
                                        gap: 8px;
                                    }
                                    .top-live-box .left {
                                        width: 100%;
                                        min-height: 564px;
                                        background-color: #000;
                                        border-radius: 4px;
                                        overflow: hidden;
                                    }
                                    .top-live-box .live-list {
                                        width: 240px;
                                        flex-shrink: 0;
                                    }
                                    .top-live-box .live-list .live-item {
                                        width: 100%;
                                        height: 144px;
                                        margin-bottom: 6px;
                                        cursor: pointer;
                                        border-radius: 4px;
                                        transition: all .1s ease-in-out;
                                        overflow: hidden;
                                        border: 2px solid transparent;
                                        position: relative;
                                    }
                                    .top-live-box .live-list .live-item .anchor-item {
                                        width: 100%;
                                        height: 100%;
                                    }
                                    .el-image img {
                                        display: block;
                                        width: 100%;
                                        height: 100%;
                                        object-fit: cover;
                                    }
                                    .btn-view-truc-tiep {
                                        position: absolute;
                                        top: 70%;
                                        left: 50%;
                                        transform: translate(-50%, -50%);
                                        z-index: 5;
                                        background: #f2152d;
                                        padding: 20px;
                                        border-radius: 30px;
                                        cursor: pointer;
                                        text-align: center;
                                    }
                                    .btn-view-truc-tiep:hover {
                                        opacity: 0.8;
                                    }
                                    .video-player {
                                        position: relative;
                                    }
                                    .top-live-box .live-list .live-item.active{
                                        border: 2px solid #ff0202;
                                    }
                                    
                                    .overlay-click {
                                          position: absolute;
                                          top: 0;
                                          left: 0;
                                          width: 100%;
                                          height: 100%;
                                          z-index: 10;
                                          display: block;
                                                    }
                                    /* Responsive */
    @media screen and (max-width: 1024px) {
        .top-live-box {
            flex-direction: column;
        }

        .top-live-box .left {
            width: 100%;
            min-height: 400px;
        }

        .top-live-box .live-list {
            display: flex;
            width: 100%;
            flex-direction: row;
            flex-wrap: wrap;
            justify-content: center;
            gap: 6px;
            margin-top: 12px;
        }

        .top-live-box .live-list .live-item {
            width: calc(50% - 6px);
            height: 120px;
        }
    }

    @media screen and (max-width: 768px) {
        .top-live-box .left {
            min-height: unset;
        }

        .btn-view-truc-tiep {
            padding: 10px 10px;
            font-size: 12px;
        }

        .top-live-box .live-list .live-item {
            width: calc(50% - 3px);
            height: 100px;
        }
    }

    @media screen and (max-width: 480px) {
        .top-live-box .live-list .live-item {
           width: calc(50% - 3px);
           height: 100px;
        }

        .btn-view-truc-tiep {
            padding: 8px 14px;
            font-size: 13px;
        }
        
        .match-card__body {
            gap: 0.6rem;
        }
    }
                                </style>
                                <script src="//unpkg.byted-static.com/xgplayer/3.0.0-next.1/dist/index.min.js"></script>
                                <script src="//unpkg.com/xgplayer-hls@3.0.0-next.1/dist/index.min.js"></script>
                                <link rel="stylesheet" href="//unpkg.byted-static.com/xgplayer/3.0.0-alpha.100/dist/xgplayer.min.css" />
       <script type="text/javascript">
// Hàm lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
    const domains = [
        'api1.colatv88xd.cc',
        'api2.colatv88xd.cc',
        'api3.colatv88xd.cc',
        'api4.colatv88xd.cc',
        'api5.colatv88xd.cc',
        'api6.colatv88xd.cc',
        'api7.colatv88xd.cc',
        'api8.colatv88xd.cc',
        'api9.colatv88xd.cc',
        'api10.colatv88xd.cc'
    ];
    
    // Random chọn một domain
    const index = Math.floor(Math.random() * domains.length);
    const selected = domains[index];
    
    return 'https://' + selected;
}

document.addEventListener('DOMContentLoaded', function () {
    const apiBase = getVideoHomeApiDomain();
    fetch('https://video-home.colatv88xd.cc/api/pinned-home?t=' + new Date().getTime())
        .then(response => response.json())
        .then(data => {
            const matches = data.pinnedMatches;
            if (!matches || matches.length < 1) {
                console.error('Not enough pinned matches in API response.');
                return;
            }

            const anchors = matches.slice(0, 4).map((match, index) => ({
                streamUrl: match.playStreamAddress2,
                image: match.houseImage,
                name: match.nickName,
                slug: match.slugKey+'?houseId='+match.houseId
            }));

            const streamUrl = anchors[0].streamUrl;

            const liveBoxHtml = `
                <div class="top-live-box container">
                    <div class="left">
                        <div class="video-container">
                            <div class="video-player">
                                <div id="mse" style="width: 100%;"></div>
                                <a href="/truc-tiep/${anchors[0].slug}" class="overlay-click" id="btn-view-link" rel="nofollow"></a>
                                <span class="btn-view-truc-tiep" rel="nofollow">Vào phòng live đang phát sóng</span>
                            </div>
                        </div>
                    </div>
                    <div class="live-list">
                        ${anchors.map((anchor, index) => `
                            <div class="live-item ${index === 0 ? 'active' : ''} live-living-item" data-index="${index}">
                                <div class="anchor-item">
                                    <div class="placeholder img">
                                        <img src="${anchor.image}" alt="${anchor.name}" style="object-fit: cover;">
                                    </div>
                                </div>
                            </div>
                        `).join('')}
                    </div>
                </div>
            `;

            const heroSection = document.querySelector('section.hero');
            if (heroSection) {
                heroSection.insertAdjacentHTML('afterend', liveBoxHtml);

                new Player({
                    plugins: [window.HlsPlayer],
                    id: "mse",
                    ignores: ["time", "progress"],
                    autoplayMuted: true,
                    autoplay: true,
                    playsinline: true,
                    isLive: true,
                    fluid: true,
                    pip: true,
                    muted: true,
                    url: streamUrl
                });

                const liveItems = document.querySelectorAll('.live-item');
                const viewLink = document.getElementById('btn-view-link');

                liveItems.forEach(item => {
                    item.addEventListener('click', () => {
                        const index = parseInt(item.getAttribute('data-index'));
                        liveItems.forEach(i => i.classList.remove('active'));
                        item.classList.add('active');

                        new Player({
                            plugins: [window.HlsPlayer],
                            id: "mse",
                            ignores: ["time", "progress"],
                            autoplayMuted: true,
                            autoplay: true,
                            playsinline: true,
                            isLive: true,
                            fluid: true,
                            pip: true,
                            muted: true,
                            url: anchors[index].streamUrl
                        });

                        viewLink.href = '/truc-tiep/' + anchors[index].slug;
                    });
                });

            } else {
                console.error('Hero section not found.');
            }
        })
        .catch(error => {
            console.error('Error fetching API data:', error);
        });
});
</script>

            <style>
        .aligncenter {
            margin: 0 auto;
           
        }
        .wp-caption {
            max-width: 100%;
        }
       
        footer .container{
            grid-template-columns: 1fr;
        }
    </style>
    <script>
    const mini = document.querySelector('.video-player.is-floating.floating-draggable');
const margin = 8; // cách mép

function clampFloatingVideo() {
    if (!mini) return;

    const rect = mini.getBoundingClientRect();

    let x = rect.left;
    let y = rect.top;

    const vw  = window.innerWidth;
    const vh  = window.innerHeight;

    const minX = margin;
    const minY = margin;           // nếu muốn chừa notch: + safeTop
    const maxX = vw - rect.width  - margin;
    const maxY = vh - rect.height - margin;

    if (x < minX) x = minX;
    if (x > maxX) x = maxX;
    if (y < minY) y = minY;
    if (y > maxY) y = maxY;

    mini.style.left = x + 'px';
    mini.style.top  = y + 'px';
}

// chạy lại mỗi khi viewport thay đổi
window.addEventListener('scroll', clampFloatingVideo);
window.addEventListener('resize', clampFloatingVideo);
window.addEventListener('orientationchange', clampFloatingVideo);

// iOS Safari thanh URL co giãn → nên dùng thêm:
if (window.visualViewport) {
    visualViewport.addEventListener('resize', clampFloatingVideo);
    visualViewport.addEventListener('scroll', clampFloatingVideo);
}
</script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"0","add_request_uri":"","add_self_reference_link":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.getsongbird.net/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.74" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://cdn.getsongbird.net/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://cdn.getsongbird.net/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"0","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>","chamomile_theme_is_on":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://cdn.getsongbird.net/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.74-1746443216" id="ez-toc-js-js"></script>
<script>
// === Catfish Banner Global: lấy từ API /api/catfish-banners (giống React CatfishBanners.jsx) ===
(function() {
  var apiUrl = 'https://api.colatv88xb.cc/api/catfish-banners';
  fetch(apiUrl)
    .then(function(res) { return res.ok ? res.json() : null; })
    .then(function(data) {
      if (!data || !data.success || !data.data || !data.data.length) return;
      
      // === Video catfish overlay (nếu có trong trang watch) ===
      var catfishLink = data.data[0].link_url || '';
      if (catfishLink) {
        var overlayTop = document.querySelector('.video-catfish-overlay-top');
        var overlayBottom = document.querySelector('.video-catfish-overlay');
        if (overlayTop) {
          overlayTop.href = catfishLink;
          overlayTop.style.display = 'block';
        }
        if (overlayBottom) {
          overlayBottom.href = catfishLink;
          overlayBottom.style.display = 'block';
        }
      }
      
      // === Tạo container catfish-banner-global (fixed bottom, giống React) ===
      var wrapper = document.createElement('div');
      wrapper.className = 'catfish-banner-global';
      wrapper.style.cssText = 'position:fixed;bottom:0;left:0;right:0;z-index:9999;display:flex;flex-direction:column;align-items:center;pointer-events:none;width:50%;margin:0 auto;';
      
      // Nút đóng
      var closeBtn = document.createElement('button');
      closeBtn.className = 'catfish-banner-close';
      closeBtn.innerHTML = '✕';
      closeBtn.setAttribute('aria-label', 'Đóng quảng cáo');
      closeBtn.style.cssText = 'position:absolute;top:-24px;right:4px;width:24px;height:24px;background:rgba(0,0,0,0.7);color:#fff;border:none;border-radius:50%;font-size:14px;line-height:24px;text-align:center;cursor:pointer;pointer-events:auto;z-index:10000;padding:0;';
      closeBtn.addEventListener('click', function() { wrapper.remove(); });
      wrapper.appendChild(closeBtn);
      
      // Render banners
      data.data.forEach(function(banner) {
        var a = document.createElement('a');
        a.className = 'catfish-banner-global-item';
        a.href = banner.link_url || '#';
        a.target = '_blank';
        a.rel = 'nofollow noopener noreferrer';
        a.style.cssText = 'display:block;width:100%;pointer-events:auto;line-height:0;cursor:pointer;';
        var img = document.createElement('img');
        img.src = banner.image_url;
        img.alt = banner.name || 'Banner';
        img.style.cssText = 'width:100%;height:auto;display:block;object-fit:contain;';
        a.appendChild(img);
        wrapper.appendChild(a);
      });
      
      document.body.appendChild(wrapper);
      
      // Mobile: full width
      var mq = window.matchMedia('(max-width: 768px)');
      function applyMobile(e) { wrapper.style.width = e.matches ? '100%' : '50%'; }
      applyMobile(mq);
      mq.addListener(applyMobile);
    })
    .catch(function(e) { console.warn('Catfish banner load failed:', e); });
})();
</script>
<script>
// === FIX: Chặn smooth-scroll handlers can thiệp vào catfish overlay ===
(function() {
  document.addEventListener('click', function(e) {
    var overlay = e.target.closest('.video-catfish-overlay, .video-catfish-overlay-top');
    if (!overlay) return;
    var href = overlay.getAttribute('href');
    if (href && href !== '#' && !href.startsWith('#')) {
      e.stopImmediatePropagation();
    }
  }, true);
})();
</script>
    <script>
    document.addEventListener("DOMContentLoaded", function () {
        const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
        while (walker.nextNode()) {
            const node = walker.currentNode;
            if (node.nodeValue.match(/vô địch quốc gia/i)) {
                node.nodeValue = node.nodeValue.replace(/vô địch quốc gia/gi, "VĐQG");
            }
        }
    });
    </script>
    </html>

