Showing source for: https://www.brokenspokeaustintx.com/
Redirects (1): https://privacy-watchdog.io/(301) ⟶ https://www.brokenspokeaustintx.com/
Duration: 0.285478s
Server: TencentEdgeOne

<!DOCTYPE html>
<html lang="vi">

<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" />
  <meta name="google-site-verification" content="K1FjdN85jeZ09k0kpuOzFdnXAEbeIAFoDqk4itZf_5c" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://xoilactvttbd.com/",
"name": "Xoilac TV",
"alternateName": "Xôi Lạc TV",
"logo": "https://cdn.xoilactvttbd.com/wp-content/themes/cakhiatv/assets/images/xoilactv-logo-remove.png",
"image": "https://cdn.xoilactvttbd.com/wp-content/uploads/2025/12/gioi-thieu-xoilac-1.jpg",
"description": "Xoilac tv là kênh xem bóng đá trực tiếp 24/7 được hàng triệu người hâm mộ xem trực tiếp bóng đá tin tưởng mỗi ngày. Hệ thống phát sóng hơn 20 giải đấu lớn nhỏ như Ngoại Hạng Anh, Champions League hay V-League với chất lượng hình ảnh Full HD. Nhờ tốc độ tải nhanh, không giật lag và hoàn toàn miễn phí, xem bd tt xôi lạc tv trở thành lựa chọn hàng đầu của fan bóng đá trực tuyến Việt Nam.
Email: [email protected]
Số điện thoại: 0906 266 798
Website: https://xoilactvttbd.com/
Địa chỉ: 1A Lê Thị Hồng Gấm, Phường Nguyễn Thái Bình, Quận 1, Thành phố Hồ Chí Minh, Vietnam",
"url":"https://xoilactvttbd.com/",
"telephone": "+840906 266 798",
"priceRange": "0",
"address": {
"@type": "PostalAddress",
"streetAddress": "1A Lê Thị Hồng Gấm, Phường Nguyễn Thái Bình, Quận 1, Thành phố Hồ Chí Minh",
"addressLocality": "1A Lê Thị Hồng Gấm, Phường Nguyễn Thái Bình, Quận 1",
"addressRegion": "Hồ Chí Minh",
"postalCode": "700000",
"addressCountry": "Việt Nam"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 10.8768923,
"longitude": 106.642066
},
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"opens": "08:30",
"closes": "17:00"
},
"sameAs": [
"https://www.facebook.com/bk8link6com/",
"https://twitter.com/xoilactvttbdcom",
"https://www.pinterest.com/xoilactvttbdcom/",
"https://www.mixcloud.com/xoilactvttbdcom/",
"https://profile.hatena.ne.jp/xoilactvttbdcom/",
"https://disqus.com/by/xoilactvttbdcom/about/",
"https://www.youtube.com/@xoilactvttbdcom",
"https://gravatar.com/xoilactvttbdcom",
"https://www.goodreads.com/user/show/196036164-xoilactv",
"https://gitlab.com/xoilactvttbdcom",
"https://500px.com/p/xoilactvttbdcom",
"https://sketchfab.com/xoilactvttbdcom",
"https://pixabay.com/es/users/53606318/",
"https://app.readthedocs.org/profiles/xoilactvttbdcom/",
"https://www.gta5-mods.com/users/xoilactvttbdcom",
"https://pastebin.com/u/xoilactvttbdcom",
"https://www.blogger.com/profile/16698412047498595131",
"https://www.deviantart.com/xoilactvttbdcom",
]
}
</script>

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

  gtag('config', 'G-TM77WL0G13');
</script>
<meta name="google-site-verification" content="oEbM1AH6sQrb4n9rnWvATmX57LDoVh6TrC4pqcZ4XUA" />
<meta name="google-site-verification" content="ElyLNSSqjkjfqZ1Ufgwd6RssQxTTrQpvt5T41NGdUrE" />
<meta name="google-site-verification" content="6QeOtO1jbi6Sb4oc6BbI5LatMLXBFVx-02atJuaWlX8" />
<meta name="google-site-verification" content="FanPVpLHG13UWIHhCCFR6N99MpmGRCX1VaA8IwucwhM" />
<meta name="google-site-verification" content="lA6hmr8REj3qL8dVsdT4S2FeSAS3tfwv7PclXuZches" />
<meta name="google-site-verification" content="YosrwGPqHXk1pYeM1uE3J0dapb4FaaTw4ytRXsEVz-s" />  
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [

        {
        "@type": "ListItem",
        "position": 1,
        "name": "Trang chủ",
        "item": "https://www.brokenspokeaustintx.com"
      },

      {
        "@type": "ListItem",
        "position": 2,
        "name": "Xoilactv Link chính thức",
        "item": "https://www.brokenspokeaustintx.com/tin-tuc"
      }

    
  ]
}
</script>
  	<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 - https://rankmath.com/ -->
<title>XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD #1</title>
<meta name="description" content="Xoilac tv là kênh xem bóng đá trực tiếp 24/7 phát sóng trực tiếp bóng đá hơn 20 giải đấu. Chất lượng hình ảnh HD 4K, tốc độ ổn định, xem ttbd trên mọi thiết bị."/>
<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
<link rel="canonical" href="https://www.brokenspokeaustintx.com/" />
<meta property="og:locale" content="vi_VN" />
<meta property="og:type" content="website" />
<meta property="og:title" content="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD #1" />
<meta property="og:description" content="Xoilac tv là kênh xem bóng đá trực tiếp 24/7 phát sóng trực tiếp bóng đá hơn 20 giải đấu. Chất lượng hình ảnh HD 4K, tốc độ ổn định, xem ttbd trên mọi thiết bị." />
<meta property="og:url" content="https://www.brokenspokeaustintx.com/" />
<meta property="og:site_name" content="Xoilac tv" />
<meta property="og:updated_time" content="2026-04-27T10:09:05+07:00" />
<meta property="og:image" content="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg" />
<meta property="og:image:secure_url" content="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg" />
<meta property="og:image:width" content="800" />
<meta property="og:image:height" content="450" />
<meta property="og:image:alt" content="Xoilac" />
<meta property="og:image:type" content="image/jpeg" />
<meta property="article:published_time" content="2025-09-08T14:05:35+07:00" />
<meta property="article:modified_time" content="2026-04-27T10:09:05+07:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD #1" />
<meta name="twitter:description" content="Xoilac tv là kênh xem bóng đá trực tiếp 24/7 phát sóng trực tiếp bóng đá hơn 20 giải đấu. Chất lượng hình ảnh HD 4K, tốc độ ổn định, xem ttbd trên mọi thiết bị." />
<meta name="twitter:image" content="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg" />
<meta name="twitter:label1" content="Được viết bởi" />
<meta name="twitter:data1" content="Admin" />
<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">{"@context":"https://schema.org","@graph":[{"@type":["Organization","Person"],"@id":"https://www.brokenspokeaustintx.com/#person","name":"Xoilac tv","url":"https://xoilactvttbd.com/","address":{"@type":"PostalAddress","addressCountry":"admin"}},{"@type":"WebSite","@id":"https://www.brokenspokeaustintx.com/#website","url":"https://www.brokenspokeaustintx.com","name":"Xoilac tv","publisher":{"@id":"https://www.brokenspokeaustintx.com/#person"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://www.brokenspokeaustintx.com/?s={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"ImageObject","@id":"https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg","url":"https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg","width":"800","height":"450","inLanguage":"vi"},{"@type":"WebPage","@id":"https://www.brokenspokeaustintx.com/#webpage","url":"https://www.brokenspokeaustintx.com/","name":"XOILAC TV - Xem b\u00f3ng \u0111\u00e1 tr\u1ef1c ti\u1ebfp X\u00f4i l\u1ea1c TV - Xem TTBD #1","datePublished":"2025-09-08T14:05:35+07:00","dateModified":"2026-04-27T10:09:05+07:00","about":{"@id":"https://www.brokenspokeaustintx.com/#person"},"isPartOf":{"@id":"https://www.brokenspokeaustintx.com/#website"},"primaryImageOfPage":{"@id":"https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg"},"inLanguage":"vi"},{"@type":"Person","@id":"https://www.brokenspokeaustintx.com/tac-gia/seo/","name":"Admin","url":"https://www.brokenspokeaustintx.com/tac-gia/seo/","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/ad61670926c47f2b732ffa3d7bcfeea37e9afab93cf5d1aaf83df66abc167a69?s=96&amp;d=mm&amp;r=g","url":"https://secure.gravatar.com/avatar/ad61670926c47f2b732ffa3d7bcfeea37e9afab93cf5d1aaf83df66abc167a69?s=96&amp;d=mm&amp;r=g","caption":"Admin","inLanguage":"vi"}},{"@type":"Article","headline":"XOILAC TV - Xem b\u00f3ng \u0111\u00e1 tr\u1ef1c ti\u1ebfp X\u00f4i l\u1ea1c TV - Xem TTBD #1","keywords":"Xoilac","datePublished":"2025-09-08T14:05:35+07:00","dateModified":"2026-04-27T10:09:05+07:00","author":{"@id":"https://www.brokenspokeaustintx.com/tac-gia/seo/","name":"Admin"},"publisher":{"@id":"https://www.brokenspokeaustintx.com/#person"},"description":"Xoilac tv l\u00e0 k\u00eanh xem b\u00f3ng \u0111\u00e1 tr\u1ef1c ti\u1ebfp 24/7 ph\u00e1t s\u00f3ng tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 h\u01a1n 20 gi\u1ea3i \u0111\u1ea5u. Ch\u1ea5t l\u01b0\u1ee3ng h\u00ecnh \u1ea3nh HD 4K, t\u1ed1c \u0111\u1ed9 \u1ed5n \u0111\u1ecbnh, xem ttbd tr\u00ean m\u1ecdi thi\u1ebft b\u1ecb.","name":"XOILAC TV - Xem b\u00f3ng \u0111\u00e1 tr\u1ef1c ti\u1ebfp X\u00f4i l\u1ea1c TV - Xem TTBD #1","@id":"https://www.brokenspokeaustintx.com/#richSnippet","isPartOf":{"@id":"https://www.brokenspokeaustintx.com/#webpage"},"image":{"@id":"https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/xoilac-1.jpg"},"inLanguage":"vi","mainEntityOfPage":{"@id":"https://www.brokenspokeaustintx.com/#webpage"}}]}</script>
<meta name="google-site-verification" content="4V4Nk-aJkfRfz9xHiiWq9Cj2cICQbA4wuFeycxj_QOs" />
<!-- /Plugin SEO WordPress Rank Math -->

<link rel='dns-prefetch' href='//cdn.brokenspokeaustintx.com' />
<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.brokenspokeaustintx.com\/wp-content\/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.brokenspokeaustintx.com/wp-content/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='main-style-css' href='https://cdn.brokenspokeaustintx.com/wp-content/themes/cakhiatv/style.css?ver=1763729868' type='text/css' media='all' />
<link rel="https://api.w.org/" href="https://www.brokenspokeaustintx.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.brokenspokeaustintx.com/wp-json/wp/v2/pages/1040" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.brokenspokeaustintx.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.1" />
<link rel='shortlink' href='https://www.brokenspokeaustintx.com/' />
<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://www.brokenspokeaustintx.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.brokenspokeaustintx.com%2F" />
<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://www.brokenspokeaustintx.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.brokenspokeaustintx.com%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;
            }
            .header .logo img{
                height: 35px;
            }
        }

        @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><link rel="icon" href="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cropped-f6754ec5-1fb5-4392-bb1a-65fcebfd0542-removebg-preview-32x32.png" sizes="32x32" />
<link rel="icon" href="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cropped-f6754ec5-1fb5-4392-bb1a-65fcebfd0542-removebg-preview-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cropped-f6754ec5-1fb5-4392-bb1a-65fcebfd0542-removebg-preview-180x180.png" />
<meta name="msapplication-TileImage" content="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cropped-f6754ec5-1fb5-4392-bb1a-65fcebfd0542-removebg-preview-270x270.png" />
  
<!-- 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>

<script src="//s1.what-on.com/widget/service-v2.js?key=4ourmiEm" async="async"></script>


</head>

<body>
  <!-- Header -->
<header class="header">
    <div class="container">
      <div class="header__inner">
        <a href="/" class="logo">
          <img src="https://cdn.brokenspokeaustintx.com/wp-content/themes/cakhiatv/assets/images/xoilactv-logo-remove.png" alt="XOILAC TV" />
        </a>
        <div style="display: flex; align-items: center">
          <nav class="nav">
            <button class="nav__toggle">
              <img src="https://cdn.brokenspokeaustintx.com/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">Xoilac TV</a></li><li class="nav__item"><a href="https://www.brokenspokeaustintx.com/bang-xep-hang/" class="">Bảng xếp hạng bóng đá</a></li><li class="nav__item"><a href="https://www.brokenspokeaustintx.com/ket-qua-bong-da/" class="">Kết quả bóng đá</a></li><li class="nav__item"><a href="https://www.brokenspokeaustintx.com/lich-thi-dau/" class="">Lịch thi đấu bóng đá</a></li><li class="nav__item"><a href="https://www.brokenspokeaustintx.com/nhan-dinh/" class="">Nhận định</a></li><li class="nav__item"><a href="https://www.brokenspokeaustintx.com/soi-keo/" class="">Soi kèo bóng đá</a></li><li class="nav__item"><a href="https://www.brokenspokeaustintx.com/tin-tuc/" class="">Tin tức</a></li>            </ul>
          </nav>
          <div class="header__buttons">
            <a href="https://refvsbf.com/" target="_blank" class="btn btn--secondary header-button" rel="nofollow">
              <span class="header-text">CƯỢC VSBET</span>
            </a>
            <a href="https://t.me/vsbet88888888888888888" 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">
      <section class="ads">
        <div class="container">
           
        </div>
      </section>
      <!-- Hero Section -->
      <section class="hero">
        <div class="container">
          <div class="hero__content">
            <h1 class="text-uppercase">
      <p><span data-sheets-root="1">Xoilac TV &#8211; Xem bóng đá trực tiếp Xôi lạc TV &#8211; Xem TTBD số #1</span></p>
            </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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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.brokenspokeaustintx.com/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-10-16">
                <div class="sports-filter__button-icon">
                  <img src="https://cdn.brokenspokeaustintx.com/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-10-17">
                <div class="sports-filter__button-icon">
                  <img
                    src="https://cdn.brokenspokeaustintx.com/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" style="">
        <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">
            <p><a href="/">Xoilac</a> tv là kênh xem bóng đá trực tiếp 24/7 được hàng triệu người hâm mộ tin tưởng mỗi ngày. Hệ thống phát sóng hơn 20 giải đấu lớn nhỏ như Ngoại Hạng Anh, Champions League hay V-League với chất lượng hình ảnh Full HD. Nhờ tốc độ tải nhanh, không giật lag và hoàn toàn miễn phí, xem bd tt xôi lạc tv trở thành lựa chọn hàng đầu của fan bóng đá trực tuyến Việt Nam.</p>
<h2>Nguồn gốc ra đời và mục tiêu phát triển xoilac tv</h2>
<div id="attachment_1239" style="width: 810px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-1239" class="size-full wp-image-1239" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/gioi-thieu-xoilac-1.jpg" alt="gioi thieu xoilac 1" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 1" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/gioi-thieu-xoilac-1.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/gioi-thieu-xoilac-1-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/gioi-thieu-xoilac-1-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1239" class="wp-caption-text">Giới thiệu Xôi lạc tv &#8211; Kênh xem bóng đá trực tiếp</p></div>
<p>Xoilac tv chính thức hoạt động từ năm 2018, khởi đầu như một website nhỏ phát sóng các trận đấu bóng đá châu Âu dành cho cộng đồng người hâm mộ tại Việt Nam. Sau 7 năm phát triển, kênh này đã trở thành một trong ba trang xem bóng đá trực tuyến có lượng truy cập cao nhất khu vực Đông Nam Á, đạt trung bình hơn 3 triệu lượt xem/tháng</p>
<p>Ban đầu, ttbd xoi lac chỉ có 2 máy chủ đặt tại Singapore và Việt Nam. Đến nay, hệ thống đã mở rộng lên 11 máy chủ phân phối tín hiệu (CDN) tại nhiều quốc gia châu Á, giúp tốc độ tải video nhanh hơn từ 25–30% so với các trang cùng loại. Nhờ đầu tư công nghệ ổn định và tối ưu đường truyền, người xem có thể trực tuyến bóng đá Full HD với độ trễ trung bình chỉ 1,8 giây, thấp hơn mức trung bình 3,5 giây của các website thể thao thông thường.</p>
<p>Truc tiep bong da xoi lac tv đặt mục tiêu trở thành kênh bóng đá số 1 tại Việt Nam vào năm 2026, mở rộng phạm vi bản quyền phát sóng tới toàn bộ 20 giải đấu lớn nhất thế giới. Từ định hướng “xem nhanh – mượt – ổn định – đầy đủ thông tin”, Xôi lạc tv không ngừng tối ưu hóa hạ tầng và nội dung để mang lại chất lượng trải nghiệm cao nhất cho người hâm mộ.</p>
<h2>Link truy cập xem bóng đá trực tiếp Xôi lạc tv uy tín, không bị chặn</h2>
<div id="attachment_1241" style="width: 810px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-1241" class="size-full wp-image-1241" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/link-xem-xoilac.jpg" alt="link xem" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 2" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/link-xem-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/link-xem-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/link-xem-xoilac-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1241" class="wp-caption-text">Link xem bóng dá xôi lạc trực tiếp uy tín</p></div>
<p>Để đảm bảo người hâm mộ không bỏ lỡ bất kỳ trận cầu đỉnh cao nào, hệ thống xoi lac tv luôn chủ động cập nhật link truy cập chính thức cùng link dự phòng hoạt động song song. Đặc biệt trong mùa World Cup 2026 sắp tới, khi nhu cầu xem bóng đá trực tuyến tăng cao, kênh càng chú trọng tối ưu tốc độ và khả năng xử lý lưu lượng truy cập lớn.</p>
<p>Cơ chế luân chuyển tự động giữa các đường dẫn giúp trải nghiệm xem bóng đá trực tuyến luôn liền mạch và ổn định. Khi đường dẫn chính gặp tình trạng quá tải hoặc bị giới hạn truy cập, hệ thống ngay lập tức kích hoạt link phụ để người xem bd truc tiep có thể chuyển sang trong vài giây.</p>
<p>Nhờ vậy, tín hiệu truyền hình không bị gián đoạn, đảm bảo hình ảnh rõ nét, âm thanh sống động và tốc độ mượt mà dù bạn đang xem trên điện thoại, máy tính bảng hay laptop.</p>
<p><i><strong>Link truy cập chính:</strong></i><a href="https://xoilactvttbd.com/" target="_blank" rel="noopener">https://xoilactvttbd.com/</a></p>
<h2>Các ưu điểm hấp dẫn khi xem bóng đá trực tiếp Xoilac tv</h2>
<div id="attachment_1246" style="width: 810px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-1246" class="size-full wp-image-1246" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/uu-diem-tai-xoilac.jpg" alt="uu diem tai" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 3" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/uu-diem-tai-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/uu-diem-tai-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/uu-diem-tai-xoilac-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1246" class="wp-caption-text">Điểm hấp dẫn thu hút người xem tại xoi lac tv</p></div>
<p>Không chỉ sở hữu hệ thống bản quyền phát sóng rộng, xembd live Xoilac còn gây ấn tượng bởi chất lượng xem bong da trực tuyến ổn định và thân thiện với người dùng. Dưới đây là những ưu điểm khiến hàng triệu người hâm mộ lựa chọn Xoilac tv làm kênh xem bóng đá trực tiếp mỗi ngày.</p>
<h3>Bóng đá trực tiếp Xoilac tv tốc độ tải nhanh và ổn định</h3>
<p>Theo dữ liệu từ GTmetrix, tốc độ tải trung bình của Xôi lac tv trong năm 2024 đạt 1,97 giây, nhanh hơn 42% so với mức trung bình 3,4 giây của các website thể thao tại Việt Nam. Hệ thống máy chủ được phân bổ tại nhiều quốc gia châu Á, giúp cân bằng lưu lượng truy cập khi có lượng người xem lớn.</p>
<p>Trong các trận cầu đỉnh cao như chung kết Champions League hay derby Manchester, Xoilac tv từng ghi nhận tới 2,5 triệu người xem cùng lúc mà vẫn duy trì độ ổn định 99,8%. Đây là tỷ lệ hiếm có ở những trang truc tiep bong da trong khu vực, chứng minh năng lực công nghệ và băng thông vượt trội.</p>
<h3>Hình ảnh bongdatructiep sắc nét, chuẩn Full HD</h3>
<p>Mọi tín hiệu trên xembd line Xoilac tv được truyền tải bằng công nghệ H.265 HEVC giúp tiết kiệm băng thông tới 30% so với chuẩn H.264 trước đây. Nhờ đó, người xem có thể thưởng thức hình ảnh đạt chuẩn 1080p hoặc 4K trên các thiết bị có đường truyền ổn định mà không lo giật hình hay đứng khung.<br />
Tính năng Auto Quality tự động điều chỉnh độ phân giải phù hợp với tốc độ mạng giúp hình ảnh luôn mượt mà trong mọi điều kiện. Hệ thống âm thanh chuẩn 5.1 được tối ưu hóa để mô phỏng không khí sân vận động chân thực nhất, mang đến cảm giác sống động như đang theo dõi trực tiếp ngoài khán đài.</p>
<h3>Xem bóng đá trực tiếp xôi lạc miễn phí, không yêu cầu đăng ký</h3>
<p>Một trong những lý do khiến Xoi lac tv thu hút đông đảo người dùng chính là việc phát sóng hoàn toàn miễn phí. Người xem không cần tạo tài khoản hay đóng phí thành viên mà vẫn được truy cập đầy đủ các trận đấu mỗi ngày.<br />
Theo thống kê nội bộ năm 2024, hơn 68% người dùng truy cập bằng điện thoại di động, 21% bằng máy tính và phần còn lại sử dụng Smart TV. Mỗi trận đấu được truc tiep bong da xoilac cung cấp từ ba đến năm đường dẫn phát sóng, cho phép người xem dễ dàng chuyển server khi đường truyền chậm hoặc quá tải.</p>
<h3>Kho giải đấu bongdatructiep xoilac tv phong phú, cập nhật 24/7</h3>
<p>Kho nội dung của Xôi lạc tv được cập nhật liên tục với trung bình 20–25 trận mỗi ngày, bao gồm cả bóng đá nam, nữ, trẻ và futsal. Các giải đấu lớn như Premier League, Champions League, La Liga, Serie A, Bundesliga hay V-League đều được phát sóng đầy đủ.<br />
Bên cạnh đó, chuyên mục “Trực tiếp hôm nay” và “Kết quả bóng đá” được cập nhật theo thời gian thực, giúp người hâm mộ dễ dàng theo dõi lịch thi đấu, tỷ số và highlight chỉ trong vài thao tác. Chính sự đa dạng này đã giúp xem bong da xoi lac trở thành địa chỉ toàn diện bậc nhất Việt Nam.</p>
<h3>Độ bảo mật cao, đảm bảo an toàn khi truy cập link xôi lạc tv</h3>
<p>Xoi lac tv được nhiều người xem tin tưởng không chỉ nhờ chất lượng phát sóng mượt mà mà còn vì khả năng bảo mật vượt trội. Tất cả các đường dẫn chính thức của hệ thống đều sử dụng giao thức HTTPS chuẩn quốc tế, giúp mã hóa toàn bộ dữ liệu khi truyền tải giữa thiết bị người dùng và máy chủ.</p>
<p>Bên cạnh đó, đội ngũ kỹ thuật của Xôi Lạc TV thường xuyên rà soát, loại bỏ các quảng cáo ẩn và pop-up có dấu hiệu nguy hiểm. Mỗi link trước khi công bố đều được kiểm duyệt kỹ lưỡng để hạn chế tối đa rủi ro nhiễm mã độc hoặc điều hướng sang trang lạ.</p>
<h3>Giao diện trực tiếp bóng đá thân thiện, dễ sử dụng trên mọi thiết bị</h3>
<p>Xoilactv được thiết kế theo cấu trúc “một chạm” giúp truy cập nhanh vào các trận đang phát. Giao diện chia rõ các mục: trực tiếp, lịch thi đấu, kết quả, highlight và tin tức thể thao, giúp người dùng thao tác nhanh chỉ trong vài giây.</p>
<p>Ứng dụng xem bd Xoilac tv ra mắt năm 2023 đạt hơn 1,2 triệu lượt tải trên Google Play và App Store với đánh giá trung bình 4,7/5 sao. Giao diện tối giản, tốc độ phản hồi nhanh và khả năng tương thích đa nền tảng giúp người dùng dễ dàng xem trực tiếp bóng đá hôm nay, dù đang sử dụng điện thoại hay TV thông minh.</p>
<h3>Tính năng xem bóng đá tối ưu trải nghiệm người xem hiện đại</h3>
<p>Không chỉ phát sóng, xôi lạc tv còn bổ sung hàng loạt tính năng mở rộng như bình luận trực tuyến theo thời gian thực, chế độ xem đa góc quay và tùy chọn phát nền khi sử dụng điện thoại. Người xem bd truc tiep keo nha cai có thể vừa theo dõi trận đấu vừa truy cập tin tức, nhận định trong cùng một giao diện.</p>
<p>Hệ thống còn ghi nhớ đội bóng yêu thích, từ đó tự động gửi thông báo trước giờ bóng lăn 10 phút để người dùng không bỏ lỡ bất kỳ trận cầu nào. Chính sự linh hoạt này giúp xoi lac vượt xa các kênh phát sóng truyền thống về trải nghiệm người dùng.</p>
<h2>Xem bóng đá Xoilac tv mua bản quyền phát sóng các giải đấu hàng đầu</h2>
<div id="attachment_1237" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1237" class="size-full wp-image-1237" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/cac-giai-dau-tai-xoilac.jpg" alt="cac giai dau tai" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 4" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cac-giai-dau-tai-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cac-giai-dau-tai-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cac-giai-dau-tai-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1237" class="wp-caption-text">Các giải đấu bóng đá uy tín được xem nhiều nhất</p></div>
<p>Theo thống kê hệ thống năm 2024, xôi lạc tv trực tiếp bóng đá hôm nay phát sóng hơn 1.200 trận đấu mỗi năm, bao phủ 20 giải đấu hàng đầu thế giới. Trong đó, các giải châu Âu chiếm tới 73% tổng lượng xem trực tuyến bóng đá live, còn lại đến từ các giải khu vực và quốc tế.</p>
<h3>Xem bóng đá Ngoại Hạng Anh (Premier League)</h3>
<p>Premier League luôn là giải đấu được người dùng xôi lạc xem nhiều nhất. Giải đấu quy tụ 20 CLB hàng đầu nước Anh và được Xoilac tv phát sóng đầy đủ cả 38 vòng. Người hâm mộ có thể xem trực tiếp bóng đá MU, Chelsea, Tottenham hoặc Newcastle mọi lúc chỉ qua link xem bóng đá trực tiếp trên Xoilac TV.</p>
<h3>Bóng đá trực tiếp UEFA Champions League (Cúp C1 Châu Âu)</h3>
<p>Cúp C1 là sân chơi danh giá nhất cấp CLB, thu hút trung bình 600.000 lượt xem mỗi trận trên kênh xôi lac tv. Những trận bán kết giữa Real Madrid – Bayern Munich hay PSG – Manchester City luôn lọt top “xemtructiepbongda” nhiều nhất tháng. Công nghệ nén hình ảnh H.265 giúp người xem tận hưởng từng pha bóng tốc độ cao trong chất lượng full HD ổn định.</p>
<h3>Xem bd trực tiếp Europa League (Cúp C2 Châu Âu)</h3>
<p>Dù không có sức hút mạnh bằng Champions League, Europa League vẫn chiếm hơn 12% tổng lượng xem trên bóng đá trực tiếp xôi lạc tv. Các đội như Liverpool, Roma, Leverkusen hay Atalanta tạo nên loạt trận hấp dẫn. Người hâm mộ có thể theo dõi kết quả bóng đá hôm nay hoặc xem lại highlight ngay sau mỗi vòng đấu.</p>
<h3>Xem bđ trực tiếp hôm nay La Liga (Tây Ban Nha)</h3>
<p>La Liga luôn là điểm đến quen thuộc của fan bóng đá nghệ thuật. Mùa 2024, các trận của Real Madrid và Barcelona thu hút hơn 550.000 lượt xem trung bình. Tín hiệu truyền hình được Xoilac tv mua bản quyền trọn mùa giúp fan yên tâm xem bong da trực tuyến không lo giật lag.</p>
<h3>Trực tiếp bóng đá miễn phí Serie A (Ý)</h3>
<p>Serie A thu hút người hâm mộ yêu thích chiến thuật và lối chơi kỷ luật. Những trận giữa AC Milan, Inter Milan, Juventus luôn nằm trong top “xem trực tiếp bóng đá full HD hôm nay” trên Xoilac. Theo thống kê, tỷ lệ người xem tại Việt Nam tăng 18% so với năm 2023, cho thấy sức hút ngày càng mạnh của bóng đá Ý trên kênh Xoilac.</p>
<h3>Xoilac tv trực tiếp bóng đá Bundesliga (Đức)</h3>
<p>Giải đấu nổi tiếng với tốc độ cao và phong cách tấn công mạnh mẽ. Các trận có Bayern Munich hoặc Borussia Dortmund thường đạt hơn 400.000 lượt live. Xem bong da truc tiep xoi lac cung cấp đường truyền bóng đá trực tiếp ổn định, giúp fan Bundesliga tận hưởng trọn 90 phút mà không gặp gián đoạn.</p>
<h3>Xem trực tiếp bóng đá xôi lạc Ligue 1 (Pháp)</h3>
<p>Sự xuất hiện của những ngôi sao như Mbappé, Dembele hay Vitinha giúp Ligue 1 tăng lượng người xem trên truc tiep xoi lac tới 27% trong mùa giải 2024.Hệ thống luôn cập nhật link xem bóng đá trực tiếp nhanh nhất để người dùng không bỏ lỡ trận cầu của PSG hay Marseille.</p>
<h3>Xôi lạc tv trực tuyến V-League (Việt Nam)</h3>
<p>Giải đấu quốc nội thu hút mạnh mẽ người xem trong nước. Mùa 2024, trung bình mỗi trận V-League đạt hơn 350.000 lượt xem trực tuyến, gấp đôi so với năm 2022. Fan có thể xem trực tiếp bóng đá hôm nay giữa các đội như Hà Nội FC, Công An Hà Nội, HAGL hay Thanh Hóa ngay tại bong da truc tiep xoi lac mà không cần tải thêm ứng dụng.</p>
<h3>Xôi lạc trực tiếp bóng đá World Cup (FIFA)</h3>
<p>Kỳ World Cup 2022 ghi nhận kỷ lục trên Xôi lạc tv với 3,5 triệu lượt xem trong trận Argentina – Pháp. Đây là cột mốc lớn khẳng định sức mạnh phát sóng toàn cầu của hệ thống. Mỗi kỳ World Cup, Xoilac mở chuyên mục “Bóng đá live” để cập nhật tỷ số, nhận định, lịch thi đấu và highlight nhanh nhất.</p>
<h3>Xôi lạc bóng đá trực tiếp Euro (Giải vô địch châu Âu)</h3>
<p>Euro 2024 là giải đấu được chờ đợi nhất trong mùa hè. Hệ thống Xoilac tv đã chuẩn bị sẵn hạ tầng để đáp ứng hơn 2 triệu lượt truy cập cùng lúc. Fan có thể xem bd truc tuyen mọi lúc, mọi nơi, chọn trận đấu yêu thích và bình luận cùng cộng đồng bóng đá trực tiếp xôi lạc.</p>
<h2>Điểm danh các BLV hàng đầu tại bóng đá trực tuyến xôi lạc tv</h2>
<div id="attachment_1236" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1236" class="size-full wp-image-1236" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/BLV-tai-xoilac.jpg" alt="BLV tai" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 5" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/BLV-tai-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/BLV-tai-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/BLV-tai-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1236" class="wp-caption-text">Đội ngũ BLV chuyên môn và đầy kinh nghiệm</p></div>
<p>Đội ngũ bình luận viên xôi lạc tv trực tiếp bóng đá hôm nay đóng vai trò quan trọng trong việc tạo nên sức hút cho từng trận đấu. Mỗi người đều mang phong cách riêng, góp phần biến mỗi buổi phát sóng thành một trải nghiệm sống động và chân thực.</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><strong>Giàng A Lử</strong>: Gia nhập từ năm 2021, nổi bật với phong cách bình luận cuốn hút, tốc độ nhanh và khả năng xử lý tình huống linh hoạt. Anh thường được mời bình luận các trận Ngoại Hạng Anh và Champions League.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Captain</strong>: Biểu tượng của làng thể thao Việt Nam, có hơn 20 năm kinh nghiệm, từng xuất hiện trong hơn 500 trận phát sóng. Phong cách chững chạc, chuyên sâu giúp khán giả cảm nhận rõ nhịp điệu trận đấu.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Batman</strong>: Gắn bó với xem bóng đá xôi lạc từ những ngày đầu. Anh nổi bật nhờ khả năng phân tích chiến thuật và truyền tải cảm xúc cho người nghe. Những trận có Man City hoặc Real Madrid luôn mang dấu ấn giọng bình luận của anh.</li>
<li style="font-weight: 400;" aria-level="1"><strong>BLV Alex</strong>: Sở hữu chất giọng trẻ trung, hào hứng, được yêu thích trong các trận bóng đá trực tiếp quốc nội. Theo khảo sát năm 2024, anh nằm trong top 5 BLV được người xem bình chọn cao nhất trên hệ thống.</li>
<li style="font-weight: 400;" aria-level="1"><strong>KEVIN</strong>: Phong cách hài hước, thông minh giúp anh tạo bầu không khí thoải mái trong các trận cầu căng thẳng. Anh đảm nhiệm phần lớn các trận Serie A và La Liga.</li>
<li style="font-weight: 400;" aria-level="1"><strong>BLV ZIZU</strong>: Gia nhập năm 2022, từng là chuyên gia phân tích dữ liệu thể thao. Anh được đánh giá cao nhờ khả năng nắm bắt diễn biến nhanh và đưa ra số liệu thống kê chính xác trong từng pha bóng.</li>
<li style="font-weight: 400;" aria-level="1"><strong>BLV MAX</strong>: Đại diện thế hệ trẻ, có lối dẫn dắt sôi nổi, thích hợp với các trận bóng đá live tốc độ cao như Bundesliga hay Ligue 1. Giọng bình luận năng lượng giúp anh thu hút lượng lớn fan trẻ.</li>
<li style="font-weight: 400;" aria-level="1"><strong>BLV ROY</strong>: Chuyên bình luận các trận cầu quốc tế lớn như World Cup và Euro. Anh gây ấn tượng với khả năng dẫn dắt song ngữ Anh – Việt, tạo cảm giác chuyên nghiệp không kém các kênh quốc tế.</li>
</ul>
<p>Nhờ đội ngũ BLV đa dạng phong cách, Xoilac tv trở thành nơi người hâm mộ không chỉ xem trực tiếp bóng đá mà còn cảm nhận được tinh thần thể thao từ từng lời bình luận.</p>
<h2>Các nội dung tiện ích khác khi xem trực tuyến bóng đá  Xoilac tv</h2>
<div id="attachment_1243" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1243" class="size-full wp-image-1243" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/noi-dung-hap-dan-tai-xoilac.jpg" alt="noi dung hap dan tai" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 6" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/noi-dung-hap-dan-tai-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/noi-dung-hap-dan-tai-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/noi-dung-hap-dan-tai-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1243" class="wp-caption-text">Chuyên mục hấp dẫn khi xem bóng đá Xôi lạc tv</p></div>
<p>Không chỉ phát sóng các trận cầu đỉnh cao, trực tiếp bóng đá xôi lạc tv còn phát triển hệ sinh thái tiện ích giúp người xem nắm bắt toàn bộ thông tin bóng đá nhanh chóng, chính xác và đầy đủ nhất.</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><strong>Lịch xem truc tiep bd</strong>: Hệ thống cập nhật lịch phát sóng 24/7, bao gồm hơn 60 giải đấu trong và ngoài nước. Người dùng có thể xem trực tuyến bóng đá hôm nay hoặc tra cứu lịch thi đấu 7 ngày tới ngay trên giao diện chính.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Kết quả bóng đá hôm nay</strong>: Sau khi trận đấu kết thúc, kết quả được cập nhật ngay trong vòng 60 giây. Hệ thống hiển thị đầy đủ tỷ số, cầu thủ ghi bàn, thẻ phạt và thống kê tỷ lệ kiểm soát bóng.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Bảng xếp hạng tại xoi lac tv</strong>: Bảng xếp hạng được đồng bộ dữ liệu tự động từ hệ thống quốc tế, đảm bảo độ chính xác gần như tuyệt đối (sai số &lt;0,1%).</li>
<li style="font-weight: 400;" aria-level="1"><strong>Tin tức thể thao tại bong da xoi lac</strong>: Mỗi ngày, kênh đăng tải hơn 100 tin bóng đá mới, bao gồm tin chuyển nhượng, thông tin cầu thủ, chiến thuật và các sự kiện bên lề.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Nhận định kết quả bóng đá</strong>: Tổng hợp phân tích trước trận từ các chuyên gia lâu năm. Từ lịch sử đối đầu, phong độ đội bóng, thành tích đối đầu được cập nhật liên tục.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Top bàn thắng</strong>: Tructiepbongda xoilac có tính năng tổng hợp highlight bàn thắng đẹp nhất tuần. Video có độ dài từ 2–5 phút, hiển thị chuẩn HD và tải nhanh trên cả 4G lẫn WiFi.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Video highlight</strong>: Sau mỗi trận, video highlight được xuất bản trong vòng 15 phút. Hệ thống cho phép tua nhanh theo mốc thời gian hoặc chọn góc quay ưa thích.</li>
</ul>
<h2>Hướng dẫn xem bóng đá trực tuyến tại xôi lac tv dễ dàng</h2>
<div id="attachment_1238" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1238" class="size-full wp-image-1238" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/cach-xem-xoilac.jpg" alt="cach xem" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 7" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cach-xem-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cach-xem-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/cach-xem-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1238" class="wp-caption-text">Cách xem bóng đá nhanh chóng, dễ dàng tại xoilactv</p></div>
<p>Theo thống kê năm 2024, hơn 85% người dùng theo dõi trực tiếp bóng đá trên thiết bị di động. Chính vì vậy, kênh được tối ưu để người xem có thể truy cập nhanh, không cần cài đặt hay tạo tài khoản.</p>
<h3>Cách truy cập link xem bóng đá trực tiếp  Xoilac</h3>
<p>Để xem trực tiếp bóng đá hôm nay, người dùng chỉ cần nhập địa chỉ xoilactvttbd.com trên trình duyệt. Sau đó, tại trang chủ sẽ hiển thị danh sách các trận đang phát cùng khung giờ phát sóng chi tiết. Mỗi trận đấu đều có từ 3 đến 5 server khác nhau, đảm bảo tốc độ ổn định ngay cả khi lưu lượng truy cập tăng cao.</p>
<p>Các fan có thể chọn theo nhu cầu:</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><strong>Server 1</strong>: ưu tiên tốc độ, ít trễ nhất (chậm 1,5 giây so với truyền hình cáp).</li>
<li style="font-weight: 400;" aria-level="1"><strong>Server 2</strong>: tối ưu cho mạng yếu, hình ảnh 720p.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Server 3</strong>: hỗ trợ bình luận song ngữ Anh – Việt.</li>
</ul>
<p>Người hâm mộ thường tìm kiếm các từ khóa như xoilac 7 net, xoi lac 7, xôi lạc 7, xôi lạc 7.net, truc tiep bong da xoilac 7, xôi lạc chấm com – tất cả đều dẫn đến cùng hệ thống Xoilac TV chính thức.</p>
<h3>Xem bd link trên điện thoại, máy tính, Smart TV</h3>
<p>Xoilac hỗ trợ xem trực tiếp bóng đá trên mọi thiết bị, mang lại sự linh hoạt tối đa cho người dùng ở mọi nơi, mọi lúc.</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><strong>Điện thoại di động</strong>: Ứng dụng xoi lạc tương thích hoàn toàn với Android và iOS, cho phép xem bóng đá full HD, âm thanh rõ nét và tốc độ truyền ổn định. Người dùng có thể tải app Xoi lac tv trực tiếp trên Google Play hoặc App Store, chỉ cần bật chế độ xoay ngang để tận hưởng trọn 90 phút thi đấu không giật lag.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Máy tính và laptop</strong>: Hoạt động tốt trên Windows và macOS, chỉ cần truy cập website xoilac.tv hoặc xoilac.net là có thể xem ngay mà không cần cài thêm phần mềm. Hệ thống tự động tối ưu tốc độ tải video để hình ảnh luôn mượt trong khung 1080p.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Smart TV</strong>: Tích hợp sẵn trình duyệt hỗ trợ HTML5 Player, cho phép phát trực tiếp từ website xoilac truc tiep bong da hoặc kết nối qua tính năng “One-Click Cast”, giúp người xem chuyển hình ảnh từ điện thoại lên tivi chỉ trong 5 giây. Chế độ này giúp thưởng thức bóng đá trực tuyến trên màn hình lớn với chất lượng full HD ổn định.</li>
</ul>
<h2>Tải app xôi lạc tv – Trải nghiệm xem bóng đá mượt mà mọi lúc, mọi nơi</h2>
<div id="attachment_1244" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1244" class="size-full wp-image-1244" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/tai-app-xoilac.jpg" alt="tai app" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 8" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/tai-app-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/tai-app-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/tai-app-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1244" class="wp-caption-text">Hướng dẫn tải app xem bóng đá xoi lac</p></div>
<p>Bên cạnh phiên bản web, xôi lạc tv còn có ứng dụng di động dành riêng cho người hâm mộ muốn theo dõi bóng đá tiện lợi hơn. Ứng dụng được tối ưu hóa cho cả Android và iOS, giúp người dùng xem trực tiếp các trận đấu chỉ bằng một chạm, không cần tìm link mỗi lần truy cập.</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><strong>Bước 1</strong>: Truy cập vào trang chủ chính thức của bong da truc tuyen xoilac hoặc kênh thông báo chính thức để lấy đường dẫn tải ứng dụng an toàn. Hạn chế tìm kiếm qua các trang lạ vì có thể xuất hiện bản giả mạo chứa quảng cáo độc hại.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Bước 2</strong>: Chọn phiên bản phù hợp với hệ điều hành đang sử dụng. Với Android, nhấn “Tải xuống APK” và cho phép cài đặt ứng dụng từ nguồn đáng tin cậy. Với iOS, ứng dụng sẽ chuyển hướng sang App Store để tải trực tiếp.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Bước 3</strong>: Sau khi cài đặt hoàn tất, mở app, đăng nhập hoặc xem ngay mà không cần tạo tài khoản. Giao diện được thiết kế đơn giản, dễ dùng, giúp bạn tìm trận đấu muốn xem chỉ trong vài giây.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Bước 4</strong>: Bật thông báo “Match Alert” để nhận nhắc nhở trước giờ bóng lăn hoặc khi có trận cầu hấp dẫn sắp diễn ra. Đây là tính năng cực kỳ hữu ích giúp người hâm mộ không bỏ lỡ bất kỳ phút giây kịch tính nào.</li>
</ul>
<h2>Mẹo tối ưu tốc độ khi xem xôi lạc trực tiếp bóng đá hôm nay</h2>
<div id="attachment_1242" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1242" class="size-full wp-image-1242" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/meo-xem-xoilac.jpg" alt="meo xem" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 9" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/meo-xem-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/meo-xem-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/meo-xem-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1242" class="wp-caption-text">Lưu ý giúp xem bóng đá xoilac tv mượt mà</p></div>
<p>Để tận hưởng trọn vẹn các trận cầu đỉnh cao trên xôi lac tv truc tiep với chất lượng ổn định nhất, người xem nên áp dụng một vài mẹo nhỏ dưới đây.</p>
<ul>
<li style="font-weight: 400;" aria-level="1">Đóng các tab và ứng dụng không cần thiết khi xem bóng đá trực tuyến. Việc này giúp giảm tải cho CPU, giải phóng RAM và băng thông mạng, nhờ đó video xem xoilac bong da sẽ tải nhanh hơn, hình ảnh rõ nét và hạn chế giật lag trong suốt trận đấu.</li>
<li style="font-weight: 400;" aria-level="1">Ưu tiên sử dụng mạng cáp quang hoặc 4G/5G ổn định. Đường truyền riêng luôn có độ ổn định cao hơn Wi-Fi công cộng vốn dễ nghẽn băng thông. Chỉ cần kết nối mạng mạnh, bạn có thể xem trọn vẹn 90 phút mà không bị đứng hình.</li>
<li style="font-weight: 400;" aria-level="1">Bật chế độ Auto Quality để hệ thống tự điều chỉnh chất lượng video. Tính năng này giúp truc tiep xoilac tự cân bằng độ phân giải phù hợp với tốc độ mạng thực tế, đảm bảo hình ảnh ổn định ngay cả khi kết nối không mạnh.</li>
<li style="font-weight: 400;" aria-level="1">Truy cập sớm 10 phút trước giờ bóng lăn để tránh quá tải. Khi hàng nghìn người cùng vào cùng lúc, hệ thống dễ nghẽn. Vào sớm giúp video tải ổn định hơn, bạn có thể kiểm tra âm thanh, khung hình và chọn server tốt nhất.</li>
<li style="font-weight: 400;" aria-level="1">Kiểm tra tốc độ Internet trước khi xem để đảm bảo chất lượng phát sóng. Mạng từ 10 Mbps trở lên đủ cho 720p, còn từ 20 Mbps trở lên cho 1080p Full HD.</li>
</ul>
<h2>Cách khắc phục link bị chặn khi xem Xôi Lạc TV</h2>
<div id="attachment_1245" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1245" class="size-full wp-image-1245" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/truy-cap-xoilac-khi-bi-chan.jpg" alt="truy cap xoilac khi bi chan" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 10" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/truy-cap-xoilac-khi-bi-chan.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/truy-cap-xoilac-khi-bi-chan-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/truy-cap-xoilac-khi-bi-chan-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1245" class="wp-caption-text">Cách truy cập xoilac khi bị chặn link</p></div>
<p>Không ít người hâm mộ gặp tình trạng không truy cập được Xôi Lạc TV khi trận đấu đang đến hồi gay cấn. Dưới đây là một số cách khắc phục phổ biến giúp bạn tiếp tục thưởng thức trọn vẹn các trận cầu mà không bị gián đoạn.</p>
<h3>Sử dụng link dự phòng chính thức được cập nhật liên tục</h3>
<p>Hệ thống xoilac live luôn chuẩn bị sẵn các đường dẫn dự phòng hoạt động song song với link chính. Khi một tên miền bị chặn hoặc quá tải, người xem chỉ cần chuyển sang link phụ là có thể tiếp tục theo dõi trận đấu ngay lập tức. Cách này vừa an toàn vừa giúp duy trì chất lượng hình ảnh và tốc độ ổn định trong suốt quá trình xem.</p>
<h3>Xóa bộ nhớ cache hoặc đổi trình duyệt khi gặp lỗi tải trang</h3>
<p>Nhiều người không biết rằng dữ liệu cũ lưu trong trình duyệt có thể khiến việc truy cập  tructiepbongda xoilac tv bị gián đoạn. Việc xóa cache, cookie hoặc đổi sang trình duyệt khác như Chrome, Firefox hay Edge thường giúp khắc phục nhanh lỗi không tải được trang. Đây là thao tác đơn giản nhưng hiệu quả, phù hợp cho cả máy tính và điện thoại.</p>
<h3>Sử dụng VPN để vượt chặn truy cập khu vực</h3>
<p>Trong trường hợp một số khu vực bị hạn chế truy cập Xôi Lạc TV, người dùng có thể cài đặt VPN để thay đổi địa chỉ IP. Công cụ này giúp vượt qua rào cản vùng miền, truy cập ổn định mà không làm giảm chất lượng video. Tuy nhiên, bạn nên chọn VPN uy tín để đảm bảo an toàn thông tin cá nhân.</p>
<h3>Truy cập qua ứng dụng hoặc trang tích hợp Xôi Lạc TV</h3>
<p>Ứng dụng truc tiếp bóng đá xoilac trên di động giúp người dùng xem dễ dàng hơn. Cách này giúp hạn chế tình trạng nghẽn mạng và tăng độ ổn định khi số lượng người truy cập quá lớn trong các trận cầu đỉnh cao.</p>
<h2>Một số trang web xem bd live cùng hệ thống xôilac tv</h2>
<div id="attachment_1240" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-1240" class="size-full wp-image-1240" src="https://xoilactvttbd.com/wp-content/uploads/2025/12/kenh-du-phong-xoilac.jpg" alt="kenh du phong" width="800" height="450" title="XOILAC TV - Xem bóng đá trực tiếp Xôi lạc TV - Xem TTBD số #1 11" srcset="https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/kenh-du-phong-xoilac.jpg 800w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/kenh-du-phong-xoilac-300x169.jpg 300w, https://cdn.brokenspokeaustintx.com/wp-content/uploads/2025/12/kenh-du-phong-xoilac-768x432.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-1240" class="wp-caption-text">Kênh xem bóng đá trực tiếp cùng hệ thống xoilac tv</p></div>
<p>Hệ thống không chỉ giới hạn trong một trang duy nhất mà còn mở rộng thành nhiều kênh phụ trợ. Mỗi trang đảm nhận vai trò riêng, giúp phân luồng nội dung và tối ưu trải nghiệm xem bóng đá trực tuyến cho hàng triệu người dùng tại Việt Nam.</p>
<ul>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 1</strong>: Xôi lạc 1 là kênh chuyên phát sóng các trận Ngoại Hạng Anh và FA Cup. Mỗi tuần xem bóng đá trực tiếp xôi lạc 1 đạt trung bình hơn 800.000 lượt xem.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 2</strong>: Xôi lạc 2 tập trung phát song song Champions League và Europa League. Xoi lac 2  được tối ưu riêng giúp tốc độ tải nhanh nhất toàn mạng lưới.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 3</strong>: Xôi lạc 3 chuyên phát sóng các trận La Liga và Serie A. Xoi lac 3 hỗ trợ xem trực tiếp trên Smart TV với giao diện điều hướng thân thiện.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 5</strong>: Kênh Xoilac 5 đảm nhiệm các trận thuộc Bundesliga và Ligue 1, nơi quy tụ những CLB mạnh như Bayern Munich hay PSG.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 6</strong>: Xoilac 6 là kênh thử nghiệm công nghệ phát sóng 4K Ultra HD đầu tiên trong hệ thống. Chất lượng hình ảnh cực sắc nét giúp người xem cảm nhận rõ từng pha bóng.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 7</strong>: Trực tiếp bóng đá xoilac 7 là kênh quốc tế phổ biến nhất trong hệ thống, chuyên phát các trận giao hữu, World Cup, Euro và Copa America.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 8</strong>: Kênh hoạt động như dự phòng, ưu tiên phát sóng các trận thuộc V-League, Cúp Quốc Gia và AFC Champions League.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac 17</strong>: Đây là trang liên kết quốc tế, phục vụ khu vực Đông Nam Á với giao diện song ngữ Anh – Việt.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac Net</strong>: Xoilac nét là là kênh phụ quan trọng giúp người hâm mộ xem live trực tiếp các trận bóng đá trong và ngoài nước.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac TV1</strong>: Kênh này được thiết kế dành riêng cho người dùng mobile, tối ưu hóa tốc độ cho mạng 4G và 5G.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac TV 90 phút</strong>: Kênh xembd video đạt chuẩn HD và hiển thị mượt trên mọi nền tảng. Đây là nơi lý tưởng cho người xem bỏ lỡ trực tiếp nhưng vẫn muốn theo dõi lại diễn biến chính.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Xoilac TV Live</strong>: Xôi lạc chấm tivi  phát song song các trận bóng đá quốc tế trong khung giờ cao điểm, giúp giảm tải cho các kênh chính khi lượng truy cập tăng mạnh.</li>
<li style="font-weight: 400;" aria-level="1"><strong>Mì tôm xôi lạc</strong>: Kênh phát sóng phụ nằm trong hệ thống Xoilac, được nhiều người dùng lựa chọn nhờ tốc độ tải nhanh và khả năng hoạt động ổn định trên cả di động lẫn máy tính.</li>
</ul>
<h2>Kết luận</h2>
<p>Xoilac tv là kênh xem <a href="/"><strong>trực tiếp bóng đá</strong></a> hàng đầu đáp ứng mọi nhu cầu xem bóng đá trực tuyến của người hâm mộ Việt Nam. Từ tốc độ phát sóng nhanh, hình ảnh full HD, kho trận đấu đa dạng và mạng lưới kênh phụ đa dạng, xôi lạc xứng đáng là lựa chọn số một cho mọi fan thể thao. Trải nghiệm xem bong da truc tiep xoilac trọn vẹn và an toàn nhất ngay hôm nay.</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;  padding: 30px 15px;">
    <div class="footer-column">
         <div class="footer-logo">
            <img src="https://cdn.brokenspokeaustintx.com/wp-content/themes/cakhiatv/assets/images/xoilactv-logo-remove.png" alt="Xoilac TV" style="vertical-align: middle; height: 90px;">
        </div>
        
        <div id="4ourmiEm" style="text-align:center"></div>

        <p class="footer-descript">
            <p><strong><a href="/">Xoilactv</a></strong> là nền tảng xem trực tiếp bóng đá hàng đầu, mang đến cho người hâm mộ trải nghiệm giải trí trọn vẹn với chất lượng hình ảnh sắc nét và tốc độ truyền tải ổn định. Tại xoilactv, người xem bóng đá trực tuyến có thể theo dõi đầy đủ các giải đấu lớn nhỏ cùng nhiều trận cầu đỉnh cao trong và nước. Xoilac tv cập nhật nhanh lịch thi đấu, kết quả bóng đá, BXH, tin tức chuyển nhượng.</p>
        </p>

       
    </div>

    <div class="footer-column">
        <div class="footer-title">
            DANH MỤC
        </div>
          <ul>
<li><strong><a href="/dieu-khoan-su-dung">Điều khoản sử dụng</a></strong></li>
<li><strong><a href="/chinh-sach-bao-mat">Chính sách bảo mật</a></strong></li>
<li><strong><a href="/mien-tru-trach-nhiem">Miễn trừ trách nhiệm</a></strong></li>
<li><a href="/lien-he"><strong>Liên hệ</strong></a></li>
</ul>
    </div>

       <div class="footer-column">
        <div class="footer-title">
            LIÊN HỆ
        </div>
              <p class="footer-text"><strong>Tên doanh nghiệp</strong>: <strong>XOILACTV</strong></p>
<p class="footer-text"><strong>Số điện thoại</strong>: 0906 266 798</p>
<p class="footer-text"><strong>Email</strong>: [email protected]</p>
<p class="footer-text"><strong>Địa chỉ</strong>: <a href="https://maps.app.goo.gl/y9DV3NJMto7ZXfZo6">1A Lê Thị Hồng Gấm, Phường Nguyễn Thái Bình, Quận 1, Thành phố Hồ Chí Minh, Vietnam</a></p>
<p class="footer-text"><strong>Hoạt động</strong>: 00:00–23:59 (hằng ngày)</p>
     <div style="margin-top: 15px;">
        <a href="#"><img src="https://cdn.brokenspokeaustintx.com/wp-content/wp-content/uploads/2025/04/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a>
        <a href="#" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/twitter_x-logo-freelogovectors.net_.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a>
        <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.brokenspokeaustintx.com/wp-content/wp-content/uploads/2025/04/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a>
        <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.brokenspokeaustintx.com/wp-content/wp-content/uploads/2025/04/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a>
        <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.brokenspokeaustintx.com/wp-content/wp-content/uploads/2025/04/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a>
        <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.brokenspokeaustintx.com/wp-content/wp-content/uploads/2025/04/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a>
        <a href="#" rel="nofollow" target="_blank"><img src="https://cdn.brokenspokeaustintx.com/wp-content/wp-content/uploads/2025/04/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 src="https://cdn.brokenspokeaustintx.com/wp-content/themes/cakhiatv/assets/js/main.js"></script>

</body>
    <script>
        if ('serviceWorker' in navigator) {
            window.addEventListener('load', function () {
                navigator.serviceWorker.register('/sw.js')
                    .then(function (reg) { /*console.log('[SW] ✅ Registered, scope:', reg.scope);*/ })
                    .catch(function (err) { /*console.warn('[SW] Registration failed:', err);*/ });
            });
        }
    </script>
    <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://www.brokenspokeaustintx.com/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>
            // ─── LocalStorage Cache (giống colatv40.live) ────────────────
            const LS_MATCHES_KEY = 'colatv_matches_v1';
            const LS_MATCHES_TTL = 10 * 60 * 1000; // 10 phút

            function loadMatchesFromCache() {
                try {
                    const raw = localStorage.getItem(LS_MATCHES_KEY);
                    if (!raw) return null;
                    const { data, ts } = JSON.parse(raw);
                    if (!data || !Array.isArray(data) || data.length === 0) return null;
                    if (Date.now() - ts > LS_MATCHES_TTL) return null;
                    return data;
                } catch { return null; }
            }

            function saveMatchesToCache(matches) {
                try {
                    if (!matches || matches.length === 0) return;
                    localStorage.setItem(LS_MATCHES_KEY, JSON.stringify({ data: matches, ts: Date.now() }));
                } catch { /* localStorage full, bỏ qua */ }
            }
            // ─────────────────────────────────────────────────────────────

            // 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 = ['api.gvapi.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 = ['video-home.gvapi.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;
                }

                // Chỉ hiển thị loading nếu chưa có data từ cache
                if (!matchList.querySelector('.match-card')) {
                    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);
                    saveMatchesToCache(newMatches); // 
                } catch (error) {
                    console.error('Lỗi khi làm mới trận đấu:', error);
                    // Đã loại bỏ showErrorWithSuggestions() để không ghi đè giao diện SSR nếu API thất bại ở lần gọi đầu tiên.
                    // Hệ thống sẽ âm thầm giữ nguyên giao diện SSR và đợi Socket cập nhật.
                }
            }

            function createMatchCard(match) {
                // Bảo vệ dữ liệu, tránh crash nếu cache cũ thiếu data
                if (!match || !match.data) return '';

                // Bảo vệ anchorAppointmentVoList
                const anchorList = Array.isArray(match.data.anchorAppointmentVoList)
                    ? match.data.anchorAppointmentVoList
                    : [];

                // Xử lý slug an toàn
                const slugStr = match.slug || '';
                const baseSlug = slugStr.includes('?') ? slugStr.split('?')[0] : slugStr;

                const nicknames = anchorList.map(item => {
                    const itemHouseId = item.houseId || '';
                    if (itemHouseId !== '') {
                        const separator = baseSlug.includes('?') ? '&' : '?';
                        return `<a href="https://www.brokenspokeaustintx.com/truc-tiep/${baseSlug}${separator}houseId=${itemHouseId}" rel="nofollow">${item.nickName}</a>`;
                    } else {
                        return `<a href="https://www.brokenspokeaustintx.com/truc-tiep/${slugStr}" 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://www.brokenspokeaustintx.com/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://www.brokenspokeaustintx.com/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 => {
                    if (!match || !match.data) return; // Bỏ qua match lỗi

                    const cardHTML = createMatchCard(match);
                    if (!cardHTML) return; // Bỏ qua nếu không tạo được thẻ
                    
                    const tempDiv = document.createElement('div');
                    tempDiv.innerHTML = cardHTML.trim();
                    const cardElement = tempDiv.firstChild;
                    if (!cardElement) return;

                    // Ẩ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.gvapi.cc hoặc ws://localhost:3320
                const wsUrl = 'wss://server.ws-xyz.com/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);
                        saveMatchesToCache(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);
                        saveMatchesToCache(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

                //('[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ũ
            }

            // Nếu SSR đã render HTML, ta không cần nạp từ localStorage hay fetch API lần đầu nữa (tránh nháy màn hình)
            const ssrCardsCount = document.querySelectorAll('.match-card').length;
            
            if (ssrCardsCount === 0) {
                // Thử load từ cache trước nếu không có SSR
                const cachedMatches = loadMatchesFromCache();
                if (cachedMatches && cachedMatches.length > 0) {
                    try {
                        renderAllMatches(cachedMatches);
                        filterMatches('parent', cachedMatches);
                    } catch (error) {
                        console.error('[Cache Render Error]', error);
                    }
                }

                // Fetch fresh data từ API (cập nhật + ghi đè cache)
                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>
        .home-banner-slider {
            width: 100%;
            margin: 15px 0;
            border-radius: 8px;
            overflow: hidden;
            position: relative;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
            display: none;
            /* Hidden by default until loaded */
            z-index: 10;
        }

        .home-banner-track {
            display: flex;
            transition: transform 0.5s ease-in-out;
            height: 100%;
        }

        .home-banner-slide {
            min-width: 100%;
            display: block;
            text-decoration: none;
        }

        .home-banner-slide img {
            width: 100%;
            height: auto;
            display: block;
            object-fit: cover;
        }

        .home-banner-dots {
            position: absolute;
            bottom: 10px;
            left: 0;
            right: 0;
            display: flex;
            justify-content: center;
            gap: 6px;
        }

        .home-banner-dot {
            width: 8px;
            height: 8px;
            background: rgba(255, 255, 255, 0.5);
            border-radius: 50%;
            cursor: pointer;
            transition: background 0.3s;
        }

        .home-banner-dot.active {
            background: white;
            transform: scale(1.2);
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', async function () {
            try {
                // Fetch settings
                const res = await fetch('https://api.gvapi.cc/api/settings');
                const data = await res.json();

                if (data.success && data.home_banners && data.home_banners.length > 0) {
                    const banners = data.home_banners.sort((a, b) => a.order - b.order);

                    // Create slider container
                    const sliderContainer = document.createElement('div');
                    sliderContainer.className = 'home-banner-slider';

                    const track = document.createElement('div');
                    track.className = 'home-banner-track';

                    const dotsContainer = document.createElement('div');
                    dotsContainer.className = 'home-banner-dots';

                    banners.forEach((banner, index) => {
                        // Slide
                        const slide = document.createElement('a');
                        slide.className = 'home-banner-slide';
                        slide.href = banner.link_url && banner.link_url !== '#' ? banner.link_url : 'javascript:void(0)';
                        slide.target = banner.link_url && banner.link_url !== '#' ? '_blank' : '_self';

                        const img = document.createElement('img');
                        img.src = banner.image_url;
                        img.alt = banner.name || 'Banner';

                        slide.appendChild(img);
                        track.appendChild(slide);

                        // Dot
                        const dot = document.createElement('div');
                        dot.className = 'home-banner-dot';
                        if (index === 0) dot.classList.add('active');

                        dot.addEventListener('click', () => {
                            goToSlide(index);
                        });

                        dotsContainer.appendChild(dot);
                    });

                    sliderContainer.appendChild(track);
                    if (banners.length > 1) {
                        sliderContainer.appendChild(dotsContainer);
                    }

                    // Inject into DOM (after h1 in hero content)
                    const h1 = document.querySelector('.hero__content h1');
                    if (h1) {
                        h1.insertAdjacentElement('afterend', sliderContainer);
                        sliderContainer.style.display = 'block';

                        // Slider Logic
                        let currentIndex = 0;
                        let autoPlayInterval;
                        const totalSlides = banners.length;

                        function goToSlide(index) {
                            if (totalSlides <= 1) return;
                            currentIndex = index;
                            track.style.transform = `translateX(-${currentIndex * 100}%)`;

                            // Update dots
                            Array.from(dotsContainer.children).forEach((d, i) => {
                                if (i === currentIndex) d.classList.add('active');
                                else d.classList.remove('active');
                            });

                            resetAutoPlay();
                        }

                        function nextSlide() {
                            let next = currentIndex + 1;
                            if (next >= totalSlides) next = 0;
                            goToSlide(next);
                        }

                        function resetAutoPlay() {
                            clearInterval(autoPlayInterval);
                            autoPlayInterval = setInterval(nextSlide, 3000);
                        }

                        if (totalSlides > 1) {
                            resetAutoPlay();
                        }
                    }
                }
            } catch (err) {
                console.error('Lỗi load home banners:', err);
            }
        });
    </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: none !important;
                    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/[email protected]/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 = [
                    'video-home.gvapi.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();
                const STORAGE_KEY = 'pinnedMatchesCache';
                const heroSection = document.querySelector('section.hero');
                if (!heroSection) {
                    console.error('Hero section not found.');
                    return;
                }

                const skeletonHtml = `
                    <div class="top-live-box container skeleton-loading" id="pinned-matches-container">
                        <style>
                            .skeleton-box {
                                display: inline-block;
                                height: 100%;
                                width: 100%;
                                position: relative;
                                overflow: hidden;
                                background-color: #2a2a2a;
                                border-radius: 8px;
                            }
                            .skeleton-box::after {
                                position: absolute;
                                top: 0;
                                right: 0;
                                bottom: 0;
                                left: 0;
                                transform: translateX(-100%);
                                background-image: linear-gradient(
                                    90deg,
                                    rgba(255, 255, 255, 0) 0,
                                    rgba(255, 255, 255, 0.05) 20%,
                                    rgba(255, 255, 255, 0.2) 60%,
                                    rgba(255, 255, 255, 0)
                                );
                                animation: shimmer 2s infinite;
                                content: '';
                            }
                            @keyframes shimmer { 100% { transform: translateX(100%); } }
                            .skeleton-loading .left { aspect-ratio: 16/9; background: #1a1a1a; padding: 10px; border-radius: 8px;}
                            .skeleton-loading .live-list { display: flex; gap: 10px; margin-top: 10px; }
                            .skeleton-loading .live-item { flex: 1; aspect-ratio: 1/1; background: #1a1a1a; border-radius: 8px; overflow: hidden; }
                        </style>
                        <div class="left">
                            <div class="skeleton-box" style="min-height: 300px;"></div>
                        </div>
                        <div class="live-list">
                            <div class="live-item"><div class="skeleton-box"></div></div>
                            <div class="live-item"><div class="skeleton-box"></div></div>
                            <div class="live-item"><div class="skeleton-box"></div></div>
                            <div class="live-item"><div class="skeleton-box"></div></div>
                        </div>
                    </div>
                `;

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

                    if (anchors.length === 0) return;

                    const streamUrl = anchors[0].streamUrl;

                    const liveBoxHtml = `
                        <div class="top-live-box container" id="pinned-matches-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 existingContainer = document.getElementById('pinned-matches-container');
                    if (existingContainer) {
                        existingContainer.outerHTML = liveBoxHtml;
                    } else {
                        heroSection.insertAdjacentHTML('afterend', liveBoxHtml);
                    }

                    if (window.Player && window.HlsPlayer) {
                        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('#pinned-matches-container .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');

                            if (window.Player && window.HlsPlayer) {
                                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
                                });
                            }
                            if (viewLink) {
                                viewLink.href = '/truc-tiep/' + anchors[index].slug;
                            }
                        });
                    });
                }

                let hasLocalData = false;
                try {
                    const cached = localStorage.getItem(STORAGE_KEY);
                    if (cached) {
                        const parsed = JSON.parse(cached);
                        if (parsed && parsed.length > 0) {
                            renderMatches(parsed);
                            hasLocalData = true;
                        }
                    }
                } catch (e) {
                    console.error('Error parsing localStorage:', e);
                }

                if (!hasLocalData) {
                    heroSection.insertAdjacentHTML('afterend', skeletonHtml);
                }

                fetch('https://video-home.gvapi.cc/api/pinned-home?t=' + new Date().getTime())
                    .then(response => {
                        if (!response.ok) throw new Error('API Response not ok: ' + response.status);
                        return response.json();
                    })
                    .then(data => {
                        const matches = data.pinnedMatches;
                        if (!matches || matches.length < 1) {
                            localStorage.removeItem(STORAGE_KEY);
                            const existingContainer = document.getElementById('pinned-matches-container');
                            if (existingContainer) existingContainer.remove();
                            return;
                        }
                        localStorage.setItem(STORAGE_KEY, JSON.stringify(matches));
                        renderMatches(matches);
                    })
                    .catch(error => {
                        console.error('Error fetching API data:', error);
                        if (!hasLocalData) {
                            const existingContainer = document.getElementById('pinned-matches-container');
                            if (existingContainer) existingContainer.remove();
                        }
                    });
            });
        </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>
        // === Catfish Banner Global: lấy từ API /api/catfish-banners (giống React CatfishBanners.jsx) ===
        (function () {
            var apiUrl = 'https://api.gvapi.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>
        <script>
    document.addEventListener('DOMContentLoaded', function () {

        function updateLinks() {
            document.querySelectorAll('.home-banner-slide').forEach(function(el) {
                el.href = 'https://refvsbf.com/';
                el.target = '_blank';
            });
        }

        // Banner hiện có
        updateLinks();

        // Banner render sau bằng JS/API
        new MutationObserver(updateLinks).observe(document.body, {
            childList: true,
            subtree: true
        });

    });
    </script>
    
</html>

Latest requests

# Url Url Source Date
1 https://www.brokenspokeaustintx.co… 2026-10-16 11:56:23
2 https://www.exodontia.info/ 2026-10-16 11:56:23
3 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:22
4 https://auth.mediacorp.sg/u/login?… 2026-10-16 11:56:22
5 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:21
6 https://www.texarkanatwins.com/%25… 2026-10-16 11:56:20
7 https://auth.mediacorp.sg/u/login?… 2026-10-16 11:56:20
8 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:20
9 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:19
10 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:19
11 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:17
12 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:17
13 https://www.texarkanatwins.com/%25… 2026-10-16 11:56:16
14 https://www.texarkanatwins.com/%25… 2026-10-16 11:56:15
15 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:15
16 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:15
17 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:13
18 https://wolfofallstreetofficial.co… 2026-10-16 11:56:13
19 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:12
20 https://www.thebolditalic.com/?gi=… 2026-10-16 11:56:11