10

そこにあるすべてのオプションを試したように感じますが、何も成功しませんでした. 最初に、私が試したオプションをリストします。

Apache で prerender を使用する:

次の手順を使用してこれを試みました。

角度の場合:

$locationProvider.html5Mode(true);

HTML で、次のメタ ヘッダーを追加します。

<head>
    <meta name="fragment" content="!">
</head>

アパッチを構成します。

  RewriteEngine On
# If requested resource exists as a file or directory
  # (REQUEST_FILENAME is only relative in virtualhost context, so not usable)
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    # Go to it as is
    RewriteRule ^ - [L]

  # If non existent
    # If path ends with / and is not just a single /, redirect to without the trailing /
      RewriteCond %{REQUEST_URI} ^.*/$
      RewriteCond %{REQUEST_URI} !^/$
      RewriteRule ^(.*)/$ $1 [R,QSA,L]      

  # Handle Prerender.io
    RequestHeader set X-Prerender-Token "YOUR_TOKEN"

    RewriteCond %{HTTP_USER_AGENT} baiduspider|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest [NC,OR]
    RewriteCond %{QUERY_STRING} _escaped_fragment_

    # Proxy the request
    RewriteRule ^(.*)$ http://service.prerender.io/http://%{HTTP_HOST}$1 [P,L]

  # If non existent
    # Accept everything on index.html
    RewriteRule ^ /index.html

これはまったく機能しませんでした。Google は私のサブページを読み取ることができませんでした。

Node / Phantomjs を使用してページをレンダリングする

    var express = require('express');
var app = module.exports = express();
var phantom = require('node-phantom');
app.use('/', function (req, res) {
    if (typeof(req.query._escaped_fragment_) !== "undefined") {
        phantom.create(function (err, ph) {
            return ph.createPage(function (err, page) {
                return page.open("https://system.dk/#!" + req.query._esca$
                    return page.evaluate((function () {
                        return document.getElementsByTagName('html')[0].innerHT$
                    }), function (err, result) {
                        res.send(result);
                        return ph.exit();
                    });
                });
            });
        });
    } else
        res.render('index');
});

app.listen(3500);
console.log('Magic happens on port ' + 3500);

ここでこのサイトを作成し、Apache 構成にプロキシを追加して、すべての要求がドメイン ポートを指すようにしました3500

インデックスをレンダリングできなかったため、これは機能しませんでした。最終的にhtmlページを送信するようになったときにJavaScriptがレンダリングされませんでした。

カスタム スナップショット ガイドに従う

次に、このガイドに従いました。

http://www.yearofmoo.com/2012/11/angularjs-and-seo.html

ただし、これには、探しているものではなく、維持するのが面倒なすべてのカスタムスナップショットを作成する必要がありました。さらに、make-snapshot は私のサーバーでは機能しませんでした。

4

1 に答える 1

2

理論的には、ページを Google クローラーに事前にレンダリングする必要はありません。彼らは最近、JavaScriptを解析します。http://googlewebmastercentral.blogspot.ca/2014/05/understanding-web-pages-better.html

Google は私の angularJS Web サイトを問題なく解析します。https://www.google.nl/search?q=site%3Atest.coachgezocht.nu

$locationProvider.html5Mode(true); の使用 と:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteRule (.*) index.html [L]
于 2015-10-08T19:51:48.073 に答える