, i.e. AFTER this script executes, so the query returned null
// on every prerendered page and the classifier stamped
// "noindex, follow" into the DOM of real, unique pages. The prerenderer
// now stamps data-prerendered="1" on , which exists before any
// script runs. The canonical check is kept as a secondary guard.
var docEl = document.documentElement;
if (docEl && docEl.getAttribute('data-prerendered') === '1') return;
if (document.querySelector('link[rel="canonical"]')) return;
var origin = 'https://terraincognitaacademy.com';
var path = location.pathname || '/';
var malformedAbsoluteTarget = null;
try { path = decodeURIComponent(path); } catch (_) {}
path = path.replace(/^\/+https?:\/+((www\.)?terraincognitaacademy\.com)(?=\/|$)/i, function(){
malformedAbsoluteTarget = true;
return '';
});
if (!path) path = '/';
if (path.length > 1) path = path.replace(/\/+$/, '');
var canonical = origin + path;
// Routes that must NEVER be indexed (private/auth-gated/redirect aliases).
var NOINDEX_PREFIXES = [
'/spell-launcher','/instructor/apply','/course-finder','/dashboard','/admin',
'/checkout','/cart','/auth','/login','/signup','/messages','/profile/edit',
'/profile/settings','/settings','/student','/achievements','/my-invoices',
'/forum/new-topic','/forum/bookmarks','/instructor/earnings','/instructor/analytics',
'/instructor/courses','/instructor/content-library','/category-management',
'/gift-success','/claim-gift','/shop/success','/shop/download','/install','/search',
'/spirit-alignment-codex/result','/directory/manage','/directory/search'
];
// Legacy aliases that must canonicalize to current URLs (and stay noindex on the alias itself).
var REDIRECT_MAP = {
'/course-finder': '/spirit-alignment-codex',
'/your-path-assistant': '/spirit-alignment-codex',
'/spiritual-path-assistant': '/spirit-alignment-codex',
'/spirit-codex': '/spirit-alignment-codex',
'/codex': '/spirit-alignment-codex',
'/spirit-encyclopedia': '/encyclopedia',
'/ritual-design-system': '/rituals',
'/blog-posts': '/blog',
'/power-points': '/spiritual-world',
'/temple-teachings': '/forum',
'/affiliate': '/ambassador',
'/affiliates': '/ambassador',
'/affiliate/register': '/ambassador',
'/category/free': '/courses/category/free-spiritual-courses',
'/spiritual-development/usa': '/spiritual-development/united-states',
'/spiritual-development/uk': '/spiritual-development/united-kingdom',
'/spiritual-development/uae': '/spiritual-development/united-arab-emirates'
};
// Hub/listing routes that share filesystem space with item children
// (e.g. /courses cannot exist as a static file because dist/courses/
// is a directory). Inject SEO synchronously so Googlebot and SPA
// visitors get the correct title/description even when served from
// the root SPA fallback shell.
var HUB_SEO = {
'/courses': {
title: 'Occult Courses Online | Terra Incognita Academy',
description: 'Learn witchcraft, ceremonial magic, hermeticism and chaos magick with 300+ occult courses online. Expert instructors, lifetime access. Start today.'
},
'/shop': {
title: 'Grimoires & Occult PDF Books | Terra Incognita Academy',
description: 'Download grimoires, occult books and esoteric PDFs: Goetia, Solomonic magic, Book of Shadows, angelic and planetary rituals. Instant delivery, lifetime access.'
},
'/bundles': {
title: 'Occult Course Bundles | Terra Incognita Academy',
description: 'Save up to 50% on occult course bundles: witchcraft, ceremonial magic, hermeticism and evocation packages. Lifetime access, one payment.'
},
'/forum': {
title: 'Witchcraft & Occult Forum | Terra Incognita Academy',
description: 'Join our witchcraft forum and occult community. Discuss grimoires, rituals, evocation, meditation and esoteric practice with practitioners worldwide.'
},
'/blog': {
title: 'Blog — Spiritual Teachings | Terra Incognita Academy',
description: 'Read in-depth articles on spirit work, ritual practice, grimoire study and consciousness development from Terra Incognita Academy instructors.'
},
'/encyclopedia': {
title: 'Spirit Compatibility Guide | Terra Incognita Academy',
description: 'Explore the encyclopedia of spirits, domains, archetypes and intents. A comprehensive reference for serious practitioners at Terra Incognita Academy.'
},
'/rituals': {
title: 'Ritual Hub — Blueprints | Terra Incognita Academy',
description: 'Design personalized rituals with the Terra Incognita Academy Ritual Hub. Step-by-step blueprints for spirit work, devotion and transformation.'
},
'/glossary': {
title: 'Spiritual & Magical Glossary | Terra Incognita Academy',
description: 'Definitions of key spiritual, magical and esoteric terms used across courses, grimoires and rituals at Terra Incognita Academy.'
},
'/spiritual-world': {
title: 'Sacred Geography & Power Points | Terra Incognita',
description: 'Explore the spiritual world: power points, sacred sites and the geography of spirit. Curated by Terra Incognita Academy.'
},
'/instructors': {
title: 'Meet Our Teachers | Terra Incognita Academy',
description: 'Meet the experienced spiritual instructors of Terra Incognita Academy. Practitioners, scholars and guides leading our courses.'
},
'/pillars': {
title: 'Pillar Hubs — Goetia, Angels & Deities | Terra Incognita Academy',
description: 'Explore our pillar hubs: the 72 Goetic demons, the Shem HaMephorash angels, the Olympic spirits and the Norse, Celtic and Greek deities, with linked courses, grimoires and articles.'
},
'/about': {
title: 'About Us — Our Mission | Terra Incognita Academy',
description: 'Learn about Terra Incognita Academy: our mission to deliver rigorous, benevolent spiritual education for serious modern practitioners.'
}
};
// Indexable-from-the-shell allowlist.
//
// IMPORTANT: this list only ever applies to a URL that has NO prerendered
// HTML file (the script early-returns when a canonical is already present).
// A URL served by the generic shell has the homepage title and no unique
// content, so declaring it indexable produced thousands of identical
// "index,follow" pages — exactly the "Duplicate: Google chose a different
// canonical" and "Crawled - currently not indexed" reports.
//
// Therefore ONLY stable hub/static routes stay indexable here. Every
// item-level route (listings, cities, tags, topics, courses, products,
// profiles, certificates, …) must earn indexability by having a real
// prerendered page; without one it is noindex,follow.
var INDEX_PATTERNS = [
/^\/$/,
/^\/courses$/, /^\/shop$/, /^\/bundles$/, /^\/ebook-bundles$/, /^\/forum$/,
/^\/blog$/, /^\/encyclopedia$/, /^\/encyclopedia\/spirits$/,
/^\/spiritual-world$/, /^\/spirit-alignment-codex$/,
/^\/(theurgy|evocation|spirit-guides|spirit-communication)$/,
/^\/answers$/, /^\/glossary$/, /^\/compendium$/,
/^\/rituals$/, /^\/ritual-builder$/,
/^\/about$/, /^\/about\/faculty$/, /^\/contact$/, /^\/ambassador$/, /^\/instructors$/,
/^\/free-ebook$/, /^\/members$/, /^\/declaration$/, /^\/experienced-practitioners$/,
/^\/become-instructor$/, /^\/standing-faq$/, /^\/platform$/, /^\/sitemap$/, /^\/rss$/,
/^\/academy-transfer$/, /^\/accredited-spiritual-program$/, /^\/updates$/,
/^\/[a-z0-9-]+-school$/, /^\/certified-paths$/,
/^\/(infernal-healer|power-invoker|wealth-architect|infernal-strategist|master-of-knowledge|shadow-alchemist|master-of-influence|infernal-lover|infernal-protector|pathbreaker|infernal-seer|infernal-sovereign)$/,
/^\/privacy-policy$/, /^\/terms-of-service$/, /^\/cookie-policy$/,
/^\/refund-policy$/, /^\/disclaimer$/, /^\/copyright$/,
/^\/verify-certificate$/,
/^\/tags$/, /^\/pillars$/,
/^\/directory$/, /^\/directory\/pricing$/
];
var isNoindex = NOINDEX_PREFIXES.some(function(p){
return path === p || path.indexOf(p + '/') === 0;
});
var redirectTarget = REDIRECT_MAP[path];
// Pattern-based legacy redirects (must mirror the Cloudflare worker
// so direct browser hits behave identically to crawler hits).
if (!redirectTarget) {
var m;
if ((m = path.match(/^\/shop\/product\/(.+)$/))) redirectTarget = '/shop/' + m[1];
else if ((m = path.match(/^\/category\/(.+)$/))) redirectTarget = '/courses/category/' + m[1];
else if ((m = path.match(/^\/bundle\/(.+)$/))) redirectTarget = '/bundles/' + m[1];
else if ((m = path.match(/^\/profile\/(?!settings|edit)([^/]+)$/))) redirectTarget = '/u/' + m[1];
}
if (redirectTarget) {
canonical = origin + redirectTarget;
isNoindex = true; // alias itself is not indexable
// Actually navigate real visitors (bots see canonical+noindex above).
// Lovable hosting has no edge redirects, so we do it client-side.
try {
var ua = (navigator && navigator.userAgent) || '';
var isBot = /bot|crawler|spider|crawling|facebookexternalhit|slurp|bingpreview|linkedinbot|whatsapp|telegram/i.test(ua);
if (!isBot) {
window.location.replace(redirectTarget + (window.location.search || '') + (window.location.hash || ''));
}
} catch (e) {}
}
var isKnownGood = !isNoindex && INDEX_PATTERNS.some(function(re){ return re.test(path); });
var link = document.createElement('link');
link.setAttribute('rel', 'canonical');
link.setAttribute('href', canonical);
document.head.appendChild(link);
var ogUrl = document.createElement('meta');
ogUrl.setAttribute('property', 'og:url');
ogUrl.setAttribute('content', canonical);
document.head.appendChild(ogUrl);
var twUrl = document.createElement('meta');
twUrl.setAttribute('name', 'twitter:url');
twUrl.setAttribute('content', canonical);
document.head.appendChild(twUrl);
// Apply final robots state synchronously. Known public routes get index;
// private routes, redirect aliases, and unknown paths get noindex.
var existing = document.querySelectorAll('meta[name="robots"], meta[name="googlebot"]');
for (var i = 0; i < existing.length; i++) existing[i].parentNode.removeChild(existing[i]);
var robotsValue = isKnownGood
? 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1'
: 'noindex, follow';
var robots = document.createElement('meta');
robots.setAttribute('name', 'robots');
robots.setAttribute('content', robotsValue);
document.head.appendChild(robots);
var gbot = document.createElement('meta');
gbot.setAttribute('name', 'googlebot');
gbot.setAttribute('content', robotsValue);
document.head.appendChild(gbot);
var cleanupSeoDuplicates = function(){
var selectors = ['title', 'meta[name="title"]', 'meta[name="description"]'];
for (var s = 0; s < selectors.length; s++) {
var nodes = document.head.querySelectorAll(selectors[s]);
for (var n = 0; n < nodes.length - 1; n++) {
if (nodes[n] && nodes[n].parentNode) nodes[n].parentNode.removeChild(nodes[n]);
}
}
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', cleanupSeoDuplicates, { once: true });
} else {
cleanupSeoDuplicates();
}
setTimeout(cleanupSeoDuplicates, 0);
// Synchronous hub-route SEO injection. Hub routes (e.g. /courses,
// /shop) cannot have prerendered extensionless static files because
// their slug exists as a directory (dist/courses/foo.html). Inject
// unique title + description here so Googlebot's first-paint scan
// sees per-route SEO instead of the homepage shell defaults.
var hub = HUB_SEO[path];
if (hub) {
try {
var existingTitles = document.head.querySelectorAll('title');
for (var t = 0; t < existingTitles.length; t++) existingTitles[t].parentNode.removeChild(existingTitles[t]);
var titleEl = document.createElement('title');
titleEl.textContent = hub.title;
document.head.appendChild(titleEl);
var metaSelectors = ['meta[name="title"]','meta[name="description"]','meta[property="og:title"]','meta[property="og:description"]','meta[name="twitter:title"]','meta[name="twitter:description"]'];
for (var ms = 0; ms < metaSelectors.length; ms++) {
var existingMetas = document.head.querySelectorAll(metaSelectors[ms]);
for (var em = 0; em < existingMetas.length; em++) existingMetas[em].parentNode.removeChild(existingMetas[em]);
}
function appendMeta(attr, name, content){
var el = document.createElement('meta');
el.setAttribute(attr, name);
el.setAttribute('content', content);
document.head.appendChild(el);
}
appendMeta('name', 'title', hub.title);
appendMeta('name', 'description', hub.description);
appendMeta('property', 'og:title', hub.title);
appendMeta('property', 'og:description', hub.description);
appendMeta('name', 'twitter:title', hub.title);
appendMeta('name', 'twitter:description', hub.description);
} catch(_) {}
}
// For redirect aliases, perform a client-side hard redirect after canonical
// is in place so users actually land on the canonical URL.
if (malformedAbsoluteTarget) {
try { location.replace(canonical + location.search + location.hash); } catch(_) {}
}
if (redirectTarget && redirectTarget !== path) {
try { location.replace(origin + redirectTarget + location.search + location.hash); } catch(_) {}
}
} catch (e) { /* noop */ }
})();
infernal spirits
The study of infernal spirits within the curriculum of Terra Incognita Academy represents a sophisticated exploration of the chthonic realms and the primordial energies that govern the subterranean aspects of the cosmic hierarchy. In the formal esoteric tradition, the term infernal does not denote an adversarial or malevolent nature, but rather refers to spirits of the lower spheres or the inner earth, representing dense, grounding forces essential for manifestation and psychological integration. For the dedicated practitioner, understanding these entities is a crucial component of a balanced spiritual education. By engaging with these specific frequencies, students learn to harmonize the polarities of existence, bridging the gap between the celestial heights and the foundational depths of the universal structure. This academic pursuit fosters a comprehensive worldview where every entity is recognized as a necessary vibration within the vast tapestry of the divine emanation.
At Terra Incognita Academy, our pedagogical approach to these entities is rooted in the rigorous traditions of theurgy and ceremonial magic. We provide a vast array of scholarly resources, including detailed compendium articles that trace the historical and grimoiric lineages of various spirits. Our specialized courses offer structured guidance on safely navigating these currents, while our collection of ebooks and digital downloads serves as an essential library for independent research. Through these materials, students gain the technical proficiency required to engage in respectful discourse with the infernal hierarchy, viewing them as allies and teachers of the material arts, protection, and self-mastery. By treating this study as a formal science, we move beyond common superstition into a realm of profound metaphysical clarity and practical empowerment.
Participation in this field of study extends beyond solitary reading into a vibrant community of scholars and practitioners. Our forum discussions provide a secure and welcoming environment for students to share their experiences, query complex theological points, and support one another in their evolutionary journey. This communal aspect ensures that the study of infernal spirits remains a transparent and benevolent endeavor, focused on the refinement of the soul and the betterment of humanity. Whether you are exploring our digital downloads for specific rituals or enrolling in comprehensive courses to master the art of evocation, you are contributing to a legacy of enlightened exploration. We invite you to delve into our compendium and join the ongoing dialogue at Terra Incognita Academy, where the mysteries of the depths are brought into the light of academic understanding and spiritual grace.