<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jack Reacher</title>
    <description>The latest articles on DEV Community by Jack Reacher (@jack_reacher_dc8cdc3daff3).</description>
    <link>https://dev.to/jack_reacher_dc8cdc3daff3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4129350%2Fbeb71c96-be9b-4732-8aaa-d3635b2bcef5.jpg</url>
      <title>DEV Community: Jack Reacher</title>
      <link>https://dev.to/jack_reacher_dc8cdc3daff3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jack_reacher_dc8cdc3daff3"/>
    <language>en</language>
    <item>
      <title>Building a Location-Based Directory: What I Learned About Search, UX, and SEO</title>
      <dc:creator>Jack Reacher</dc:creator>
      <pubDate>Thu, 17 Sep 2026 08:16:48 +0000</pubDate>
      <link>https://dev.to/jack_reacher_dc8cdc3daff3/building-a-location-based-directory-what-i-learned-about-search-ux-and-seo-4b6p</link>
      <guid>https://dev.to/jack_reacher_dc8cdc3daff3/building-a-location-based-directory-what-i-learned-about-search-ux-and-seo-4b6p</guid>
      <description>&lt;p&gt;Location-based websites look simple from the outside like &lt;a href="https://argxp.com/" rel="noopener noreferrer"&gt;ArgentinaXP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A user selects a city or neighborhood, sees a list of relevant profiles, opens one, and finds the information they need.&lt;/p&gt;

&lt;p&gt;But building a directory that works well for both users and search engines involves considerably more than displaying a list of pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrxcwohqwnuetbl902sw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrxcwohqwnuetbl902sw.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While working on ARGXP, a location-focused directory for Argentina, I started looking at the problem from a technical perspective: How should a directory organize locations? How should URLs be structured? How can we avoid duplicate content? And how can search and SEO work together without sacrificing user experience?&lt;/p&gt;

&lt;p&gt;Here are some of the lessons I've learned.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Location Should Be Part of the Information Architecture&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the first decisions is how locations should be represented.&lt;/p&gt;

&lt;p&gt;A basic structure might look like:&lt;/p&gt;

&lt;p&gt;Argentina&lt;br&gt;
├── Buenos Aires&lt;br&gt;
│   ├── Palermo&lt;br&gt;
│   ├── Recoleta&lt;br&gt;
│   ├── Belgrano&lt;br&gt;
│   ├── Núñez&lt;br&gt;
│   └── Puerto Madero&lt;br&gt;
└── Córdoba&lt;br&gt;
    └── Nueva Córdoba&lt;/p&gt;

&lt;p&gt;This hierarchy isn't only useful for humans.&lt;/p&gt;

&lt;p&gt;It also gives search engines a clearer understanding of how individual pages relate to one another.&lt;/p&gt;

&lt;p&gt;Instead of treating every location as an isolated page, the site becomes a connected geographic structure.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;/argentina&lt;br&gt;
/buenos-aires&lt;br&gt;
/buenos-aires/palermo&lt;br&gt;
/buenos-aires/recoleta&lt;br&gt;
/buenos-aires/belgrano&lt;/p&gt;

&lt;p&gt;The exact URL structure depends on the project, but consistency is more important than complexity.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Don't Generate Thousands of Thin Pages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is one of the biggest challenges with directory websites.&lt;/p&gt;

&lt;p&gt;Once you have:&lt;/p&gt;

&lt;p&gt;Locations&lt;br&gt;
Categories&lt;br&gt;
Filters&lt;br&gt;
Sorting&lt;br&gt;
Languages&lt;br&gt;
Services&lt;br&gt;
Price ranges&lt;/p&gt;

&lt;p&gt;it's very easy to accidentally generate thousands of URLs.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;/location/palermo&lt;br&gt;
/location/palermo?sort=price&lt;br&gt;
/location/palermo?sort=rating&lt;br&gt;
/location/palermo?category=x&lt;br&gt;
/location/palermo?category=x&amp;amp;sort=price&lt;/p&gt;

&lt;p&gt;Technically, these may all be valid pages.&lt;/p&gt;

&lt;p&gt;But that doesn't mean all of them deserve to be indexed.&lt;/p&gt;

&lt;p&gt;A better approach is to distinguish between:&lt;/p&gt;

&lt;p&gt;Useful landing pages&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;temporary search/filter states.&lt;/p&gt;

&lt;p&gt;Search and filter parameters can still be extremely useful for users without becoming separate SEO pages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Canonical URLs Carefully&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When multiple URLs can display substantially similar content, canonicalization becomes important.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;
  rel="canonical"&lt;br&gt;
  href="https://example.com/buenos-aires/palermo"&lt;br&gt;
/&amp;gt;&lt;/p&gt;

&lt;p&gt;The canonical URL should represent the primary version of the page.&lt;/p&gt;

&lt;p&gt;But canonical tags shouldn't be treated as a solution for every duplicate-page problem.&lt;/p&gt;

&lt;p&gt;It's better to design the URL architecture correctly from the beginning.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Directory Search Is a UX Problem, Not Just a Database Query&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A directory might contain hundreds or thousands of records.&lt;/p&gt;

&lt;p&gt;A simple database query could return:&lt;/p&gt;

&lt;p&gt;SELECT *&lt;br&gt;
FROM profiles&lt;br&gt;
WHERE location = 'Palermo';&lt;/p&gt;

&lt;p&gt;But the user doesn't necessarily want "all profiles."&lt;/p&gt;

&lt;p&gt;They might want:&lt;/p&gt;

&lt;p&gt;Location: Palermo&lt;br&gt;
Category: Wellness&lt;br&gt;
Language: Spanish&lt;br&gt;
Availability: Today&lt;br&gt;
Sort: Recently Updated&lt;/p&gt;

&lt;p&gt;That means your search system needs to understand multiple dimensions.&lt;/p&gt;

&lt;p&gt;A simplified API request could look like:&lt;/p&gt;

&lt;p&gt;GET /api/profiles?&lt;br&gt;
location=palermo&lt;br&gt;
&amp;amp;category=wellness&lt;br&gt;
&amp;amp;language=spanish&lt;br&gt;
&amp;amp;sort=recent&lt;/p&gt;

&lt;p&gt;The backend can then translate those parameters into an optimized database query.&lt;/p&gt;

&lt;p&gt;The important part is keeping the API predictable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Index the Fields You Search Frequently&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your directory grows, database performance becomes important.&lt;/p&gt;

&lt;p&gt;Suppose users frequently search by location and category.&lt;/p&gt;

&lt;p&gt;A database index such as:&lt;/p&gt;

&lt;p&gt;CREATE INDEX idx_profiles_location_category&lt;br&gt;
ON profiles(location_id, category_id);&lt;/p&gt;

&lt;p&gt;can make those queries much more efficient.&lt;/p&gt;

&lt;p&gt;The exact indexes should be based on real query patterns rather than assumptions.&lt;/p&gt;

&lt;p&gt;Before adding indexes everywhere, measure.&lt;/p&gt;

&lt;p&gt;Tools such as EXPLAIN can help identify expensive queries.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Profile Pages Need Stable URLs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Individual profiles should ideally have permanent, readable URLs.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;/profiles/maria-example&lt;/p&gt;

&lt;p&gt;is generally easier to understand than:&lt;/p&gt;

&lt;p&gt;/profile?id=847293&lt;/p&gt;

&lt;p&gt;If a profile changes location, the URL doesn't necessarily need to change.&lt;/p&gt;

&lt;p&gt;This is an important distinction:&lt;/p&gt;

&lt;p&gt;The profile identity and the profile's current location are different pieces of data.&lt;/p&gt;

&lt;p&gt;That makes the system more resilient as the directory changes over time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structured Data Can Help Search Engines Understand Pages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Directory websites contain structured information naturally.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Name&lt;br&gt;
Location&lt;br&gt;
Organization&lt;br&gt;
Website&lt;br&gt;
Rating&lt;br&gt;
Category&lt;br&gt;
Address&lt;br&gt;
Updated date&lt;/p&gt;

&lt;p&gt;Where appropriate and supported by the content, Schema.org structured data can communicate some of this information to search engines.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "@type": "LocalBusiness",&lt;br&gt;
  "name": "Example Business",&lt;br&gt;
  "address": {&lt;br&gt;
    "@type": "PostalAddress",&lt;br&gt;
    "addressLocality": "Buenos Aires",&lt;br&gt;
    "addressCountry": "AR"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The important rule is simple:&lt;/p&gt;

&lt;p&gt;Only mark up information that is actually present and accurate on the page.&lt;/p&gt;

&lt;p&gt;Structured data shouldn't be used to manufacture information that users can't see.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Freshness Matters More Than Most People Think&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Directories are dynamic.&lt;/p&gt;

&lt;p&gt;Profiles change.&lt;/p&gt;

&lt;p&gt;Locations change.&lt;/p&gt;

&lt;p&gt;Businesses close.&lt;/p&gt;

&lt;p&gt;New listings appear.&lt;/p&gt;

&lt;p&gt;Information becomes outdated.&lt;/p&gt;

&lt;p&gt;That means a directory needs a strategy for freshness.&lt;/p&gt;

&lt;p&gt;Useful fields can include:&lt;/p&gt;

&lt;p&gt;created_at&lt;br&gt;
updated_at&lt;br&gt;
last_verified_at&lt;br&gt;
status&lt;/p&gt;

&lt;p&gt;This makes it possible to identify stale records.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Active&lt;br&gt;
Recently updated&lt;br&gt;
Needs verification&lt;br&gt;
Inactive&lt;br&gt;
Removed&lt;/p&gt;

&lt;p&gt;The frontend can then communicate appropriate status information to users.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build Internal Linking Into the Product&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Internal linking shouldn't be an afterthought.&lt;/p&gt;

&lt;p&gt;A location page can link to:&lt;/p&gt;

&lt;p&gt;Nearby locations&lt;br&gt;
Popular profiles&lt;br&gt;
Related categories&lt;br&gt;
Other neighborhoods&lt;/p&gt;

&lt;p&gt;A profile page can link back to:&lt;/p&gt;

&lt;p&gt;Current location&lt;br&gt;
Related profiles&lt;br&gt;
Nearby locations&lt;/p&gt;

&lt;p&gt;This creates a network:&lt;/p&gt;

&lt;p&gt;Location&lt;br&gt;
   ↓&lt;br&gt;
Category&lt;br&gt;
   ↓&lt;br&gt;
Profile&lt;br&gt;
   ↓&lt;br&gt;
Related Profile&lt;br&gt;
   ↓&lt;br&gt;
Nearby Location&lt;/p&gt;

&lt;p&gt;That structure is useful for navigation and can also help search engines discover important pages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mobile UX Should Come First&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Location directories are often used from mobile devices.&lt;/p&gt;

&lt;p&gt;That changes the design priorities.&lt;/p&gt;

&lt;p&gt;A desktop interface might have:&lt;/p&gt;

&lt;p&gt;[Location] [Category] [Price] [Sort] [Search]&lt;/p&gt;

&lt;p&gt;On mobile, the same interface can become overwhelming.&lt;/p&gt;

&lt;p&gt;A better mobile experience might use:&lt;/p&gt;

&lt;p&gt;Search&lt;br&gt;
↓&lt;br&gt;
Location&lt;br&gt;
↓&lt;br&gt;
Filters&lt;br&gt;
↓&lt;br&gt;
Results&lt;/p&gt;

&lt;p&gt;Large tap targets, fast loading, readable cards, and simple navigation usually matter more than adding another visual element.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SEO and UX Should Have the Same Goal&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One mistake I see frequently is designing a page for Google first and users second.&lt;/p&gt;

&lt;p&gt;That often leads to:&lt;/p&gt;

&lt;p&gt;repetitive paragraphs&lt;br&gt;
excessive keyword usage&lt;br&gt;
unnecessary headings&lt;br&gt;
generic location descriptions&lt;br&gt;
pages created only because a keyword exists&lt;/p&gt;

&lt;p&gt;A better approach is to ask:&lt;/p&gt;

&lt;p&gt;Would this page still be useful if Google didn't exist?&lt;/p&gt;

&lt;p&gt;If the answer is yes, you're probably building something valuable.&lt;/p&gt;

&lt;p&gt;For ARGXP, that means location pages should primarily help visitors discover relevant information about Argentina and its different areas, while SEO becomes a natural result of having useful, well-structured pages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Simple Architecture Can Go a Long Way&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A directory doesn't necessarily need a complicated architecture.&lt;/p&gt;

&lt;p&gt;A simplified application could look like:&lt;/p&gt;

&lt;p&gt;Frontend&lt;br&gt;
   ↓&lt;br&gt;
Search/API Layer&lt;br&gt;
   ↓&lt;br&gt;
Application Logic&lt;br&gt;
   ↓&lt;br&gt;
Database&lt;br&gt;
   ↓&lt;br&gt;
Search Index&lt;/p&gt;

&lt;p&gt;The search index can become useful as the dataset grows.&lt;/p&gt;

&lt;p&gt;For smaller projects, database queries may be enough.&lt;/p&gt;

&lt;p&gt;For larger datasets, technologies such as Elasticsearch, OpenSearch, or Typesense can provide more advanced search capabilities.&lt;/p&gt;

&lt;p&gt;The correct solution depends on:&lt;/p&gt;

&lt;p&gt;Dataset size&lt;br&gt;
Search complexity&lt;br&gt;
Traffic&lt;br&gt;
Infrastructure&lt;br&gt;
Budget&lt;br&gt;
Latency requirements&lt;/p&gt;

&lt;p&gt;Don't introduce search infrastructure before you actually need it.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Building a location-based directory taught me that the hardest part isn't creating a page for every location.&lt;/p&gt;

&lt;p&gt;The hard part is creating a system where locations, profiles, search, SEO, and user experience all work together.&lt;/p&gt;

&lt;p&gt;A successful directory should make it easy for a user to answer three questions:&lt;/p&gt;

&lt;p&gt;Where am I looking?&lt;/p&gt;

&lt;p&gt;What options are available?&lt;/p&gt;

&lt;p&gt;Which option is relevant to me?&lt;/p&gt;

&lt;p&gt;Once those questions are handled well, the SEO architecture becomes much more natural.&lt;/p&gt;

&lt;p&gt;That's the approach I'm continuing to explore with ARGXP: building a cleaner, location-focused discovery experience for Argentina while treating SEO as part of the product architecture rather than something added after the website is built.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>seo</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
