How I Built a 50K Visitor Directory Manually in WordPress (2024)
In my latest video, I walk you through building a directory completely manually in WordPress—the same method I used in 2022 to create a site that still gets over 50,000 monthly visitors. This hands-on approach proves you don’t need to master code or complex plugins to own profitable directories if you’re willing to put in the work.
I’m documenting the entire process of creating a haunted hotels directory from scratch, covering everything from niche research to dealing with indexing challenges.
Watch the full build process below.
Why I Built This Directory Manually
I spent the last few weeks building this directory page by page, copying and pasting information into WordPress the old-fashioned way. In my video, I explain that 97% of people will think this approach is insane, but there are two solid reasons I chose this method. First, I wanted to prove that if you have no interest in learning Claude Code or Cursor, and you’re not well-versed in WordPress plugins, you can still brute force your way to owning successful directories through boring, tedious, manual work.
The second reason this method makes sense is for very small directories with maybe 200 to 300 listings. When you frame it that way, it’s actually more straightforward than many automated methods. I’ve built directories with Claude Code and multiple WordPress plugins like Geo Directory, but this manual approach remains the most simple and direct way to execute, especially for beginners.
The Haunted Hotels Niche and Keyword Research
In my video, I show how I discovered the haunted hotels niche through Ahrefs. I set specific filters: local intent, maximum keyword difficulty of five, monthly search volume between 300 and 14,999, and I searched within major cities like San Antonio and Austin. This approach helps me identify location-based keywords that smaller publishers can actually rank for.
When I found “haunted hotels,” I verified it had 32,000 total monthly searches with statewide interest and low keyword difficulty. I explain that this made it perfect for a pillar page structure, which is exactly what I was targeting. After typing “haunted hotels directory” into Google, I found Haunted Rooms America getting 10,000 monthly visitors, which validated the niche’s potential.
The monetization strategy involves using Trip Advisor’s affiliate program. When visitors discover haunted hotels on my directory and click through to Trip Advisor to book, I earn a commission. This affiliate play mirrors what made travel websites some of the most profitable sites in the informational blog era.
Setting Up Hosting and Domain
I use Hostinger’s managed WordPress hosting for all my directories. In my video, I walk through choosing the Business plan, which supports 100,000 monthly visitors and allows 50 websites—perfect since I build multiple directories. The plan includes free automatic website migration, pre-built templates, a free domain for one year, and unlimited free SSL.
I show viewers how to claim the free domain during WordPress installation and apply the coupon code “FREYCHU” for 10% off any hosting plan. The entire setup process through Hostinger takes just a few minutes, and you’re ready to start building immediately.
Scraping and Cleaning 33,000 Rows Down to 322
I used Outscraper to gather data, but the challenge with haunted hotels is that there’s no specific Google Maps category for them. I explain in my video that scraping all hotels in America would have been costly and time-consuming with over 116,000 listings. Instead, I created “haunted hotels” as a new category in Outscraper, which initially returned about 33,000 rows.
The cleaning process I demonstrate involves multiple stages. First, I manually removed obviously irrelevant listings, permanently or temporarily closed businesses, and anything without an address. This brought the count down significantly, but I still had around 18,000 listings to work through.
Next, I removed major hotel chains like Super 8, Motel 6, and Marriott because big franchise hotels are less likely to be historically haunted. After about 15 minutes of this manual filtering, I whittled the list down to about 7,000 rows.
Deep Data Cleaning with Enrich.Directory
In my video, I showcase how I used the review enricher tool from enrich.directory, a software I co-created, to automate the verification process. I set up three keyword searches: “haunted,” “paranormal,” and “ghosts.” The tool scanned Google reviews for each listing and provided boolean outputs indicating whether multiple reviews mentioned these terms.
I explain my reasoning: if only one review mentioned paranormal activity, that’s not credible enough for my directory. I wanted multiple reviews explicitly stating the hotel was haunted to ensure I was only including legitimately reputable haunted hotels. This filtering process eventually brought my final count down to 322 verified haunted hotels across America.
The entire enrichment process cost about $10.05 through Outscraper for the initial scrape, plus credits for the review enrichment. While this investment might seem steep, it saved me potentially hundreds of hours of manual research and verification.
Importing Images to WordPress Media Library
One of the most time-consuming aspects of my 2022 directory build was handling images. Back then, I would screenshot each image and upload it manually. In my video, I demonstrate a much smarter approach using WP All Import, a paid plugin that cost $100.
I prepared a CSV with image URLs from Outscraper’s street view photos, along with optimized alt text. I used the concatenate function in Google Sheets to create descriptive alt text following the format: “[Hotel Name] haunted hotel in [City], [State].” This structure helps with Google Images visibility and overall SEO.
Before importing, I installed EWWW Image Optimizer to automatically resize images as they came in, preventing my website from slowing down. I encountered some issues with commas in the alt text during the first import attempt, but after removing them and re-importing, I successfully brought 278 out of 322 images into my WordPress media library.
Data Enrichment with Claude Code
In my video, I show how I used Claude Code to generate high-quality descriptions for every haunted hotel. I created a simple web searching agent that used the hotel name, full address, and website to conduct Google searches and compile compelling stories about each location’s haunted history.
This approach saved me from manually researching each hotel or risking AI hallucinations by just prompting ChatGPT directly. The agent pulled real information from web searches and created unique, engaging descriptions that tell the story behind each haunted hotel, including details about the paranormal phenomena reported there.
I also had Claude Code generate state-specific summaries using the phenomena types and hotel descriptions in my CSV. After a few rounds of prompting to ensure each state description was unique and compelling, I had customized introductions for all 50 state pages. This entire process took about 15-20 minutes versus what could have been days of manual writing.
Creating and Designing the Pillar Page Template
The execution for this directory is straightforward: roughly 50 pages where every page is a state pillar page. In my video, I walk through creating the first location page for Alabama, which becomes the template for all other states. Each page includes a haunted-themed header image, an H1 tag targeting “haunted hotels in [State],” and an H2 targeting “haunted places to stay in [State].”
I added a table of contents widget to help with mobile navigation, which is crucial since 80% of my directory traffic comes from mobile devices. Each listing includes the hotel name as an H3, an image from the media library, the full address, reported phenomena types, reviews from actual guests, and the generated description explaining the haunted history.
I used Elementor Pro as my WordPress theme, though you can achieve similar results with the free Gutenberg editor. The key was creating a clean, consistent layout that would work across all 50 state pages.
Implementing a Simple Internal Linking Strategy
At the bottom of every state page, I implemented what I call a spiderweb internal linking strategy. In my video, I demonstrate how I simply listed all 50 states, each linking to their respective haunted hotels page. This creates interconnected relevance signals for Google while giving users quick access to other locations.
I asked ChatGPT to generate the URL structure for all 50 states following the pattern “haunted-hotels-in-[state],” then I created a spreadsheet matching each state name to its URL. While linking each state manually was tedious, I only had to do it once. After saving this section as a template, I could reuse it across all location pages.
This internal linking structure is critical for SEO. It helps Google understand the site hierarchy and how pages relate to each other, while also improving crawlability and indexation of your entire directory.
Adding City-Specific Headers for Local SEO
After building all 50 state pages, I realized I had missed an important on-page SEO element. In my video, I explain that highly searched keywords include the city name, like “haunted hotels San Diego” or “haunted hotels Chicago.” Initially, I only had the hotel name with the city at the end, which didn’t fully target these location-specific keywords.
I went back through every state page and added H2 headers for each city that had haunted hotel listings. For example, on the Illinois page, I added “Haunted Hotels in Chicago, Illinois” above the first Chicago listing. This small change significantly improved my targeting of high-volume local search queries.
While this added several hours of work, it was a necessary SEO optimization. I considered only adding headers for cities with the highest search volume, but ultimately decided to include every city where I had listings to maximize my local SEO coverage.
Designing the Homepage and Foundational Pages
For the homepage, I experimented with AI tools to speed up the design process. I used Lovable to generate a visual representation of what an SEO-optimized haunted hotel directory should look like, then recreated that design in WordPress. The homepage includes a dramatic haunted hotel header image, compelling copy explaining our verification process, and the same state-by-state directory links.
I added icon boxes highlighting “300+ Hotels” and other key features, plus an FAQ section with schema markup to potentially earn rich snippets in search results. The FAQ section addresses common questions about haunted hotels and our directory’s methodology.
I kept the About Us page simple, using ChatGPT to craft a compelling origin story for the directory. The Contact Us page uses Elementor’s form widget connected to a dedicated Gmail account (hauntedhotelsofamerica@gmail.com). These foundational pages establish credibility and provide ways for users to engage with the site.
My Indexing Challenge and Troubleshooting Steps
In my video, I’m transparent about the indexing issues I encountered after submitting my sitemap on September 18th. Google found 51 pages, but instead of indexing my state location pages, it indexed deleted posts from my WP All Import image uploads. Ahrefs showed 108 indexed pages, all leading to 404 errors.
I took several steps to resolve this. First, I installed Yoast SEO to generate a cleaner sitemap and resubmitted it to Google Search Console. Second, I used Ahrefs’ free webmaster tools to run a site audit, which revealed broken internal links pointing to states where I had no haunted hotels (Delaware, Hawaii, Utah, Rhode Island, and North Dakota). I immediately fixed these broken links.
Third, I experimented with driving initial traffic through Reddit to send user engagement signals to Google. While not guaranteed to work, I explain that intuitively this could encourage Google to crawl and index the correct pages. I’m being patient with the process, as long as the on-page SEO fundamentals are solid—good internal linking, no orphan pages, no broken links, and avoiding thin content.
Tools and Resources for Manual Directory Building
Throughout my build, I relied on several key tools. For hosting, I used Hostinger’s managed WordPress hosting with the Business plan. My WordPress stack included Elementor Pro for design, WP All Import for bulk image importing, and EWWW Image Optimizer to automatically compress images.
For data scraping and enrichment, I used Outscraper for the initial data collection and enrich.directory for review-based verification. Claude Code through Cursor handled my data enrichment automation, generating descriptions and summaries that would have taken days to write manually.
The total build time was approximately 25 hours spread over a week, with most of that time spent copying and pasting listing information into WordPress. While tedious, this manual approach required minimal technical knowledge and zero coding experience.
Key Takeaways from This Manual Build
This build demonstrates that you don’t need advanced technical skills to create a functional, SEO-optimized directory. The manual approach works best for smaller directories under 500 listings, and it’s particularly effective when combined with strategic AI use for data enrichment and content creation.
The most important factors for success are thorough keyword research, rigorous data cleaning to ensure quality listings, proper on-page SEO implementation, and a strong internal linking structure. In my video, I show that even with indexing challenges, following SEO fundamentals gives your directory the best chance of ranking and attracting organic traffic.
While this method is time-intensive, it’s proven. My 2022 directory built the exact same way still generates over 50,000 monthly visitors and around $2,000 per month. If you’re willing to put in the manual work and you’ve validated your niche through proper keyword research, this approach can build you a profitable, sustainable directory business.
