# How to Make Blog Post Crawlable?

**URL:** <https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338>\
**Category:** Database\
**Created:** [October 17, 2025, 11:58am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338 "2025-10-17T11:58:02Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 17, 2025, 11:58am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/1 "2025-10-17T11:58:02Z")

</div>

Hi everyone,

I’m trying to optimize my Bubble app for SEO and running into an issue with blog post content not appearing in the page source for search engine crawlers.

**My Setup:**

- Static blog page (not dynamic)

- Text elements with HTML tags set (h1, h2, normal)

- “Expose the type of tags for text elements” enabled in Settings \> SEO/metatags

- Page-level SEO settings configured (title, description, etc.)

- Blog page included in sitemap

**The Problem:** When I view the page source (View → Source), the `<body>` tag is essentially empty - only error handling scripts appear. The actual blog content (headings, paragraphs) is not in the initial HTML, which means search engine crawlers can’t see it.

I also tried:

- Using HTML elements with the blog content pasted in

- Unchecking “Wait to render this element until it is visible”

- Ensuring HTML elements are directly on the page (not nested in groups)

None of these approaches resulted in the content appearing in the page source.

**My Questions:**

1. Is there a way to get text content to render in the initial HTML (server-side) rather than being injected by JavaScript?

2. Are HTML elements supposed to appear in the page source, or are they also client-side rendered?

3. What’s the recommended approach for making blog content crawlable in Bubble without using a prerendering service like [Prerender.io](http://Prerender.io)?

**What I’m NOT looking for:**

- Meta tags (these are working fine)

- Schema markup (already implemented)

- Dynamic page solutions (my blog is already static)

Any guidance would be really appreciated. Thanks!

---

<div class="post-metadata">

**Author:** ![boston85719](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/boston85719/32/77286_2.png) [@boston85719](https://forum.bubble.io/u/boston85719)\
**Post date:** [October 17, 2025, 12:01pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/2 "2025-10-17T12:01:10Z")

</div>

Everything, html elements included, need to wait for server to send info and JavaScript to run for them to available

---

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 17, 2025, 2:04pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/3 "2025-10-17T14:04:14Z")

</div>

Sorry I don’t understand? Are you saying that after I push the site live the text will be viewable in my page source after some time? I thought it would show immediately after pushing live?

---

<div class="post-metadata">

**Author:** ![boston85719](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/boston85719/32/77286_2.png) [@boston85719](https://forum.bubble.io/u/boston85719)\
**Post date:** [October 17, 2025, 3:00pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/4 "2025-10-17T15:00:38Z")

</div>

Bubble is JavaScript based, needs to fetch from server all information like what elements, what static text, what dynamic values are needed, then it runs JavaScript to render.

this means html elements are rendered client side.

---

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 17, 2025, 8:11pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/5 "2025-10-17T20:11:32Z")

</div>

Ok, so basically Bubble can’t show text to web crawlers - which means it’s pointless building an app with Bubble if you want to be found?!

---

<div class="post-metadata">

**Author:** ![msgiblin](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/msgiblin/32/119904_2.png) [@msgiblin](https://forum.bubble.io/u/msgiblin)\
**Post date:** [October 17, 2025, 9:02pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/6 "2025-10-17T21:02:34Z")

</div>

(Edited as I just saw you said you had structured data already) - can you confirm you’re using the ArticleBody tag in your structured data with the actual blog text?

In general I’ve found crawlers know how to navigate/get data from Javascript based sites, and I haven’t had issues with Google properly indexing mine.

---

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 17, 2025, 9:48pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/7 "2025-10-17T21:48:05Z")

</div>

> [@msgiblin](#):
>
> ArticleBody tag

I’m not sure what the ArticleBody tag is, the only HTML tag I have available are ‘Normal, H1,H2,H3,H4,H5,H6.

None of those work.

Also, if you go to your webpage, right click and view source, you will see that the text which is on the page is not showing. Bubble hides all text which is not in the header html.

---

<div class="post-metadata">

**Author:** ![msgiblin](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/msgiblin/32/119904_2.png) [@msgiblin](https://forum.bubble.io/u/msgiblin)\
**Post date:** [October 17, 2025, 9:51pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/8 "2025-10-17T21:51:19Z")

</div>

> [@darren.james7518](#):
>
> Bubble hides all text which is not in the header html.

Ah got it, when you said you had SEO set up, I thought you meant Structured Data. You’ll want to implement structured data in the Head of your page, which includes tags for title, description, articleBody (the text of the blog), etc:

> **[BlogPosting - Schema.org Type](https://schema.org/BlogPosting)**
>
> Schema.org Type: BlogPosting - A blog post.

---

<div class="post-metadata">

**Author:** ![msgiblin](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/msgiblin/32/119904_2.png) [@msgiblin](https://forum.bubble.io/u/msgiblin)\
**Post date:** [October 17, 2025, 9:59pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/9 "2025-10-17T21:59:32Z")

</div>

This is where that Structured data should go:

 ![1000042376](https://us1.discourse-cdn.com/bubble/original/3X/b/7/b727bbd5b38beb871932253ca714d0dda7551f7d.jpeg)

And it’ll look like this (code snippets emphasize the content that needs to be dynamic)

{

“@context”: “[https://schema.org](https://schema.org)”,

“@type”: “BlogPosting”,

“headline”: “`current page's headline`”,

“author”: {

“@type”: “Person”,

“name”: “`current page's author`”

},

“datePublished”: “`current page's date`”,

“articleBody”: “`current page's text`”,

“interactionStatistic”: {

“@type”: “InteractionCounter”,

“interactionType”: “[https://schema.org/Comment”](https://schema.org/Comment%E2%80%9D),

“userInteractionCount”: “`current page's comment count`”

}

}

---

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 17, 2025, 10:00pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/10 "2025-10-17T22:00:25Z")

</div>

I did try that but then the text in the head html is displayed on the page, effectively duplicateing the page text and looking ugly.

That link doesn’t work.

I’ve cancelled my Bubble plan, I feel they should have been much more open with the limitations and maybe help with videos on how to make a site searchable - it seems the most basic of requirements.

I’ve been coding Bubble for 4 years, I am experienced but never previously needed to be found in search.

---

<div class="post-metadata">

**Author:** ![msgiblin](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/msgiblin/32/119904_2.png) [@msgiblin](https://forum.bubble.io/u/msgiblin)\
**Post date:** [October 17, 2025, 10:03pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/11 "2025-10-17T22:03:21Z")

</div>

There was a typo in the link, I’ve corrected it above as well: [BlogPosting - Schema.org Type](https://schema.org/BlogPosting)

I highly recommend you check this out and the example content I included above, that should get you where you need to be.

---

<div class="post-metadata">

**Author:** ![msgiblin](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/msgiblin/32/119904_2.png) [@msgiblin](https://forum.bubble.io/u/msgiblin)\
**Post date:** [October 17, 2025, 10:07pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/12 "2025-10-17T22:07:19Z")

</div>

The other thing I’ll mention is these tools only make it easier for Google /crawlers to know what to crawl - but it doesn’t get you in Google’s search results automatically. You’ll still want to create an account on Gogle Search console, submit your sitemap, and wait for it to Index / decide if the content is rankable:

> **[Google Search Console](https://search.google.com/search-console/about)**

---

<div class="post-metadata">

**Author:** ![boston85719](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/boston85719/32/77286_2.png) [@boston85719](https://forum.bubble.io/u/boston85719)\
**Post date:** [October 18, 2025, 3:25am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/13 "2025-10-18T03:25:46Z")

</div>

Everything for on page SEO provided by bubble works perfectly, including structured data. There is nothing about bubble that makes it not possible to be found, crawled or indexed, just improper set ups.

It’s a shame after 4 years of building on bubble you chose to cancel your plan.

Do you still need help setting up SEO properly? I assumed when you posted you had it all set up you did and you issue was about having html display your page content before JavaScript executed. I don’t want bubble to falsely have a bad reputation for things it does well.

---

<div class="post-metadata">

**Author:** ![emir.ozgun](https://avatars.discourse-cdn.com/v4/letter/e/b38774/32.png) [@emir.ozgun](https://forum.bubble.io/u/emir.ozgun)\
**Post date:** [October 18, 2025, 3:30am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/14 "2025-10-18T03:30:09Z")

</div>

Yeah I get pretty good crawls even if I leave descriptions and so empty. Only problem is when user clicks sometimes they don’t wait

---

<div class="post-metadata">

**Author:** ![boston85719](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/boston85719/32/77286_2.png) [@boston85719](https://forum.bubble.io/u/boston85719)\
**Post date:** [October 18, 2025, 3:32am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/15 "2025-10-18T03:32:55Z")

</div>

> [@emir.ozgun](#):
>
> Only problem is when user clicks sometimes they don’t wait

Neither do bots used by Google to crawl

---

<div class="post-metadata">

**Author:** ![randomanon](https://avatars.discourse-cdn.com/v4/letter/r/8491ac/32.png) [@randomanon](https://forum.bubble.io/u/randomanon)\
**Post date:** [October 18, 2025, 6:39am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/16 "2025-10-18T06:39:54Z")

</div>

If you put dynamic content (e.g. current page’s X) in the structured data, doesn’t that lead to the same “problem?” Or does it eventually get rendered/indexed by the bots?

---

<div class="post-metadata">

**Author:** ![boston85719](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/boston85719/32/77286_2.png) [@boston85719](https://forum.bubble.io/u/boston85719)\
**Post date:** [October 18, 2025, 8:06am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/17 "2025-10-18T08:06:19Z")

</div>

I would suppose it could depend on how ‘heavy’ that data entry is, but in my experience, I’ve never had a structured data using dynamic values not get picked up properly by structured data testing tools, but that is not the same as verifying if google bots pick up on it, but again, in my experience testing that using some api calls to mimic a google bot, the content is picked up, as I believe Bubble is treating SEO stuff as server side, which might be why they do not expose it on free plans.

This might also be why Bubble removed the ability to reference in structured data in page header other elements on page values and are forced to use ‘current page thing’ or a ‘do a search for’.

---

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 19, 2025, 4:41am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/18 "2025-10-19T04:41:24Z")

</div>

Thank you but I’m still unclear on the practical solution here. When I view the page source of my Bubble blog pages, the body content is completely empty (only JavaScript appears) - it is my understanding that if the body content is invisible to Google/AI then the crawlers won’t be able to index it. I’ve tried:

- Text elements with proper HTML tags (H1, H2, etc.)

- HTML elements with content pasted in

- Structured data in the page header

You mentioned structured data works. But @randomanon asked a great question that didn’t get answered: _“If you put dynamic content (e.g. current page’s X) in the structured data, doesn’t that lead to the same ‘problem?’”_

Doesn’t dynamic structured data also require JavaScript to execute before it populates?

---

<div class="post-metadata">

**Author:** ![darren.james7518](https://avatars.discourse-cdn.com/v4/letter/d/a3d4f5/32.png) [@darren.james7518](https://forum.bubble.io/u/darren.james7518)\
**Post date:** [October 19, 2025, 4:47am UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/19 "2025-10-19T04:47:58Z")

</div>

Thanks for the link. The documentation shows:

- **What** the property is: `articleBody` = Text content

- **Where** to put it: In the `<head>` inside JSON-LD script tag

- **But NOT:** Whether search engines actually index this content

Looking at the example:

```auto
{
  "@type": "BlogPosting",
  "headline": "Library Metadata Evolution: The Final Mile",
  "articleBody": "When Schema.org arrived...", // FULL TEXT HERE
  "datePublished": "2019-05-14",
  ...
}

```

**BUT** - the example ALSO has the content in the `<body>`:

html

```auto
<section itemprop="articleBody">
  <h2>Introduction</h2>
  <p>I have been rattling around...</p>
</section>

```

So the example shows both - schema markup **AND** body content. It doesn’t prove that schema alone works. Google has always focused on visible, crawlable HTML Schema is supplementary, not primary content.

---

<div class="post-metadata">

**Author:** ![boston85719](https://sea1.discourse-cdn.com/bubble/user_avatar/forum.bubble.io/boston85719/32/77286_2.png) [@boston85719](https://forum.bubble.io/u/boston85719)\
**Post date:** [October 19, 2025, 12:51pm UTC](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/20 "2025-10-19T12:51:59Z")

</div>

> [@darren.james7518](#):
>
> You mentioned structured data works. But @randomanon asked a great question that didn’t get answered: _“If you put dynamic content (e.g. current page’s X) in the structured data, doesn’t that lead to the same ‘problem?’”_

Was this answer not sufficient? [How to Make Blog Post Crawlable? - #17 by boston85719](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338/17)

[Next page](https://forum.bubble.io/t/how-to-make-blog-post-crawlable/383338.md?page=2)
