Mike Levin SEO in NYC (& the Poconos Pythonista)

Beginning of Journal

Mon Aug 30, 2021

I am now 51 years old, and I’m STILL an SEO! Okay, the idea really is to be a Datamaster and a Master Carpenter, such as it were. Even walruses get in trouble by not having and knowing what they need. And so that’s where I focus my attention, having and knowing what I need to always get by in life. And that is all kinds of data collection and scraping stuff.

And so general SERP collection is about to go into my general project. I have to do it so darn much! Okay, THINK! What you’re typing right now is going on mikelevinseo.com. Your general “in-play” (or soon-to-be in-play) sites are:

But don’t get distracted by that yet. Okay, and so this site is where I think through the SEO issues of all the sites.

Thu Aug 26, 2021

Hello World! Launching LinuxPythonvimgit… gotta think about how I’ll write it. Linuxpythonvimgit… yeah, that flows best. But LPvg is the “stack” acronym. Think! 1, 2, 3… 1?

  1. Set up DNS. Show the nice people the “before” (no site)
  2. DNS propagates almost instantly. Show them Github 404 page.
  3. Make a git repo. No Github in the picture yet (except DNS).
  4. Add a new repo to Github. Name of directory really inconsequential.

Ugh! Forgot to cd into the folder again! Let’s make a few adjustments… Okay, that’s better. Folder name doesn’t matter, but I think I’ll go for 100% consistency in my convention. Also moved .git invisible folder and the index.md file I made into the better named folder.

Now do step 4 for real…

  1. We make the branch we’re working on named main…
  2. We identify the location of the remote repo (on Github)…
  3. We do the first push which must name the branch…

Wait a moment, and show the nice people the “after”…

While we wait, we show that the 2nd push is easier…

See… just “git push” on the 2nd push!

Oops! Missed an important step…

  1. Go to Github / Repo / Settings / Pages and configure!
  2. Choose a Theme (combined it with step 8)

I think we’re just still waiting for the Jekyll magic to kick in for the first time on this site.

And there it is. It overwrote my index.md. Let’s fix…

Oh yeah, always do a git pull after these steps. Github wrote stuff into the repo!

It didn’t overwrite my index.md. It automatically used a different branch of the repo. I’ll have to delete that branch.

Hmm… Okay, after switching Github Pages feature back to main branch of repo, I had to reset a few blanked settings including Theme and custom domain. Once I did it was pretty quick.

And finally I’ll expose a bit of the Jekyll system that’s going on here. Ultimately I’m trying to dramatically reduce my “Tech Liability” of running a bunch of sites, getting WordPress and the unending upgrades and security risks out of the picture. That’s a vast simplification of the publishing process, but there’s always a cost. And in this case, it’s learning yet another templating system… oh, and framework convention… yuck!

Let’s go look at the Jekyll documentation… okay, so there’s a whole curly-brace based templating system… just like everything else that like almost ever was… except back when it was <% %>. Pointy/percents of the ancient Microsoft HDC/IDX conventions have made way for the conventions of… uh… maybe Ruby stuff that came after. Python people will know the Django framework and Jinja template system extraction… all the same really. Some syntax invented for intermixing with HTML and a subset of some language’s logic used for variable logic flow. Jekyll no different.

So I’m jumping right into a global default template that goes in a conventional location. Let me show you those kooky framework conventions of Jekyll…

So I’m about to drop a x_layout/default.html down on this site to eliminate the header…

Ugh! Gotta turn off markdown rendering in vim in markdown files. Who needs it? Just slows down these pages when they reach a few hundred thousand lines (which they do). Okay, I digress.

That Google Analytics code is from mikelevinseo.com. While I’m doing this step, I might as well get the correct GA tracking in

  1. Add the x_layout/default.html (ignore the x’s) in order to remove default banner of theme and to add GA code.
  2. Get your GA tracking code (funky process)
  3. Don’t forget to git add the layout folder!

There you saw Github dropping new files into the folder. I momentarily interacted with the Pico/Nano program which is automatically used by git because they don’t want to drop the uninitiated into vi/vim.

It takes a Ctrl+O Enter to write the file out and a Ctrl+X Enter to quit the program. It’s just to document the merge changes. But there are no file collisions in this case, so no merge issues. See? The CNAME file and config.yaml file got put in location by the Github Jekyll system.

Changes Jekylling. That’s the before. See, header still there and no GA code…

That’ll take a moment to propagate. Let’s go the full distance and set up Google Search Console, which is mainly a matter of site verification.

  1. Set up Google Search Console. (TXT record)

That DNS entry is taking a moment to propagate. That’s just the way with that minor miracle called the Domain Name System. When you think about what it’s doing, it’s amazing it’s as fast as it is, so sometimes you just have to wait.

Okay, I know I did it right. That one it’s saying it found… does not match what’s showing, so it must have been one of those 2 I deleted out right at the beginning. One was a parking record and the other WAS a text record, so that must be it. I’ll just be patient. It’s not like you’re going to see data come in right away as GSC has a couple days delay.

Anyhow, that’s pretty much it. You saw everything but registering the domain in launching a new site on the Github Pages system in this live stream. I’m very happy with it. But now it’s coming on 5:00 AM and I really got to get started with my work.

Got some SERPs to scrape. Later gators!

Tue Aug 24, 2021

Hello World. It’s Mike Levin, SEO in New York City. Technically now I’m now really Mike Levin, the Poconos Pythonista since quarantine and lockdown hit, I got my ass out of Dodge, such as it were, back to a sort of “home” I’ve known growing up, the nearby tiny mountains of Pennsylvania. It’s right near the Delaware Water Gap which is lots of beautiful State park.

I’m one of the blessed able to telecommute for whom lockdown turned out to be more of a boon than a bust. I feel bad for how many lives were lost and I know herd immunity is both truth and tragedy. But humanity was through it before and we’ll be through it again. The best we can do is to be prepared without being paranoid, and for a long time I new that being at Ground Zero was not the wisest move for either me or my family. But my child is inextricably bound to the suburbia of New York City known as Staten Island, and as long as she is I have to stay close enough for weekly pickup and drop-off. Okay, so where does that leave me?

Oh yes! I have stories. I have lots and lots of stories, and I need to tell my stories. I will be using all sorts of information tricks and principles from my career of search engine optimization to ensure that my stories last forever (insofar as I can).

Every time I write, I should endeavor to have the content “land” in the correct sorting bin, such as it were. I really hate having different places for things because it increases the mental overhead of organizing and sorting content. And the worst is registering yet another domain, but I just did that anyway:


It’s really long overdue given my schtick. Try to get into the groove of “never not be publishing” (on one of these sites):

Fri Aug 20, 2021

Adding Google Analytics to Github.io Page with Jekyll

Hello World… again! This is an exercise in commitment and consistency. I have a number of small touches to do here. Let’s fix the .vimrc! Okay, that should do it for a start. See how it autowrapped. That’s a “hard” line return at 79 characters. Many people… oh I digress. Let’s get onto to Google Analytics on a Github.io Page site. 1, 2, 3… 1?

Templates! Now I know a bit more about what’s going on in the examples I copy/pasted from. It’s all Jekyll Liquid templating language. Actually Liquid is from Shopify and Jekyll simply uses it… It’s just another curly braces template language like Django’s Jinja templates. It’s all basically the same with different nuanced rules. But nuances are all very important and I hate it when I have another thing like this to learn. Knocks something else out of my head. Keep tech liability low! That’s what we’re really doing with the Github Pages system for publishing vs. say WordPress… ugh!

Okay… No Google Analytics on MikeAtEleven.com, but on MikeLevinSEO.com…

Hmmm. Gotta even make sure I have it installed right on mikelevinseo.com, which I only did recently. I thought those two codes would be the same…

Let’s look at Google Analytics site… so you get to see me fix a mistake on the site I was trying to copy the example from. It was only a few days. Anyhoo, I get that same piece of code now but for a new site. Have to add it to GA…

So there’s the “before”. Let’s push our commits and get the “after”

It’ll take a few moments. I’ll organize the tabs… I still have to do some SEO. And the next video is going to be REALLY COOL with Jupyter Notebooks.

Okay, that’s it. That was the point of this video. I now have GA installed on MikeAtEleven.com. Very basic. All default settings. But I can always tweak later. This satisfies the 80/20-rule!

And you see a “template” from the Liquid system under Jekyll under Github Pages.

So you see how the YouTube embed made me dive deeper into something that I was originally just using copy/paste examples and verbatim instructions? It’s great to get started and learn “form” but you really have to understand more of what’s going on underneath.

Thanks, and later gators!

Fri Aug 20, 2021

Jekyll include tags for Github.io YouTube Embedding

Get really good at the technical moves. When you’re ready to publish things publicly, you have several options.

I need to develop some new habits to compel me forward, daily. Switch this over to public casting! When getting ready to broadcast publicly, I have to be very careful about this screen #1. I don’t want anything proprietary displayed. So I need a little ritual when getting ready to live-stream.

I feel confused and have to get rid of that confusion. Not merely get rid of it, but knowing what’s important and why, and achieve a bit of clarity, motivation, and forward-movement in life.

The streaming preparation that I do also applies to my entire system, like anything in my browser. So… gotta achieve clarity. What do I do? Well, as always:

1, 2, 3... 1?

I set up hotkeys to start streaming and stop streaming. Do a new test…

Hello World! I’m doing some new tests. Of course first is the transparent webcam headshot, an OBS feature. Next, I want really to have better looking YouTube embeds on my Github.io pages. You can’t see it but I also used a keyboard shortcut to get OBS itself out of the video and once I have confidence I’ll get this page… out as well.

Okay, so the embed…


That will take a moment to complete. Meanwhile I should set up that site, mikelevinseo.com, the way I did mikeateleven.com, meaning having it as the place where I really start writing about topics instead of my main journal (here) from which I would have to copy/paste all the time to publish it.

Okay, that’s done! Wow, I’ll update the ones on the other site…

That’s “before” and that’s after.

Okay, done. Onto main work!

Fri Aug 20, 2021

Embedding YouTube Video Thumbnails on Github.io Pages

Hello World! I’m streaming again. This time, back in my main journal. I’ll try to stay pure about an advancing story in Mike At Eleven. Honestly, that site is to reach out to my daughter and to start the steady slow build on YouTube that I know I can accomplish as sort of a side-gig without hardly trying. I know that because I’m at about 10K viewers without really trying. And now by having some discipline about daily publishing and processing my ideas, I’ll be releasing a lot of built-up potential. Anyhoo, there’s a few refinements I couldn’t wait until tonight at 11 to do. Namely, YouTube video trimming because now they have an editor, and this streaming stuff is new to me, so I’m showing OBS and the YouTube “start streaming” screen more than I want at the beginning and end of videos…

Ugh! I can’t get to the Editor button like that video says is supposed to be there. I may have to do that immediately after livestreaming, or perhaps a few hours past after YouTube is done all its backend processing on different resolutions or such. Anyway, I’ll got to the next quick edit I want to do, which is to embed the respective YouTube videos on each journal entry. I experimented with that on my tictacufosightings site…

Okay, I have today’s to do too…

You’ll see me get better at my vim skills too as I have to do certain tasks more often. Copy and paste with outside software (OS copy/paste buffers) is often a challenge with vim. Gotta get some fancy maneuvers into your fingers. And it’s different between Mac and Windows.

Gotta remember to push up the git commits to make better use of time when demonstrating these things to you…

That was a strange feedback loop. I have to make sure I have my video IDs correct. But as you saw I took the opportunity to add markdown headlines. There’s a lot of good SEO going on in these sites too, especially long-tail principles as I keep it on one page. That may change in the future as I add Jupyter Notebook side-folders to do fancy tricks.

Anyhow, that’ll do it for now. Oh, let me add a to-do list with a special jump “link”. There’s actually link/tags in vim, but I don’t use them. I prefer unique text (usually prefixed with underscores) at the top of the document…

And now whenever I’m anywhere in that journal, I just jump to top with _jxp, hen I find _jxp, nit “w” to go to next-word and shift 8 to find next occurrence.

Okay, that’s where I’ll stop. I’ve got:

Fri Aug 6, 2021

(Re)Launch MikeLevinSEO.com on Github.io

I liked the way things were proceeding yesterday. I made a good start and then it was aborted. Is that an okay word to use anymore? Just like adopted. Everyone takes something personal and those are two loaded words. But the fact remains, I’m getting into it again today. And this is in fact how I’ll publish my “book”. I should probably just call it a blog to alleviate the out-of-proportion expectations on myself. I hate the word blog. It’s a journal. So where was I? Ah, this itself is an important point. The journal provides a steadiness and continuity of thought. You CAN pick up were you left off.

This is sort of a smoking bullet situation. THIS is where distraction sneaks in, keeping me from being productive. New stuff. Discovery. Committing to decisions, actions and follow-through. 1, 2, 3… 1? Find DNS for mikelevinseo.com in GoDaddy… done.

Okay, delete all the ANAME and CNAME records on mikelevinseo.com. Keep only the NS and SOA (start of authority) entries… done.

Okay, now find that article on how to make multiple registered domains resolve to github.io under one Github account… okay done https://deanattali.com/blog/multiple-github-pages-domains/

Okay now make a new github repository that’s going to contain the static markdown pages for this new blog/journal site… okay, done. Love having these skills. Almost second nature now.

Okay we now turn on the Github github.io features. It’s got a new tab of its own called Pages. We tell it which branch to use. We tell it to enforce https.

There are 4 A records for Github’s nameservers. However the actual resolution of the site’s name is a bit of a mystery. I don’t want www. I want it to be hosted on the “naked” apex domain (registered domain). And so I look in the Github settings again… yep, you just enter it in Github settings. Woot!

It published README.md as the github.io homepage. Look into that later. But for now just start putting these journal entries starting with yesterday and today up there.

Okay, that’s done. But a final last touch or two. Namely that annoying “View on Github” badge is showing in the template. Ugh! I don’t even want to go through this customization process again. I already did this work for tictacufosightings.com, the prior site I used github.io for.

Okay, that’s done. Also added Google Analytics and Search Console tracking. That’s it for now. I’ve got the pattern down for slamming out new websites. It goes something like this:

Thu Aug 5, 2021

Make More Use of github.io for Blogging

Welcome to MikeLevinSEO.com. My name is my blog. And the best place to start is at the beginning. So here we go.

I’ve wanted to publish a book my whole life. But for whatever reasons, I never have. Yet publishing has become easier than ever. So now there’s almost legitimately no reason that if I REALLY DO want to publish, rather than just saying that, I should be ashamed of myself for not doing so, at least a more regular blog without the years-at-a-time time-outs. So this is it. Tackle each issue and make it the subject of the book itself.

It’s always too meta with me. Meta just means being self-referential. In my industry, meta tags are invisible information about the page that could work as instructions to browsers or search engines like Google. However, meta also refers to that strange quality of human consciousness that lets us say I think therefore I am. The best laid plans are laid waste by allowing your mind to go meta about a thing too soon. There I go again. Shoot, gotta get over that every time I start out trying to tap my creative abilities. There is no surer way to self-sabotage more than to think too much about what you’re doing. Just keep writing and let it flow.

1, 2, 3… 1? That is my forever-motto. I always seem to be on step #1. But hey, if you’re making up the rules as you go, why not? Oh yeah, I am always making up the rules as I go, because I rarely if ever fall into a static state. Actually, I do all the time and I’m projecting terribly by saying that I don’t. My objective in life and career is actually to avoid falling into a static state, ever. However, I know that I do. Heard of the funk? Yup, the daily grind, the routine, call it what you will. While it is safe and eases the scared animal within us all that hates the uncertainty and tomorrow, it is also the soul-crusher and the source of much unhappiness and early death.

Step 1 in this case is actually getting this first bit of typing published. You’d think that the publishing platforms and tools would have come first. I own a WordPress instance on a cheap Web host and could totally push this out there. But that site is one of the things that’s wrong right now and will be the subject of a WordPress to plain-text (markdown) migration. I don’t want a WordPress instance in my life. I don’t want the hosting issues. I don’t want the cost. And I don’t even want the general tech-liability. It’s a moving-parts thing. Simplicity is generally best. Even if things are complex under the hood, as they probably are in the method I’m moving to, I don’t ever have to see or think about them.

After I export my old blog as markdown files, which are really just text-files with bare minimum formatting instructions, I’ll be dropping them onto Github where the github.io system will automatically formats them into pretty HTML with a tool called Jekyll that’s built into Github. Really there’s probably a lot of complexity going on here. But from my perspective, I’m just going to be pushing a bunch of text-files onto Github with a git push. More on git later. Suffice to say for now, I actually write nearly every day. Writing is not the problem for me. It’s getting it out there, and I’m piggybacking on all the other tools I use for day-to-day work, the way I earn my living, in order to push the files out there without too much tech-liability or overhead added to my life. And this is good.

I’ve already got one site published on github.io currently. All I’ve got to do is to see how to make a second registered domain (apex domain) resolve (be hosted) there. So I’m going to go look at my portfolio of domains. That brings up the issue that I’ll be switching all my registered domains from GoDaddy over to NameCheap, but that’ll be another story. I need a strategy for this book publishing, and it’s going to be following:

I’m already running out of time in this writing session. And so I need to do a quick 80/20-rule evaluation:

That’s 3 metaphors. They’re my 3 daily metaphors of organizing my work, and eventually getting through everything. I need to figure out how to host a 2nd domain name on github.io. So, pick a domain… GoDaddy / My Name / My Products / Domains. Okay, in my typical tradition it’s going to be mikelevinseo.com. So click “Use My Domain” and then DNS / Manage Zones.