Serve a static pre-rendered version of a create-react-app app only to web crawlers2019 Community Moderator ElectionAngular data-binding not working with Jadecreate-react-app build doen't work in sub directory pathDeploying create-react-app - Statically vs. Dynamically?Serve another(standalone) page or static file in website built with reactHow to use react within Express?How to make express serve static files from another upper directory?Other endpoints are ignored when using express.staticStatic images are not loading after npm run build in create-react-appWhy does React routes doesn't work on server properly?React-snap and register service worker
Why don't MCU characters ever seem to have language issues?
Peter's Strange Word
Force user to remove USB token
Replacing Windows 7 security updates with anti-virus?
The bar has been raised
Why is there a voltage between the mains ground and my radiator?
Are babies of evil humanoid species inherently evil?
Rejected in 4th interview round citing insufficient years of experience
Do f-stop and exposure time perfectly cancel?
What are some noteworthy "mic-drop" moments in math?
What is wrong with Escaped Shapeshifter's original wording?
In the late 1940’s to early 1950’s what technology was available that could melt a LOT of ice?
My story is written in English, but is set in my home country. What language should I use for the dialogue?
Making a sword in the stone, in a medieval world without magic
"One can do his homework in the library"
BitNot does not flip bits in the way I expected
Why is this plane circling around the Lucknow airport every day?
Could a cubesat be propelled to the moon?
They call me Inspector Morse
Algorithm to convert a fixed-length string to the smallest possible collision-free representation?
Does "variables should live in the smallest scope as possible" include the case "variables should not exist if possible"?
How do anti-virus programs start at Windows boot?
Examples of a statistic that is not independent of sample's distribution?
Solving "Resistance between two nodes on a grid" problem in Mathematica
Serve a static pre-rendered version of a create-react-app app only to web crawlers
2019 Community Moderator ElectionAngular data-binding not working with Jadecreate-react-app build doen't work in sub directory pathDeploying create-react-app - Statically vs. Dynamically?Serve another(standalone) page or static file in website built with reactHow to use react within Express?How to make express serve static files from another upper directory?Other endpoints are ignored when using express.staticStatic images are not loading after npm run build in create-react-appWhy does React routes doesn't work on server properly?React-snap and register service worker
I have built a web app using create-react-app
and react-router
. It is served by an express
server on the backend which also runs a GraphQL API. The front end of the website is served by express
using the following code:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
I have now come to the realisation that when using CRA, web crawlers and social media websites can't access the information easily as the content of the page is injected by javascript.
It's too late in this project for me to go back and start with something like nextjs
.
A simple solution seems to be create a prerendered version of the website using a headless browser, and serve this version only to crawlers via their user agent.
For this I tried using react-snap
, which runs post yarn build
of the front end to create static HTML files. While this mostly works (especially from a web crawler perspective) it does seem to break some functionality, as such for human users I still want to serve the SPA bundle created by yarn build
and only serve the static HTML version to crawlers.
Implemented by something like this on the backend:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
if (crawlerUserAgents.includes(req.headers['user-agent']))
// serve pre-rendered static HTML version of the web app
else
// serve normal injected version of the web app
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
But the output of react-snap
doesn't seem to be able to create an isolated static version of the site in a separate folder within the build
folder. So I can't seem to serve one version to humans and one to web crawlers.
Is there a way to serve a static version of the website via Express using react-snap
or something similar? I am aware of commerical solutions to this but would prefer something simple via express
.
javascript reactjs web-crawler serverside-rendering react-snap
add a comment |
I have built a web app using create-react-app
and react-router
. It is served by an express
server on the backend which also runs a GraphQL API. The front end of the website is served by express
using the following code:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
I have now come to the realisation that when using CRA, web crawlers and social media websites can't access the information easily as the content of the page is injected by javascript.
It's too late in this project for me to go back and start with something like nextjs
.
A simple solution seems to be create a prerendered version of the website using a headless browser, and serve this version only to crawlers via their user agent.
For this I tried using react-snap
, which runs post yarn build
of the front end to create static HTML files. While this mostly works (especially from a web crawler perspective) it does seem to break some functionality, as such for human users I still want to serve the SPA bundle created by yarn build
and only serve the static HTML version to crawlers.
Implemented by something like this on the backend:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
if (crawlerUserAgents.includes(req.headers['user-agent']))
// serve pre-rendered static HTML version of the web app
else
// serve normal injected version of the web app
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
But the output of react-snap
doesn't seem to be able to create an isolated static version of the site in a separate folder within the build
folder. So I can't seem to serve one version to humans and one to web crawlers.
Is there a way to serve a static version of the website via Express using react-snap
or something similar? I am aware of commerical solutions to this but would prefer something simple via express
.
javascript reactjs web-crawler serverside-rendering react-snap
add a comment |
I have built a web app using create-react-app
and react-router
. It is served by an express
server on the backend which also runs a GraphQL API. The front end of the website is served by express
using the following code:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
I have now come to the realisation that when using CRA, web crawlers and social media websites can't access the information easily as the content of the page is injected by javascript.
It's too late in this project for me to go back and start with something like nextjs
.
A simple solution seems to be create a prerendered version of the website using a headless browser, and serve this version only to crawlers via their user agent.
For this I tried using react-snap
, which runs post yarn build
of the front end to create static HTML files. While this mostly works (especially from a web crawler perspective) it does seem to break some functionality, as such for human users I still want to serve the SPA bundle created by yarn build
and only serve the static HTML version to crawlers.
Implemented by something like this on the backend:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
if (crawlerUserAgents.includes(req.headers['user-agent']))
// serve pre-rendered static HTML version of the web app
else
// serve normal injected version of the web app
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
But the output of react-snap
doesn't seem to be able to create an isolated static version of the site in a separate folder within the build
folder. So I can't seem to serve one version to humans and one to web crawlers.
Is there a way to serve a static version of the website via Express using react-snap
or something similar? I am aware of commerical solutions to this but would prefer something simple via express
.
javascript reactjs web-crawler serverside-rendering react-snap
I have built a web app using create-react-app
and react-router
. It is served by an express
server on the backend which also runs a GraphQL API. The front end of the website is served by express
using the following code:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
I have now come to the realisation that when using CRA, web crawlers and social media websites can't access the information easily as the content of the page is injected by javascript.
It's too late in this project for me to go back and start with something like nextjs
.
A simple solution seems to be create a prerendered version of the website using a headless browser, and serve this version only to crawlers via their user agent.
For this I tried using react-snap
, which runs post yarn build
of the front end to create static HTML files. While this mostly works (especially from a web crawler perspective) it does seem to break some functionality, as such for human users I still want to serve the SPA bundle created by yarn build
and only serve the static HTML version to crawlers.
Implemented by something like this on the backend:
// Sending React Frontend Build
app.use(express.static(`$__dirname/../frontend/build`))
app.get('/*', (req, res) =>
if (crawlerUserAgents.includes(req.headers['user-agent']))
// serve pre-rendered static HTML version of the web app
else
// serve normal injected version of the web app
res.sendFile(path.join(__dirname, '../frontend/build/index.html'))
)
But the output of react-snap
doesn't seem to be able to create an isolated static version of the site in a separate folder within the build
folder. So I can't seem to serve one version to humans and one to web crawlers.
Is there a way to serve a static version of the website via Express using react-snap
or something similar? I am aware of commerical solutions to this but would prefer something simple via express
.
javascript reactjs web-crawler serverside-rendering react-snap
javascript reactjs web-crawler serverside-rendering react-snap
asked Mar 6 at 15:56
BML91BML91
7442726
7442726
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55027245%2fserve-a-static-pre-rendered-version-of-a-create-react-app-app-only-to-web-crawle%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55027245%2fserve-a-static-pre-rendered-version-of-a-create-react-app-app-only-to-web-crawle%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown