# Page Publishing

**URL:** https://meta.discourse.org/t/page-publishing/151971
**Category:** Site Management
**Tags:** how-to, page-publishing, content
**Created:** [May 19, 2020, 6:56pm UTC](https://meta.discourse.org/t/page-publishing/151971 "2020-05-19T18:56:39Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [May 19, 2020, 6:56pm UTC](https://meta.discourse.org/t/page-publishing/151971/1 "2020-05-19T18:56:39Z")

</div>

> 🔖 This guide covers how to use the Page Publishing feature on Discourse. This feature allows Staff users to convert a topic into a standalone static page with custom styling. Examples include the Terms of Service and Privacy Policy pages.
> 
> 🙋 Required user level: Staff

# Publishing static pages on Discourse

Page Publishing allows Staff users to create standalone static pages from topics. This is similar to the process for creating Terms of Service or Privacy Policy pages.

## Summary

This documentation will cover:

- Enabling Page Publishing
- Publishing a topic as a page
- Unpublishing a topic
- Common issues and solutions
- FAQs
- Additional resources

## Enabling Page Publishing

1. Navigate to `Admin` \> `Settings`.
2. Activate the `enable page publishing` setting.  
 ![Enable Page Publishing](https://global.discourse-cdn.com/meta/original/4X/9/0/f/90fcfd0e321ed2cf6a1d6796f8413fee0063ecc6.png)

### Enabling page publishing when login is required

To allow published pages to be visible even when a user is not logged in:

1. Activate the `show_published_pages_login_required` setting at `Admin` \> `Settings`.  
 ![Show Published Pages](https://global.discourse-cdn.com/meta/original/4X/d/c/1/dc1b81deb4861cb701939a47a27cf9536630e47e.png)

## Publishing a Topic

1. Go to the first post of a public topic and select the ellipsis icon (`...`).  
 ![Ellipsis Menu](https://global.discourse-cdn.com/meta/original/3X/5/6/56a2bfdcdfc65c293c7563c278a169e37821c73d.png)

2. Select the wrench icon.  
 ![Wrench Icon](https://global.discourse-cdn.com/meta/original/3X/1/e/1efd872f5aaf95c63ae440d021fea33ed43dd97f.png)

3. Choose the “Page Publishing” option.  

4. A modal dialog will appear, allowing you to confirm the slug (which can be pre-filled from the post title) and preview the published page’s URL.  

⚠ **To allow page publishing, it’s necessary to deactivate the [secure upload](https://meta.discourse.org/t/secure-uploads/meta/140017) site settings.**

 ![Secure Uploads](https://global.discourse-cdn.com/meta/original/4X/2/b/d/2bde7a549942ce9cdd055ab3c467407b847795d4.png)

ℹ **For hosted sites, [secure uploads are limited to the Enterprise plan.](https://meta.discourse.org/t/secure-uploads/meta/140017#enabling-secure-uploads-2)**

## Published Topic

- If the `Public` option is checked, a public label will appear.  
 ![Public Option](https://global.discourse-cdn.com/meta/original/4X/8/3/1/831973deefe828009cf7d09d43c946f2ba24b0a2.png)  

- A published topic will show a notice under the title allowing access to its publishing settings.  

## Published Page

 ![Browser Published Page](https://global.discourse-cdn.com/meta/original/4X/4/b/d/4bd5bd036607e5f8adc93dc58426ceb894d2509b.png)

## Unpublishing a Topic

1. Select `Publishing Settings` under the notice.  

2. Click Unpublish  

3. Page is unpublished.  

## Common issues and solutions

### Unable to see published pages when logged out

Ensure the `show_published_pages_login_required` setting is activated in `Admin` \> `Settings`.

### Adding a Discourse header to published pages

Currently, static pages are intended to be minimal and do not include the typical Discourse header and footer.

## FAQs

### Can I make a FAQ or About page public?

You can create a new topic with the desired content and publish it as a page. Change the links in site settings to point to these new pages.

### How can I customize the look of a published page?

Use the structure of the HTML document and corresponding CSS selectors to apply custom styles under `Admin` \> `Customize` \> `Themes` \> `CSS`.

## Additional resources

- [Making custom CSS changes on your site](https://meta.discourse.org/t/make-css-changes-on-your-site/168101?silent=true)
- [https://meta.discourse.org/t/secure-uploads/meta/140017#enabling-secure-uploads-2](https://meta.discourse.org/t/secure-uploads/meta/140017#enabling-secure-uploads-2)

> Last edited by @yigit 2026-01-05T23:34:59Z
> 
> Last checked by @huynhthai824 2024-05-27T12:26:36Z
> 
> > **Check document**
> >
> > Perform check on document:

---

<div class="post-metadata">

### Author: ![downey](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/downey/32/166878_2.png) [@downey](https://meta.discourse.org/u/downey)
#### Post date: [May 19, 2020, 8:16pm UTC](https://meta.discourse.org/t/page-publishing/151971/8 "2020-05-19T20:16:20Z")

</div>

I still need to try this out first hand so the following may not be grounded in reality, but:

It strikes me that this permission model sets up a scenario where you always see two copies of the pages’ content – one in the relevant Discourse category, and one in the published pages themselves. This of course seems duplicative if you’re wanting to publish pages for the general population that is similar to, or identical to, your Discourse user base.

OTOH, if pages had the “world readable” flag available, you could then restrict who can see/edit them to a small group, and the only place the content would be available to other Discourse users would be in the published links themselves.

(I’m thinking of a use case of a “documentation site” here.)

Otherwise, I’m pretty excited to test things out!

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [June 26, 2020, 11:07pm UTC](https://meta.discourse.org/t/page-publishing/151971/38 "2020-06-26T23:07:48Z")

</div>

Awesome stuff, and thanks again for listening to your users. I love the ‘lets make this better for us all’ vibe that Discourse has! We’ll make heavy use of this.

When discussing one use (patching up an install that went a bit awry), another user pointed out a remaining bit of icing that could do with going on the cake:

> [@Pre seeded posts all missing - Missing Terms of Service, FAQ and Privacy pages](https://meta.discourse.org/t/pre-seeded-posts-all-missing-missing-terms-of-service-faq-and-privacy-pages/149314/37):
>
> not sure why FAQ is omitted from sign up dialog, but you can also set this url here as well - though not sure purpose of this feild/what otherwise links to it if not included in signup dialog?

Hey, is there any way to include the ability to make /faq and /about public as well, as they are currently hidden in Login Required sites. We can of course use the existing functionality that you’ve just released for /faq by making our own, changing the link in settings, and explicitly linking to it. However, this is not pretty and the existing navigation to it remains hidden. We can’t do that at all for /about of course.

---

<div class="post-metadata">

### Author: ![core](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/core/32/183957_2.png) [@core](https://meta.discourse.org/u/core)
#### Post date: [June 27, 2020, 2:50pm UTC](https://meta.discourse.org/t/page-publishing/151971/39 "2020-06-27T14:50:07Z")

</div>

Something that would go nice with this feature is to make publications onebox-compatible such that people could easily share the content.

---

<div class="post-metadata">

### Author: ![DanDevine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dandevine/32/188014_2.png) [@DanDevine](https://meta.discourse.org/u/DanDevine)
#### Post date: [July 25, 2020, 10:36am UTC](https://meta.discourse.org/t/page-publishing/151971/43 "2020-07-25T10:36:30Z")

</div>

Please excuse my ignorance, as I am very much a beginner in the HTML/CSS space.. however, how would we go about applying our theme colour choices to published pages. At its simplest, I’d like to use the dark background/white text to give the published pages the same darkmode experience as accessing our forums.

Is this already in the product, or do I need to play with HTML/CSS? If the latter, could anyone give me some pointers in the right direction? Thanks!

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [July 25, 2020, 1:19pm UTC](https://meta.discourse.org/t/page-publishing/151971/45 "2020-07-25T13:19:38Z")

</div>

> [@nathank](#):
>
> Hey, is there any way to include the ability to make /faq and /about public as well, as they are currently hidden in Login Required sites. We can of course use the existing functionality that you’ve just released for /faq by making our own, changing the link in settings, and explicitly linking to it. However, this is not pretty and the existing navigation to it remains hidden. We can’t do that at all for /about of course.

Can you make this a separate feature request please? This is not related to page publishing, as in I wouldn’t have to change anything related to page publishing to make it possible. I do agree it would be better if all these “static” pages could have more or less the same behaviour, but there are multiple solutions here (do nothing? add site settings? migrate these to page publishing?), so we might want to have a dedicated topic for this.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [August 17, 2020, 2:07pm UTC](https://meta.discourse.org/t/page-publishing/151971/68 "2020-08-17T14:07:06Z")

</div>

GTM not loaded on published pages? Would be nice.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [August 18, 2020, 4:18pm UTC](https://meta.discourse.org/t/page-publishing/151971/73 "2020-08-18T16:18:12Z")

</div>

> [@Adding DiscoTOC to Published Pages](https://meta.discourse.org/t/adding-discotoc-to-published-pages/246402/5):
>
> but wouldn’t that cause error with other themes trying to load code which is not available?

Hmm that is a really good point.

Just trying to think of a solution here… would it work if `type="text/javascript"` and `type="text/discourse-plugin"` were treated differently? The API needs the latter, right?

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [August 18, 2020, 4:27pm UTC](https://meta.discourse.org/t/page-publishing/151971/74 "2020-08-18T16:27:04Z")

</div>

Yes I think we already support having a `text/javascript` in the theme fields, so there are certainly solutions in this area.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [August 19, 2020, 6:42am UTC](https://meta.discourse.org/t/page-publishing/151971/75 "2020-08-19T06:42:54Z")

</div>

That would be great.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [August 19, 2020, 7:47pm UTC](https://meta.discourse.org/t/page-publishing/151971/76 "2020-08-19T19:47:25Z")

</div>

> [@Adding DiscoTOC to Published Pages](https://meta.discourse.org/t/adding-discotoc-to-published-pages/246402/3):
>
> at the moment page publishing is not designed to support theme components or anything using plugin api and especially decorateCooked.

So it’s currently impossible to have responsive published pages, and this site particularly wants

1. images made available when sharing to public media, and
2. responsive/resizing images displayed, especially on mobile–oh, mobile could just resize the image with CSS–that should work, right?

---

<div class="post-metadata">

### Author: ![syl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/syl/32/98883_2.png) [@syl](https://meta.discourse.org/u/syl)
#### Post date: [August 25, 2020, 10:20am UTC](https://meta.discourse.org/t/page-publishing/151971/77 "2020-08-25T10:20:41Z")

</div>

+1 for having the Discourse header in published pages. I’m missing my website logo, custom header links and beloved hamburger menu 🙂

Another oddity: in posts, my lightboxed images open in a nice popup, whereas in published pages, they open in a new tab…

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [August 28, 2020, 12:37am UTC](https://meta.discourse.org/t/page-publishing/151971/78 "2020-08-28T00:37:46Z")

</div>

I think what’s needed is a set of theme components that add such. The last client I had to use this wanted the topic creator removed. I think it’s hard to guess what will meet people’s needs for this!

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [August 28, 2020, 5:30pm UTC](https://meta.discourse.org/t/page-publishing/151971/79 "2020-08-28T17:30:02Z")

</div>

Are there currently any ongoing efforts for adding “simple” (non-API) Javascript support to published pages? Or should we forget about this near- to mid-term ?

---

<div class="post-metadata">

### Author: ![ddf](https://avatars.discourse-cdn.com/v4/letter/d/f475e1/32.png) [@ddf](https://meta.discourse.org/u/ddf)
#### Post date: [September 27, 2020, 11:14am UTC](https://meta.discourse.org/t/page-publishing/151971/96 "2020-09-27T11:14:25Z")

</div>

Can i display external non-Discourse JSON on this page? Because we can’t use php code here and discourse strip most of html so i do not know how to do it..

---

<div class="post-metadata">

### Author: ![Ed\_Bobkov](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_bobkov/32/200014_2.png) [@Ed\_Bobkov](https://meta.discourse.org/u/Ed_Bobkov)
#### Post date: [November 5, 2020, 5:37pm UTC](https://meta.discourse.org/t/page-publishing/151971/97 "2020-11-05T17:37:20Z")

</div>

I have a problem with a published page - the button to copy the content of the code block is not visible on a published page. Screenshot: [Screenshot by Lightshot](https://prnt.sc/ve6j6t). I move the mouse over the block, but the button doesn’t appear. When logged in - everything works as usual - ok.

Can anybody repeat the problem? Any solution?

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [November 10, 2020, 10:17pm UTC](https://meta.discourse.org/t/page-publishing/151971/103 "2020-11-10T22:17:01Z")

</div>

Thank you @riking !

It indeed seems that “regular” `text/javascript` is executing on published pages when it’s in the `header` or `footer` of a theme component.

---

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [November 16, 2020, 4:07pm UTC](https://meta.discourse.org/t/page-publishing/151971/104 "2020-11-16T16:07:42Z")

</div>

Ha! So it seems that there’s a hacky way to make some theme components work with page publishing.

I’m looking into adding some header/footer to the published pages, and theme components seem to be the way to go. But it seems bad to go on and implement something that would potentially break in the near future.

@riking, it looks like the `text/javacript` type in `header` or `footer` working on published pages was unintented. Is it going to be _fixed_ or _used_ to extend published pages?

@syl, author of DiscPage, mentioned the possibility to [re-implement the DiscPage plugin using Page Publishing functionality](https://github.com/sylque/discpage/issues/8). Do you still have this in mind, @syl? What do you think would be the path of least resistance to integrate both functionality @riking?

---

<div class="post-metadata">

### Author: ![syl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/syl/32/98883_2.png) [@syl](https://meta.discourse.org/u/syl)
#### Post date: [November 16, 2020, 8:46pm UTC](https://meta.discourse.org/t/page-publishing/151971/105 "2020-11-16T20:46:41Z")

</div>

> [@hellekin](#):
>
> @syl, author of DiscPage, mentioned the possibility to [re-implement the DiscPage plugin using Page Publishing functionality](https://github.com/sylque/discpage/issues/8). Do you still have this in mind, @syl?

Unfortunately, the “Page Publishing” feature doesn’t meet my needs. For me to use it, I would need published pages:

1. to be displayed within the normal Discourse layout, i.e. with the standard Discourse header (just like the [Terms of Service](https://meta.discourse.org/tos) and the [Privacy Policy](https://meta.discourse.org/privacy)), and
2. to be rendered like normal (decorated) topics, i.e. supporting bbcode and plugins.

---

<div class="post-metadata">

### Author: ![hellekin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hellekin/32/51636_2.png) [@hellekin](https://meta.discourse.org/u/hellekin)
#### Post date: [November 18, 2020, 11:41am UTC](https://meta.discourse.org/t/page-publishing/151971/106 "2020-11-18T11:41:22Z")

</div>

In the meantime I used the default Discourse customization facility:

1. Identify the added element, e.g., with a `published-page-footer-links` CSS class.
2. Customize CSS to hide this element by default and show it only for published pages
3. Add the element in the `Footer` space

#### 2. In CSS, add:

```css
/* Only show footer links on published pages */
.published-page-footer-links { display: none; }
.published-page .published-page-footer-links { display: block;}

```

#### 3. in Footer, add:

```html
<nav class="published-page-footer-links">
Hi there! This is the footer for published pages!
</nav>

```

[Next page](https://meta.discourse.org/t/page-publishing/151971.md?page=2)
