@if.started
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.
Structured Data Plugin
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.