Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 11378 байт. Загружен за: 0сек.
Проверяемая страница не запрещена в robots.txt.
Цепочка редиректов для файла robots.txt:
http://projectcartoon.com/robots.txt
302 Found
https://hourigan.ie/
200 OK
Показать содержимое robots.txt
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Justin Hourigan · ON AIR</title>
<meta name="description" content="Justin Hourigan — cloud architect, home lab operator, broadcast veteran. Now transmitting from the cloud. Do not adjust your set.">
<meta name="theme-color" content="#050505">
<meta property="og:title" content="Justin Hourigan · ON AIR">
<meta property="og:description" content="Now broadcasting from the cloud. Do not adjust your set.">
<meta property="og:image" content="https://hourigan.ie/profile.png">
<meta property="og:url" content="https://hourigan.ie">
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="manifest" href="site.webmanifest">
<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=Archivo+Black&family=VT323&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
</head>
<body data-channel="3">
<canvas id="noise" aria-hidden="true"></canvas>
<div class="crt" aria-hidden="true">
<div class="scanlines"></div>
<div class="scanband"></div>
<div class="vignette"></div>
</div>
<main class="screen">
<header class="osd-top">
<div class="on-air"><span class="rec-dot"></span>ON AIR</div>
<div class="ident">HOURIGAN.IE · TRANSMISSION IDENT</div>
<div class="osd-right">
<span class="ch-osd" id="ch-osd">CH 03</span>
<span class="timecode" id="timecode">00:00:00:00</span>
</div>
</header>
<section class="stage">
<div class="stage-copy">
<p class="standby">▪ PLEASE STAND BY ▪</p>
<h1 class="name">
<span class="glitch" data-text="JUSTIN">JUSTIN</span>
<span class="glitch" data-text="HOURIGAN">HOURIGAN</span>
</h1>
<p class="tagline">NOW BROADCASTING FROM THE CLOUD</p>
<div class="channel-panel" id="channel-panel" aria-live="polite">
<!-- populated by script; noscript fallback below -->
<noscript>
<h2>CH 01 — BROADCAST</h2>
<p>Television graphics and animation, 1990s issue. Flashy transitions, hot phosphor — motion graphics that made dial-up modems sweat.</p>
<h2>CH 02 — STREAMING</h2>
<p>Then the internet came knocking. Video over the wild early web, when buffering was a rite of passage.</p>
<h2>CH 03 — CLOUD</h2>
<p>Tonight's programme: cloud architecture. Invisible machines moving pictures at planet scale. After hours, the home lab hums.</p>
</noscript>
</div>
<div class="remote" role="group" aria-label="Change channel">
<button class="ch-btn" id="ch-down" aria-label="Previous channel">CH ▼</button>
<div class="ch-pips">
<button class="pip-btn" data-ch="1">01</button>
<button class="pip-btn" data-ch="2">02</button>
<button class="pip-btn" data-ch="3">03</button>
</div>
<button class="ch-btn" id="ch-up" aria-label="Next channel">CH ▲</button>
</div>
</div>
<aside class="pip">
<div class="pip-frame">
<img src="profile.png" alt="Cartoon portrait of Justin Hourigan">
<div class="pip-static"></div>
<span class="pip-live">● LIVE</span>
</div>
<p class="pip-caption">FIG. 1 — THE PRESENTER · PORTRAIT RENDERED BY AI</p>
</aside>
</section>
<div class="bars" aria-hidden="true">
<span></span><span></span><span></span><span></span><span></span><span></span><span></span>
</div>
<footer class="teletext">
<nav class="tt-links" aria-label="Social links">
<a href="https://x.com/justhour" target="_blank" rel="noopener"><b class="tt-p tt-red">P101</b> X · @JUSTHOUR</a>
<a href="https://www.linkedin.com/in/hourigan/" target="_blank" rel="noopener"><b class="tt-p tt-grn">P102</b> LINKEDIN · /IN/HOURIGAN</a>
<a href="https://www.imdb.com/name/nm2583439/" target="_blank" rel="noopener"><b class="tt-p tt-yel">P103</b> IMDB · NM2583439</a>
</nav>
<p class="tt-line">DO NOT ADJUST YOUR SET — ALL OF THIS WAS DESIGNED AND WRITTEN BY AI</p>
<p class="tt-meta">TRANSMITTED IN PAL · 625 LINES · 25 FPS · FROM THE HOME LAB, IRELAND</p>
</footer>
</main>
<script>
(function () {
var reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
/* ---------- channels ---------- */
var channels = {
1: {
osd: 'CH 01',
html: '<h2>BROADCAST <span class="ch-era">EST. 1990s</span></h2>' +
'<p>Television graphics and animation, 1990s issue. Flashy transitions, ' +
'hot phosphor — the kind of motion graphics that made dial-up modems sweat.</p>'
},
2: {
osd: 'CH 02',
html: '<h2>STREAMING <span class="ch-era">THE WILD WEB</span></h2>' +
'<p>Then the internet came knocking. Video over the wild early web — ' +
'when buffering was a rite of passage and every pixel fought for bandwidth.</p>' +
'<div class="buffer"><div class="buffer-fill"></div></div>' +
'<p class="buffer-label">BUFFERING… 87%</p>'
},
3: {
osd: 'CH 03',
html: '<h2>CLOUD <span class="ch-era">NOW SHOWING</span></h2>' +
'<p>Tonight’s programme: cloud architecture. Invisible machines moving ' +
'pictures at planet scale — smoother than a cat meme on fiber. ' +
'After hours, the home lab hums.</p>'
}
};
var current = 3;
var panel = document.getElementById('channel-panel');
var osd = document.getElementById('ch-osd');
var noise = document.getElementById('noise');
var autoTimer = null;
function render(ch) {
panel.innerHTML = channels[ch].html;
osd.textContent = channels[ch].osd;
document.body.setAttribute('data-channel', ch);
document.querySelectorAll('.pip-btn').forEach(function (b) {
b.classList.toggle('active', +b.getAttribute('data-ch') === ch);
});
}
function setChannel(ch, manual) {
if (ch === current) return;
current = ch;
if (reduceMotion) { render(ch); }
else {
document.body.classList.add('switching');
noise.style.opacity = '0.5';
setTimeout(function () {
render(ch);
osd.classList.add('flash');
setTimeout(function () { osd.classList.remove('flash'); }, 900);
}, 140);
setTimeout(function () {
document.body.classList.remove('switching');
noise.style.opacity = '';
}, 340);
}
if (manual) armAutoCycle();
}
function next(dir) {
var ch = current + dir;
if (ch > 3) ch = 1;
if (ch < 1) ch = 3;
setChannel(ch, true);
}
function armAutoCycle() {
if (reduceMotion) return;
clearInterval(autoTimer);
autoTimer = setInterval(function () { next(1); }, 8000);
}
render(current);
armAutoCycle();
document.getElementById('ch-up').addEventListener('click', function () { next(1); });
document.getElementById('ch-down').addEventListener('click', function () { next(-1); });
document.querySelectorAll('.pip-btn').forEach(function (b) {
b.addEventListener('click', function () { setChannel(+b.getAttribute('data-ch'), true); });
});
window.addEventListener('keydown', function (e) {
if (e.key === 'ArrowUp' || e.key === 'ArrowRight') next(1);
if (e.key === 'ArrowDown' || e.key === 'ArrowLeft') next(-1);
if (e.key === '1' || e.key === '2' || e.key === '3') setChannel(+e.key, true);
});
/* ---------- timecode (PAL, 25fps) ---------- */
var tc = document.getElementById('timecode');
function pad(n) { return n < 10 ? '0' + n : '' + n; }
function tickTC() {
var d = new Date();
var f = Math.floor(d.getMilliseconds() / 40);
tc.textContent = pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' +
pad(d.getSeconds()) + ':' + pad(f);
}
tickTC();
setInterval(tickTC, reduceMotion ? 1000 : 40);
/* ---------- static noise ---------- */
var ctx = noise.getContext('2d', { alpha: false });
var idata = null, buf32 = null;
function sizeNoise() {
noise.width = Math.max(1, Math.floor(window.innerWidth / 3));
noise.height = Math.max(1, Math.floor(window.innerHeight / 3));
idata = ctx.createImageData(noise.width, noise.height);
buf32 = new Uint32Array(idata.data.buffer);
}
function drawNoise() {
for (var i = 0; i < buf32.length; i++) {
var v = (Math.random() * 255) | 0;
buf32[i] = (255 << 24) | (v << 16) | (v << 8) | v;
}
ctx.putImageData(idata, 0, 0);
}
sizeNoise();
drawNoise();
window.addEventListener('resize', function () { sizeNoise(); drawNoise(); });
if (!reduceMotion) {
var last = 0;
(function loop(t) {
requestAnimationFrame(loop);
if (t - last > 66) { last = t; drawNoise(); }
})(0);
}
})();
</script>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "744c636bda2d4532a113895b1e28375d"}'></script><!-- Cloudflare Pages Analytics --><script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"bd9430bea19b450ca0d953288d9328d3","r":1}' crossorigin="anonymous"></script>
</body>
</html>