I want to add 60 city pages.
for SEO purposes, is it better to create 60 pages a’la
/page-seattle
/page-dc
Or, to do it dynamically from the database?
page/seattle
page/dc
I want to add 60 city pages.
for SEO purposes, is it better to create 60 pages a’la
/page-seattle
/page-dc
Or, to do it dynamically from the database?
page/seattle
page/dc
For SEO purposes, creating dynamic pages like /page/seattle
or /page/dc
is the better option. It allows you to scale efficiently and manage content easily. You can configure unique titles, meta descriptions, and dynamic content for each city directly from the database. To do this, use Bubble’s SEO/Metatags settings to set the page title and meta description dynamically, pulling in data like the city name or other relevant details. For example, the title can be set to Current Page City's Name | Your Website Name
and the description could read, Discover tailored services in Current Page City's Name
. Ensure your database is structured to store city-specific data and include elements like Open Graph tags for social sharing previews. Also, confirm that your dynamic pages are included in the sitemap for search engine crawling.
To optimize further, use dynamic text and images on each page to display unique content for every city. This avoids duplicate content penalties and improves your search engine ranking. For example, you could display a welcome message like, “Welcome to [City Name]! Explore our services tailored to your area,” and include city-specific images. This approach keeps your app clean and manageable while ensuring an SEO-friendly structure. If you’d like personalized help setting this up or have questions about Bubble’s SEO features, feel free to reach out—I’d be happy to assist!
No
Yes
If you are going to include city and state or province and or country as well, so you can get SEO for something like ‘carpenters in Cleveland Ohio USA’ you should have the list of cities as a data type since there will be so many likely and need to create them programmatically. However, there is a free chrome extension that allows you to upload CSV for option sets to save the city/state/country as option set values. Users can not create cities with option set approach but you as developer can.
I personally use option set approach to avoid the WU costs of a search of database as well as performance since the option sets are available immediately and do not need to be fetched from the database.
One thing that can be difficult for the 100% SEO score for a setup like this is the structured data component since Bubble doesn’t allow us to reference URL values or other page element values, and instead can only reference current page ‘thing’ or ‘do a search’ to populate values in the page header for structured data. What that means is you would not be able to extract from the URL the city information or the option set to populate your structured data with that information, and so without structured data, would likely not achieve maximum SEO scores and would never achieve a carousel or rich snippet on google search results, which is the aim for any listing site.
To get around this shortcoming in Bubble you could use my plugin for structured data if the content matches what the structured data plugin has available. It allows you to extract values from URL or other on page elements to populate your structured data. This is also helpful for SPA as there really is no way to use structured data effectively in Bubble for SPA because of the limitations of the Bubble on page header input.
Currently the plugin provides structured data for the following data types:
Blog Post: Add structured data for individual blog posts.
Blog Post List: Create structured data for a collection of blog posts.
Product: Add rich structured data for single products.
Product List: Optimize structured data for multiple products.
Recipe: Implement schema for individual recipes.
Recipe List: Enhance discoverability for collections of recipes.
Organization: Add structured data for your business or organization.
FAQ: Optimize for FAQ-rich snippets.
Event List: Boost visibility for event listings.
Another issue as well with the SEO and URL, especially for formats that use URL paths instead of URL parameters, so the difference between page/seattle and page?city=seattle is that Bubble doesn’t automatically URL decode the URL paths, which doesn’t make any sense since they do it for URL parameters. Additionally they do not make it easy to change a URL path the same way they do for URL parameters when using the go to page action.
To use URL paths instead of parameters, which is recommended 100% for SEO best practices, especially for things like city details, you need to use the go to page action and send data as text, which means the page itself can not have any type of content sent, otherwise you can not send text.
The implications of not using the page content type, is that there will not be a link for the sitemap generated by Bubble for that city, which means you need to create your own sitemap and upload it…this is not too difficult but needs to be done, otherwise you will not get 100% SEO benefits.
Additionally, you would not be able to extract the values from URL path as a type of data, since for whatever reason, Bubble doesn’t do it (again, I believe this is tied into them not URL decoding the values of URL paths).
In the above screen shot, although Bubble gives an option in dropdown to select a data type, it doesn’t actually result in being recognized as that data type. This is not true for URL parameters, which for example if you selected a data type of an option set, the URL parameter value that matches the option display value, Bubble will recognize it as that option, or if select a custom data type and the URL parameter value is the unique ID of that data entry, bubble will recognize the custom data type and entry, but this is not true for URL paths.
BTW, ChatGPT doesn’t know this stuff about Bubble, so likely you won’t get all the necessary caveats of how to work with SEO in Bubble.