This week, you may have noticed that I changed Jab’s Lab to be hosted at blog.coryjbara.com. Previously, it was hosted at coryjbara.substack.com. When you click on a prior substack link, it redirects to blog.coryjbara.com.
What does that mean for Jab’s Lab? Not much, although it is my way of beginning to own my content more. When someone sees blog.coryjbara.com, it’s clear that it’s hosted under coryjbara.com. If they receive a link to read Jab’s Lab, they may decide to see what coryjbara.com holds, and check out this Cory Jbara guy.
While Substack is a great platform, there’s something very freeing about Jab’s Lab being a subdomain on my site and not on a Substack subdomain. It feels like I own the content, and I have a lot of pride knowing that it’s associated with my website.
Long story short, it makes Jab’s Lab feel like a legit blog, not just a side project.
And as I was making this change, it reminded me to finish this post I’ve had in my drafts for a while. So let’s dive in.
Links are everywhere. We see them and click on them constantly. They each tell a story and give you so much information, if you only know how to read them. I am of the firm belief that parsing and understanding URLs is an important skill in 2025, given their ubiquity and variety. Links are the building blocks of the internet, and hopefully after reading this post, you will understand these building blocks a bit better.
There will be a lot of links in this article, and hopefully by reading, you will begin to understand them a bit better. I would encourage you to read on both desktop and mobile to see how links are loaded and managed. Also, note that I use “URL” and “link” interchangeably throughout this article, as they are basically synonyms1.
The Structure of a Link
Let’s start with the structure of a link, because understanding this will make it much easier to understand the rest of the article. A link is made up of several components, and each have a role.
I had Claude build a quick and easy URL Visualization Tool that helps you visualize the different components of a link. It works for any link, so try it out. Let’s take my first blog post as an example link: https://blog.coryjbara.com/p/welcome-to-jabs-lab.
The Protocol — Often http or https, this specifies how data is transferred. The main note here is to only enter passwords or credit card info on URLs with https2.
The Subdomain — Optional, The optional prefix to a domain name. It can be www, blog, or anything else really, and it specifies a different app than that hosted at the main domain.
The Domain — The main identifier of a website.
The Top Level Domain (TLD) — The type or country of a website (.org, .com, .gov, .uk).
The Port — Optional, very rarely will you see these, it’s technical and you have no need to worry about them.
The Path — Perhaps the most important part of a link. It is what routes you to the specific page on the website.
The Query Parameters — Anything after the “?” in a link. It’s a set of key value pairs that can give context information to the website. These are incredibly powerful, and can be used for a number of things.
The Fragment — Anything after the # in a link. This redirects to a specific part of a page3.
How should you read a link?
Given these components of a link, how should you go about reading it?
I start by looking at the domain. Every domain is owned by someone, and typically purchased for a purpose4. These domain names are mapped by DNS Servers, which essentially say “you gave me a link, I’ll tell you where it is on the internet”. That is out of scope for this post, but it’s a fascinating rabbit hole if you’re curious.
The subdomain may be a different website, but is still owned by the owner of the domain. For example, Jab’s Lab used to have the full domain coryjbara.substack.com, where coryjbara was the subdomain and substack was the domain. Now, it’s blog.coryjbara.com, where blog is the subdomain and coryjbara is the domain. They both share the same top-level domain .com. The top-level domain shows you what kind of site it is or what country it is from5.
The full domain (subdomain + domain + TLD, or canonically subdomain.domain.tld) tells the internet which website to send you. And once you’re on that site, the path tells you which page to open to.
Imagine the internet is a library. The domain is the book series, the subdomain is the specific book in the series, and the path is which page to go to in the book.
Taken together, blog.coryjbara.com is a collection of webpages. Which page you decide to go to is determined by the path. There is a home page, where you can see a list of my published articles (technically the path is just “/”). If you click on Archive or About, the path will update to be “/archive” and “/about”, respectively. Clicking Home removes the path entirely. Each article is also published at a certain path. The base article path on Substack is “/p/article_identifier”. When you click on different articles, you’ll notice that the “article_identifier” changes for each, but the structure of the path is the same. And regardless of the path, you are still on my blog’s website.
Most links on the internet have some kind of identifier (ID). When the website opens a page with an ID, it is often a template page with no data. The website then fetches the data for a given ID and renders it in a structured way. For example, on Reddit, communities (subreddits) are hosted at a template path called /r/subreddit. The “r” specifies the template, and the ID is which community to open. Take https://www.reddit.com/r/AskReddit for example. The full path is /r/AskReddit, and the ID of the community is AskReddit. Similarly, users pages can be found at the path /u/username. Once you realize the path structure, you can begin to read the story of the URL.
Lastly is query params, which can be incredibly powerful. We will talk about them in more detail in a bit, but just note that everything past the ? on a link is a pair of keys and values. Not all links have query params, but they often give the website more context information that it needs to load the right data or track the right things. For example, Google searches have a query param “q” (which stands for “query”). You can initiate your own Google search by doing https://www.google.com/search?q=URL (replace “URL” with your search term). Most searches end up adding one or more query params to a link. This allows you to pass optional information into a website that affects the loaded state of the website.
Some Examples
Most people can look at a link and know which website it goes to. But there is so much more rich information contained in a link.
Let’s take https://x.com/CoryJbara/status/1889037109631258920 as an example. This is a tweet6 I posted when I launched Jab’s Lab. Let’s break down the link.
https — a secure link
x.com — this link will open Elon’s playground, aka x.com
/CoryJbara/status/1889037109631258920 — this path is for a specific tweet. The user’s name is CoryJbara, and it is a specific link to a status. The route is a “user’s tweet template” page, with the user being CoryJbara and the Tweet ID being 1889037109631258920.
An interesting part of this path is that the username doesn’t actually matter. You can go to the following link, and although I’ve replaced “CoryJbara” with “anyone”, it still works (it redirects to the real tweet): https://x.com/anyone/status/1889037109631258920.
Now let’s check out a more complicated link: https://www.linkedin.com/posts/cory-jbara_mba-chicagobooth-classof2025-activity-7308176056086089730-if-P?utm_source=social_share_send&utm_medium=member_desktop_web&rcm=ACoAABAF8CwB-_k92Mp4gMaI1eNQLvY_OMkIkiA
What’s going on here?
https — a secure link
www — the subdomain, www is pretty standard. If you omit this and just do linkedin.com, it will likely redirect you to www.linkedin.com.
linkedin.com — a professional social network
/posts/cory-jbara_mba-chicagobooth-classof2025-activity-7308176056086089730-if-P — this is where it gets interesting. The /posts path shows you that it’s the “post template” LinkedIn. The Post ID7 is “cory-jbara_mba-chicagobooth-classof2025-activity-7308176056086089730-if-P”. I am not sure why they structured the ID like this, but it may be for SEO8 purposes.
? — Anything after a question mark in a link is called the “query parameters” (query params). This is a set of keys and values, each separated by “&”, individually structured like “key=value”. They are often used for tracking purposes, but they have a lot of other uses as well. The query params in the link above are:
Key: utm_source → Value: social_share_send — When the website sees this, they know that the link came from someone clicking “Share” on LinkedIn.
Key: utm_medium → Value: member_desktop_web — They know that I clicked “Share” specifically on the desktop web client
Key: rcm → Value: ACoAABAF8CwB-_k92Mp4gMaI1eNQLvY_OMkIkiA — I don’t quite know what this is, but I know it’s related to tracking.
The most interesting parts of this link in my mind are the path (i.e. which post the link should open) and the query params (in this case: tracking data associated with the specific web request).
While there are standards for how links are structured, a website can structure a link however it wants. There are no limitations as long as the format matches the 8 components described in the intro above.
The Power of a Link
Now that you know about the structure of a link and have seen some examples, we can get into the true power: what you can do with it.
Deeplinks
A “deeplink” is a link that opens directly into a specific page of a mobile app. For example, if you click on my tweet above on a phone, it will not open your web browser. It will open the X app directly to the tweet9. This can be incredibly powerful to drop users into a specific app context, and I think is underutilized across the broader ecosystem. Another example: by leveraging deeplinks with query params to Venmo, I was able to create a pre-filled Venmo link in splitit.dev that has the recipient, amount, and memo.
Sharing Links
Almost every social app has a “Share” button. Often times, this is just a friendly way to package or send a link. At the end of the day, it leverages the power of a link to provide specific context to someone else’s app.
Let’s take Spotify as an example. When I click “Share” for the Noah Kahan song “Homesick”, I get the following link: https://open.spotify.com/track/0jkzxxDG8z3Y5OmfNl1VM0?si=f130ed80f0e4486d.
Clicking on this link from anywhere will likely deeplink to Spotify (if you have the app installed) or open a web browser to spotify.com. Knowing what you know now, you can see that the track ID is “0jkzxxDG8z3Y5OmfNl1VM0”, which corresponds with the specific song.
It’s interesting to see how links are processed by different systems (i.e. using query params vs. path params and what they look like). For example, the same song on YouTube looks like https://www.youtube.com/watch?v=Gl5UMdG_oNY. When YouTube loads, it has the path template “/watch”, meaning it will play a video. It uses a query param “v=Gl5UMdG_oNY” to know which video to play (the ”v” likely stands for “video”). In the database, the “Gl5UMdG_oNY” is an ID for Noah Kahan’s Homesick video, just as “0jkzxxDG8z3Y5OmfNl1VM0” is the Spotify track ID for the song.
Notice that when you go to the YouTube link, it will append a new query param “ab_channel=NoahKahan-Topic” that shows you the channel. Not a bad thing, just interesting that they add to the URL after it loads.
Back to sharing, when I click “Share” for the same Noah Kahan song above (instead of copying the URL bar), I get a different share link: https://youtu.be/Gl5UMdG_oNY?si=qF-jw4vmMnwFekFO.
youtu.be is a different domain name that redirects to the YouTube watch page. Notice that the “/Gl5UMdG_oNY” in the path is the same identifier as the query param “v=” above. It’s loading the same video, just in a slightly different way.
When you click the link, your browser tries to fetch that link, YouTube tells your browser to redirect to the full link, and you land on the watch template page with the right query param. Before it redirects you, however, it records some tracking information about your click, which is pretty common in shared links.
imagine the “si=” query param stands for “Share Identifier” so they can attribute everyone who follows that link to my Google account. They know that anyone who clicked the link initially got the link from me. Spotify uses the same “si=” query param, as you can see in the link in the previous section. They probably copied YouTube’s format, though they could have called it anything, as long as their link processor knew about the change.
Integrations
As I was writing this article, I pasted a lot of links in, and it was cool to see how Substack handled many of them.
Substack must have built a Spotify integration, so when I paste the following link into my post: https://open.spotify.com/track/0jkzxxDG8z3Y5OmfNl1VM0?si=d19586741ed94bd8, it generates a preview:
As Noah Kahan would say, that makes a lot of sense. Substack has built a great system of recognizing links, understanding their context, and embedding them into articles.
They built a YouTube integration as well, which takes the link and embeds it into this blog post:
They also launched the ability to link directly to another Substack post within a post, which looks pretty neat:
While this just mentions Substack’s ability to manage links, I’ve seen Notion and several other sites begin to do a pretty good job of embedding or at least giving context about a link instead of showing the raw URL. Which leads us to OpenGraph.
OpenGraph Previews
OpenGraph previews from a website can be incredibly powerful. Let’s take that same Noah Kahan Spotify link as an example. Many websites and apps are able to understand the link, fetch some metadata, and render a preview for it. When I send the link in iMessage, for example, it renders like this:
We as humans are good at processing visual information, but not so great at processing text. This is why OpenGraph is a perfect middle ground. It gives developers the ability to render a visual representation of a shared link. I’m glad this is becoming more common across all sharing platforms instead of just showing raw URLs.
I encourage anyone who adds a “Share” functionality in their app to leverage OpenGraph to have the previews render in a better way across all sharing platforms. I did this with splitit.dev and it made it much easier for people to see what the link is before clicking.
If you want to see how your links will look when you send them, you can check out opengraph.xyz. There, you can paste a link and see what the OpenGraph metadata entails, and how previews will look on different platforms.
QR Codes
The last thing I’ll mention are QR codes, which have gained incredible popularity since 2020. While QR codes are not exclusively used for links, in practice, they are very rarely used for anything but links.
Let me simplify it for you. A QR code is just an encoded link to a specific webpage. For example, the QR code below is just an encoded link to my Welcome to Jab’s Lab post. When you scan it with your camera, it opens the encoded link10. Sometimes these are deeplinks, which is why they will open directly in an app instead of your browser. Pretty neat.
QR codes are just another easy way of sharing links with people. Scanning a QR code of a link is no different than your friend texting you a link and you clicking on it. It’s just an easier way to access a link than typing.
Why are you telling us this, Cory?
Links are incredible. They pack so much power into a very short string of text. They are everywhere. I’m sure we all click on more than 10 links a day. And knowing how they work is incredibly valuable. Not just for people building the tech, but also for anyone who uses the internet.
The main takeaways:
Links are everywhere. We click them all the time. Take a look and try to understand what the link will open before you click.
It’s good to know what you’re clicking on. If the domain doesn’t match up with what you’re expecting from a click, be wary of a scam.
Websites can redirect several times before actually landing you on a page. Every time it redirects, it is probably capturing some data about you to use elsewhere. This sounds ominous, but it is happening whether you like it or not. So just be conscious about the domain and query params of the links you click.
If you are building a web app or mobile app, it’s incredibly useful to have a consistent and understandable path and query param structure. In addition, add OpenGraph tags to enable link previews. And if you have a web + mobile app, optimize for mobile web, but also include deeplinks when appropriate.
Links are the building blocks of the internet, and I could talk about them for hours. Since you only have so much time in your Tuesday, however, I’ll end this post here. I hope this has given you some sense into what is possible with links, though this just scratches the surface. I am happy to talk more about how you can leverage links and sharing to boost your application. And if you have any questions, please post them below! I’ll do my best to answer.
And next time you see a link, don’t be intimidated, because you know what it’s doing.
Until next week,
Cory
While they are colloquially interchangeable, there is a slight technical difference. A URL is the actual string of text, and a link is something that you can click from a webpage or email. For example, try clicking on this link:
“But Cory, the text said google.com!”
If you did click it, you’d realize that the underlying URL was to a Rick Roll. This is how a lot of scams are carried out. Even though the tech of the link presented itself as google.com, the actual link was to YouTube.
You should be wary of every link you click on the internet, because even if it looks innocuous, it may not be the link you expected. If you’re on Chrome on desktop, when you hover over a link, a little grey bubble will appear in the bottom left corner of your browser that shows you the full link. I like to look at these before I go anywhere online. I want to know where I’m about to be redirected. And once I land on a page, I make sure that the domain name matches the domain I expected. If you check these things, you are much less likely to be scammed online.
Links with the https protocol are secure links, meaning that the site is encrypted. So any information you enter into the site will be securely transmitted to the server. If this makes no sense to you, don’t worry. Just know that you should only submit passwords on sites with https.
For example, if you click on this #3 footnote, you will see that it appended a #footnote-3 to the link in your browser. Sharing a link with a fragment will take you right to a specific portion of the page. These aren’t used much for shared links, but can be useful.
I personally have bought too many domain names recently. I may start banning myself from buying new domains until I’ve launched a website on the domain I bought previously.
This is less true today, since different sites use TLDs like .io, .ly, or .ai no matter which country they are launched from (often the US). Since domain name registration gives revenue back to the associated country, countries like Lybia and Anguila are really cashing in on the trends in tech with .ly and .ai domain names.
What are we supposed to call them now? An X? I’m going to call it a tweet. I miss Twitter. I miss the logo, the colors, everything. It felt like a much friendlier place than X.
Or rather the “slug” — a human readable post ID that maps to a specific article in the database.
Search Engine Optimization
I won’t go into how this is done technically, though if you’re curious, this is a solid blog post: https://medium.com/@Jasonvdmerwe/a-crash-course-in-deeplinking-75aed275b01d. I am pasting the link specifically here so you can see how it’s structured for a blog post. This post is hosted on Medium, written by a guy with handle @Jasonvdmerwe, and is titled something like “A Crash Course In Deeplinking”. It’s cool to see how much information you can get just by looking at a URL.
Be wary though, often times QR codes will go through several redirects that capture data on you. I promise I did not do this with this QR code, but it happens more than you think.