Minimum search volume
A keyword must have at least 10-100 monthly searches to be worth targeting. Anything below is not worth the effort.
AerialPS targets high-intent keywords with low to no competition to build consistent organic traffic.
Minimum search volume
A keyword must have at least 10-100 monthly searches to be worth targeting. Anything below is not worth the effort.
Monitoring cadence
Keywords must be reviewed bi-weekly to weekly. A healthy keyword should maintain 2–3% CTR or better.
If a keyword drops below 3% CTR, it signals a mismatch between search intent and page content.
Non-obvious SEO decisions are documented in inline comments throughout the codebase.
Composable SEO
Frequently repeated SEO values, like Open Graph tags, schema markup, are extracted into a shared file and composed rather than duplicated across pages.
Strictly typed
The SEO setup is typed with TypeScript. Missing required values throw a compile-time error - key metadata cannot be accidentally omitted.
The ugly-ish specifics:
// Typesimport type { ComposeSEOInput } from "../types/seoComposerTypes";
// Composibleimport composeSchema from "./composeSchema";import composeOg from "./composeOg";
function composeSEO({ title, pageTitle, metaDescription, type, url, canonicalLink, pageUrl, pageImage, pageImageAlt, ogPageType, pageType, pageDescription,}: ComposeSEOInput) { const og = composeOg({ pageUrl, pageImage, pageDescription, pageImageAlt, ogPageType, }); const schema = composeSchema({ pageUrl, pageImage, pageDescription, pageType, });
return { pageTitle, title, metaDescription, type, url, canonicalLink, og: og, schema: schema, };}
export default composeSEO;The cool parts
---/* Black Box doesn't mean it's difficult, it's actually really simple. I ranout of naming ideas, "Black Box" is meant to signify that consistentlylooking at it, will eat up all your mental context.
I've tried to cover everything there is in terms of onpage SEO, so it'snot reccomended to actually change the inner workings of the SEO-Kit orSEOBlackBox.
However!
Feel free to extend it if you would like. Personally, I could only reasonablyreccomend working on Backlinks and getting authority instead.
I disagree with a lot of what he says, but TheGrumpySeoGuy (on YT) is agreat start if you want a simplified, easy-to-understand, and easy to digest,SEO overview:
https://www.youtube.com/@GrumpySEOGuy
Again, he is great for a quick overview. Things he says are "technically"correct but (sometimes) practically incorrect.
i.e: Content DOES matter, and content is king (not to Google , but to otherwebsites);
Higher quality content === more people link to Aerialps.*/
// Typesimport composeSEO from "@/helpers/composers/composeSEO";
type Props = { seo: ReturnType<typeof composeSEO>;};
const { seo } = Astro.props;---
<!-- Core --><title>{seo.pageTitle}</title>
<meta name="title" content={seo.title} /><meta name="description" content={seo.metaDescription} />
<link rel="canonical" href={seo.canonicalLink} /><link rel="sitemap" href="/sitemap-index.xml" />
<!-- Robots --><meta name="robots" content="index, follow" />
<!-- OG --><meta property="og:site_name" content={seo.og.siteName} /><meta property="og:url" content={seo.og.url} /><meta property="og:type" content={seo.og.type} /><meta property="og:locale" content={seo.og.locale} />
<meta property="og:title" content={seo.title} /><meta property="og:description" content={seo.metaDescription} />
<meta property="og:image" content={seo.og.images[0].url} /><meta property="og:image:alt" content={seo.og.images[0].alt} />
<!-- Twitter --><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content={seo.title} /><meta name="twitter:description" content={seo.metaDescription} /><meta name="twitter:image" content={seo.og.images[0].url} />
<!-- JSON-LD --><script type="application/ld+json" set:html={JSON.stringify(seo.schema)} />alt textalt attributesAll of these directly affect search ranking and should not be changed casually. More info inside the codebase:

Build authority
Each published blog builds page and domain authority over time.
Capture new keywords
Each blog targets a topic the core pages don’t yet rank for, to progressively wider reach.
The recommendation is to publish one quality blog per week, focused on a keyword not yet covered by existing content.
See Blogs - How It Works for the technical pipeline behind blog publishing.