Podwójny content (www i bez www) - redirect 301 i canonical tag w Node/Express

0

Cześć. Dziękuję, że poświęcacie mi swój czas. Uczę się SEO pod aplikacje w React + Express. Przerzuciłem moją stronę przez jeden z seo checkerów ( www.woorank.com ) i naprawiam błędy i niedociągnięcia, które ta aplikacja znalazła w moim kodzie pod względem SEO. Utknąłem na:
Komunikat z woorank.com
Próbowałem na różne sposoby zrobić to co jest tam napisane. Wstawiłem canonicala do index.html strony głównej:
canonical w index.html
Próbowałem też na różne sposoby zrobić redirect 301, ale nie udaje mi się. Próbowałem np tak:

app.use((req, res, next) => {
  
  var host = req.get('Host');
  if (host === 'http://www.mitroinc.pl') {
    return res.redirect(301, 'http://mitroinc.pl/' + req.originalUrl);
  }
  return next();
});

Słabo znam się na backendzie. Zrozumiałem to tak, że niezależnie czy wpiszę www.strona.pl, czy samo strona.pl, czy http://strona.pl, czy może https, to zawsze ma mnie kierować na jeden url, np strona.pl i to właśnie próbowałem zrobić. Powiedzcie mi proszę, czy dobrze zrozumiałem o co chodzi i jak ogarnąć ten redirect. Frontend jest zrobiony w Reakcie i jest przerzucony przez Gatsby właśnie na potrzeby SEO. Nie ma żadnych podstron, jest tylko homepage i 404. Strona aktualnie jest hostowana na MyDevil. Plik server.js bez żadnych moich prób z redirectami wygląda tak:

const express = require("express");
const cors = require("cors");
const path = require("path");
const sendMail = require("./mail");
const { log } = console;
const app = express();
const compression = require("compression");

app.use(compression());
app.use(cors());

// Data parsing
app.use(
  express.urlencoded({
    extended: false,
  })
);
app.use(express.json());

// Nodemailer
app.put("/email", (req, res) => {
  const { subject, email, text } = req.body;
  log("Data: ", req.body);

  sendMail(email, subject, text, function (err, data) {
    if (err) {
      log("ERROR: ", err);
      return res.status(500).json({ message: err.message || "Internal Error" });
    }
    log("Email sent!!!");
    return res.json({ message: "Email sent!!!!!" });
  });
});
  
app.use(express.static("client"));
 
app.get("/", (req, res) => {
   res.sendFile(path.resolve(__dirname, "client", "index.html"));
});
  
app.get("*", (req, res) => {
   res.status(404);
   res.sendFile(path.resolve(__dirname, "client", "404", "index.html"));
});
 
const port = 12476;

app.listen(port, () => console.log(`Server started on port ${port}`));
1

Na czym masz podstawiony serwer? apache? nginx? To w jego configu powinno się zrobić takie redirecty, a nie w kodzie strony.

0
mr_jaro napisał(a):

Na czym masz podstawiony serwer? apache? nginx? To w jego configu powinno się zrobić takie redirecty, a nie w kodzie strony.

MyDevil działa na nginx, ale żadnej konfiguracji związanej z nginxem nie robiłem. Zrobiłem stronę typu proxy poprzez panel administracyjny z zarezerwowanym portem, wrzuciłem pliki i tyle.

0

Z tego co się orientuję to na MyDevil nie da się konfigurować nginxa z poziomu użytkownika, ale nie jestem pewien. Dałem radę zrobić przekierowania przez node. Wszystkie 4 adresy mojej strony - http://www.mitroinc.pl, http://mitroinc.pl, https://www.mitroinc.pl i https://mitroinc.pl kierują już pod jeden adres - https://www.mitroinc.pl. Fragmenty z mojego server.js, które dodałem:

const https = require('https');
const fs = require('fs');

// moja strona ma typ proxy z zarezerwowanym portem
app.enable('trust proxy')

// redirect http na https
app.use (function (req, res, next) {
  if (req.secure) {
    next();
  } else {
    res.redirect('https://' + req.headers.host + req.url);
  }
});

// redirect no-www na www
app.all(/.*/, function(req, res, next) {
  var host = req.header("host");
  if (host.match(/^www\..*/i)) {
    next();
  } else {
    res.redirect(301, "http://www." + host);
  }
});

// odczyt pliku dla SSL, który wrzuciłem w ten sam folder co server.js
var key = fs.readFileSync(__dirname + '/cert.key');
var cert = fs.readFileSync(__dirname + '/cert.pem');
var options = {
  key: key,
  cert: cert
};

var server = https.createServer(options, app);

1 użytkowników online, w tym zalogowanych: 0, gości: 1